在编写一些自动化脚本的时候,需要以 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 中的 ALLSCMD (对应上面的 Cmnd_Alias 中的命名)

这样 lab 就只能免密执行 sudo apt update ,其他的命令因为 lab 还处在 sudo 组里面,所以也还是能执行的,只是需要密码,匹配 %sudo ALL=(ALL:ALL) ALL 这条规则

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

木 白 微信支付

微信支付

木 白 支付宝

支付宝

木 白 贝宝

贝宝