我想授予组安装软件的权限,而无需输入 root/sudo 密码。我使用的是 Linux Mint 20.3 Cinnamon。
我创建了一个名为“basicsudo”的小组。
我首先输入
$ which apt-get
/usr/bin/apt-get
然后
sudo visudo
然后我添加了以下行
%basicsudo ALL=(ALL) NOPASSWD: /usr/bin/apt-get install
到/etc/sudoers.tmp
[...]
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
%basicsudo ALL=(ALL) NOPASSWD: /usr/bin/apt-get install
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Groups and Users
我通过使用菜单中的 GUI将组分配给用户。为了检查这个我已经跑了
$ groupname Alice
Alice, basicsudo
从我的帐户。
当以 Alice 身份登录时,这一点得到确认
$ groups
Alice, basicsudo
但是当尝试以 Alice 身份执行以下行时,我没有成功:
$ sudo apt-get install python3-pip
[sudo] password for Alice:
Sorry, user Alice is not allowed to execute '/usr/bin/apt-get install python3-pip' as root on computername.
很明显,a)系统提示我输入密码,b)尽管输入了密码,但我无法执行它。
执行此操作的正确方法是什么?
答案1
改变:
%basicsudo ALL=(ALL) NOPASSWD: /usr/bin/apt-get install
到
%basicsudo ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *
从man sudoers
:
命令名是完全限定的文件名,其中可能包含 shell 样式的通配符...简单的文件名允许用户使用他们希望的任何参数运行命令。但是,您也可以指定命令行参数(包括通配符)。或者,您可以指定“”来指示该命令只能在没有命令行参数的情况下运行...
如果 Cmnd 具有关联的命令行参数,则 Cmnd 中的参数必须与用户在命令行上给出的参数完全匹配(或者匹配通配符(如果有))...
所以:
苏多尔斯 | 意义 |
---|---|
%basicsudo ALL= /usr/bin/apt-get "" |
apt-get 不带参数运行 |
%basicsudo ALL= /usr/bin/apt-get |
apt-get 使用任何参数运行 |
%basicsudo ALL= /usr/bin/apt-get install |
apt-get install 没有更多参数运行 |
%basicsudo ALL= /usr/bin/apt-get install * |
apt-get install 使用更多参数运行 |