Ale*_*owe 8 permissions security sudo users
我无法弄清楚如何允许用户(在这种情况下test)只能apt-get update使用sudoers文件运行命令。当我尝试添加用户然后对其进行测试时,它仍然不允许用户运行该命令。
有人可以帮我吗?我一整天都在研究这个,但仍然无法弄清楚。我可能输入错误。
我正在使用 Ubuntu 14.04。
首先,编辑/etc/sudoers唯一的visudo
您可以设置权限为用户joe的apt-get命令仅添加以下行:
%joe your_hostname=(root):/usr/bin/apt-get
Run Code Online (Sandbox Code Playgroud)
以 身份登录后joe,您可以检查权限:
sudo -l
Run Code Online (Sandbox Code Playgroud)
编辑:用户将能够使用 apt-get 更新、升级、安装等;因为这些只是 apt-get 命令的标志。
看看 Andre Herman Bezerra 的答案,评论中指出了唯一的问题,这并不限制用户仅更新(他们可以安装/删除软件包)。
如果您想限制用户只能更新,最好执行以下操作。
创建一个组或使用该%staff组。
在此示例中,我选择使用员工用户组。
更新sudoers文档。
export editor="vi" && sudo visudo
Run Code Online (Sandbox Code Playgroud)
创建一个Cmnd_Alias将定义允许的bash脚本。
Cmnd_Alias UPDATER_ONLY = /usr/local/bin/updater.sh
Run Code Online (Sandbox Code Playgroud)
您需要定义如何允许该命令。
# Require staff to enter password when updating.
%staff ALL= UPDATER_ONLY
# Or, password is not required, just run the updater.
%staff ALL= NOPASSWD: UPDATER_ONLY
Run Code Online (Sandbox Code Playgroud)
最后,您需要创建外壳。
为了防止任何人编辑该文件,该文件应由 root 拥有且只读,或者在运行sudo时创建。
$ sudo echo '#!/bin/bash' >> /usr/local/bin/updater.sh
$ sudo echo 'sudo apt-get update && sudo apt-get upgrade -y' >> /usr/local/bin/updater.sh
$ sudo chmod 0755 /usr/local/bin/updater.sh
Run Code Online (Sandbox Code Playgroud)
这应该如下所示:
$ ls -la /usr/local/bin/updater.sh
-rwxr-xr-x 1 root root 60 Jan 22 08:50 /usr/local/bin/updater.sh*
Run Code Online (Sandbox Code Playgroud)
我们快完成了!
您需要记住通过将用户添加到员工组来允许此权限。
sudo usermod -aG staff the-user
Run Code Online (Sandbox Code Playgroud)
如果有人尝试安装某些东西,他们会收到以下内容:
test-me@comp0:~$ sudo apt-get install test
[sudo] password for test-me:
Sorry, user test-me is not allowed to execute '/usr/bin/apt-get install test' as root on comp0.
Run Code Online (Sandbox Code Playgroud)