在编写一些自动化脚本的时候,需要以 root 权限执行某些命令,这时候通过修改 /etc/sudoers 来实现免密执行 sudo 命令是一个比较好的办法。
# 查看用户所在组
lab@testlink:~$ groups | |
lab adm cdrom sudo dip plugdev lxd |
可以看到用户 lab 在 lab,sudo... 等等组里
# 配置 sudoers
lab@testlink:~$ sudo vim /etc/sudoers | |
... | |
# 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 | |
%lab ALL=(ALL:ALL) NOPASSWD:ALL | |
... |
关键部分如上,在 /etc/sudoers
中加入一行%lab ALL=(ALL:ALL) NOPASSWD:ALL
这表示 lab 这个组下的用户可以免密以 sudo
执行命令
注:
为什么不直接加入 lab
这个用户免密而是要加入组呢?这是由于用户 lab
还在 sudo
这个组里面, %sudo
组的配置会覆盖用户的配置,即使配置了用户免密,依然要输入密码,这是与早期 ubuntu 版本不同的地方!
# 部分命令免密
如果不希望 lab
用户能以 sudo
免密执行所有命令,如何操作?比如只希望免密执行 sudo apt update
,操作如下:
lab@testlink:~$ sudo vim /etc/sudoers | |
... | |
# Cmnd alias specification | |
Cmnd_Alias SCMD=/usr/bin/apt update | |
# 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 | |
%lab ALL=(ALL:ALL) NOPASSWD:SCMD | |
... |
- 添加
Cmnd_Alias SCMD=/usr/bin/apt update
- 修改
%lab ALL=(ALL:ALL) NOPASSWD:ALL
中的ALL
为SCMD
(对应上面的 Cmnd_Alias 中的命名)
这样 lab 就只能免密执行 sudo apt update
,其他的命令因为 lab 还处在 sudo
组里面,所以也还是能执行的,只是需要密码,匹配 %sudo ALL=(ALL:ALL) ALL
这条规则