限制用户执行选择性命令 (Linux)

new*_*e17 15 linux sudo

如何限制我的用户仅执行选择性命令。我在 tomc 组中有一个用户 tomc。我需要这个用户成为 sudo 用户,然后限制 bash。我已经尝试在/etc/sudoers文件中遵循以下代码,但它不起作用,因为用户能够执行其他命令,例如mkdirrm

%tomc ALL=/bin/bash,/usr/bin/vim /*
Run Code Online (Sandbox Code Playgroud)

mta*_*tak 20

您可能会以错误的方式进行此操作。与其给用户一个“受限”的 bash shell,你应该只让他们访问他们需要以 root 身份运行的命令。例如,在您的 sudoers 文件中:

tomc ALL=(root) /usr/bin/vim /etc/myapp.conf
tomc ALL=(root) /usr/bin/less /var/log/myapp/*.log
Run Code Online (Sandbox Code Playgroud)

允许用户以 root 身份运行 vim 时要小心。Vim 有很多内置功能,比如转义到 shell 和在 vim 中运行命令的能力。根据您的发行版,您可能有sudoedit可用的。这与普通 Vim 的工作方式相同,除了它被设计为处理 shell 转义等。

  • ***这两行都不安全。*** 正如你提到的,`vim` 可以运行任意的 shell 命令。第二行可能会允许`less /var/log/myapp/../../../etc/shadow`!根据我的实验[安全使用 sudo 很难](http://superuser.com/questions/735172/how-to-prevent-sudo-users-from-running-specific-commands#735286)!但是如果你可以避免 `*` 并使用 `sudoedit` 而不是 `vim` 那么你可能没问题。 (10认同)

小智 5

在运行 DSM 6 的 Synology Diskstation 上,只有管理员用户可以一致地进行 ssh(非管理员用户在 /etc/passwd 中的 shell 为 /sbin/nologin - 您可以将其设置为 /bin/sh 以暂时允许 ssh,但在重新启动时/etc/passwd 文件被重置)。因此,帐户需要某种 sudo 限制,否则该帐户仅用于执行 /sbin/poweroff。/etc/sudoers 中的以下几行对我有用:

# Allow guestx user to remote poweroff
guestx ALL=(ALL) !ALL
guestx ALL=NOPASSWD: /sbin/poweroff
Run Code Online (Sandbox Code Playgroud)

翻译:禁止所有命令,然后仅允许所需的命令(在这种情况下不要求密码)。

使用此配置 sudo 会要求输入密码,然后对于白名单以外的命令将失败:

guestx@ds:~$ sudo su -
Password: 
Sorry, user guestx is not allowed to execute '/bin/su -' as root on ds.
guestx@ds:~$ 
Run Code Online (Sandbox Code Playgroud)