由 neevop 十月 28, 2022
Linux sudo工具配置
sudo 简介
如果您在任何 Linux 命令前加上“sudo”前缀,它将以提升的权限运行该命令。执行某些管理任务需要提升的权限。Sudo 是提升权限的最佳和最安全的方法。安装sudo
可以通过
# su
$ apt-get install sudo -y # for ubuntu or debian
系统新建用户后,一般是不具备sudo
命令的使用权限的,需要手动将当前用户添加sudo
用户组
-
切换
root
用户或者任意具有sudo
命令权限的用户, -
将新建用户添加
sudo
用户组。$ sudo adduser username sudo # for centos $ sudo usermod -aG wheel username # 在centos中wheel用户组所有成员默认被授予sudo使用权限
visudo操作
/etc/sudoers这个文件是 sudo 的下层。它控制谁可以使用 sudo 命令获得提升的权限。正常情况下这个文件有写保护,哪怕是root
用户也不可修改这个文件。
$ ll /etc/sudoers
-r--r-----. 1 root root 4038 Aug 2 02:01 /etc/sudoers
可以看到这个文件的权限是0440
,就算是所属用户都只有读权限。如果需要修改这个文件就需要先修改这个文件的权限
# su
$ chmod 640 /etc/sudoers
操作后,所属用户root
便拥有的写入文件的权限。但是个人并不建议这种方式直接操作/etc/sudoers
文件,一旦文件内容修改错误,sudo
命令就无法正常使用,对于一些图形界面引导安装的linux系统,由于没有设置root
用户密码,这个失误将是毁灭性的。出现这种状况后,可以考虑使用ubuntu系统引导盘进入引导系统,重新修正系统硬盘上的/etc/sudoers
文件。
编辑此文件的最佳和最安全的方法是使用visudo
命令。此命令将以提升的权限启动vi
编辑器,以便您可以编辑文件并保存它。它还将在 sudoers 文件上放置一个文件锁,以便其他人无法编辑它。 完成编辑后,它将解析文件以查找简单错误。与使用任何旧的文本编辑器相比,这是一种编辑 sudo 文件的更安全的方法。
编辑/etc/sudoers
文件以便于我们可以方便的定制sudo
命令的使用规则。以下是两种常用的定制
-
给特定用户组或用户添加
sudo
权限运行特定命令。## Allows people in group wheel/sudo to run all commands %wheel ALL=(ALL) ALL # for centos %sudo ALL=(ALL:ALL) ALL # for debian/ubuntu ## Allows members of the users group to shutdown this system # %users localhost=/sbin/shutdown -h now ## Allow root to run any commands anywhere root ALL=(ALL) ALL
以上是系统的默认设置,可以按照提示添加特定的定制内容。
-
设置单个用户
sudo
命令无密码,这个定制会极大方便用户和脚本使用sudo
命令。myuser ALL=(ALL:ALL) NOPASSWD: ALL # or myuser ALL=(ALL) NOPASSWD: ALL
这个定制内容如果是在公网服务器上会有较大的安全隐患,我们也可以定制部分命令无密码来降低风险。
myuser ALL=(www-data:www-data) NOPASSWD: ALL myuser ALL= NOPASSWD: /bin/mkdir
在执行visudo
命令设置我们需要的内容时,会注意到在/etc/sudoers
文件末尾有行配置
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
也就是说我们可以定制属于自己的配置文件单独存放在/etc/sudoers.d
路径下,而不用去修改/etc/sudoers
文件里面的默认配置。可以通过如下命令实现
$ sudo visudo -f /etc/sudoers.d/myOverrides
由于sudo
命令配置内容是施行"最后一条规则优先"的规则,所以你在/etc/sudoers.d
里面的配置内容会覆盖/etc/sudoers
里面的配置内容。也正是因为有这个规则的存在,所以有些直接修改/etc/sudoers
的操作并不会生效。例如
...
# User privilege specification
root ALL=(ALL:ALL) ALL
myuser ALL=(ALL:ALL) NOPASSWD: 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
...
如果你按照文章开头位置老实将myuser
用户添加了admin
或sudo
用户组,这里就会出现myuser ALL=(ALL:ALL) NOPASSWD: ALL
无法生效的问题。是因为这里对用户的配置被后面的对sudo
或admin
用户组的配置覆盖了,导致NOPASSWD
的配置无法生效。
$ groups
adm cdrom sudo dip plugdev lpadmin sambashare
因此在完成对单个用户的配置后可以检查该用户的权限是否符合自己的要求。
$ sudo -l
User myuser may run the following commands on host:
(ALL : ALL) NOPASSWD: ALL
(ALL : ALL) ALL
上面所说的这种情况,只需要将自己的配置挪到配置文件的末尾或者上文中新的文件里即可
...
# 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
myuser ALL=(ALL:ALL) NOPASSWD: ALL
...
重新查看用户的sudo
权限配置
$ sudo -l
User myuser may run the following commands on host:
(ALL : ALL) ALL
(ALL : ALL) NOPASSWD: ALL
sudo命令
sudo –b
将在后台运行该命令。这对于在运行时显示大量输出的命令很有用。
sudo –s
将以提升的权限运行指定的 shell,给你 # 提示符(不要忘记退出!)。
sudo su –
将使您成为 root 用户并加载您的自定义用户环境变量。
参考文献
https://askubuntu.com/questions/504652/adding-nopasswd-in-etc-sudoers-doesnt-work