在Linux系统中, Sudo是最重要的命令之一,关系到整个系统的操作安全。
sudo命令是用来以其它的身份来执行命令,预设的身份是root。配置文件是/etc/sudoers,权限为440,下面来了解下其基本设置:
[[email protected] sbin]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zwj ALL=(ALL) NOPASSWD:ALL,! /usr/sbin/reboot,! /usr/sbin/poweroff,! /usr/bin/passwd [A-Za-z]*
其中,绿色背景是增加的设置,可以看到用户zwj无法关机和重启,也无法修改任何人的密码,NOPASSWD:表示无需输入密码即可执行。!:表示取反的意思,即不允许执行。
[[email protected] ~]$ sudo reboot
对不起,用户 zwj 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/reboot。
[[email protected] ~]$ sudo poweroff
对不起,用户 zwj 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/poweroff。
[[email protected] ~]$ sudo passwd zwj
对不起,用户 zwj 无权以 root 的身份在 localhost.localdomain 上执行 /bin/passwd zwj。
可以查看下用户所具有的sudo权限,更多参数请查看帮助sudo -h;
[[email protected] ~]$ sudo -l
匹配此主机上 zwj 的默认条目:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 zwj 可以在该主机上运行以下命令:
(ALL) NOPASSWD: ALL, (ALL) !/usr/sbin/reboot, (ALL) !/usr/sbin/poweroff, (ALL) !/usr/bin/passwd [A-Za-z]*
如果要为用户设置具体的权限,可以这样设置:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zwj ALL=(ALL) /sbin/useradd,/sbin/usermod
这样一来,操作的风险大为降低,当然也可以通过用户别名、命令别名来设置,较适合于权限划分很精细的公司。