当我们需要使用系统管理员权限操作系统时,可以使用su命令来实现,这里有一个问题就是需要root的密码。若管理人员有多数,则root密码被泄露的几率变大。
从而有了sudo命令,执行流程:
用户执行sudo时,会判断配置文件/etc/sudoers,查看用户是否有执行sudo的权限;
若用户有执行sudo的权限,查看/var/db/sudo/zhangsan(密码的时间戳在这里),是否密码过期,过期则输入密码,若没有权限则报错
输入正确密码后则开始sudo后续的命令
执行sudo读取的配置文件是/etc/sudoers。
前九行在介绍文件:
sudo是让给予权限的用户可以执行个别的命令,也不需要root密码
这个文件最后使用visudo命令来编辑,保存时会检查语法是否正确。
再后三段是设置:
主机别名Host Aliases、用户别名User Aliases、命令别名Command Aliases
在后面就是默认的规范了
最后是最重要的配置语法介绍了:
示例
root ALL=(ALL) ALL root的配置默认是在所有机器上或ip都可以连接本机执行任何命令
root:用户名称,可以是用户,也可以是一个别名组包含多个用户
ALL:代表所有机器或ip,可以使用主机别名或ip别名设置
(ALL):可切换的用户,all表示可切换任何用户
ALL:可执行的命令,多个命令使用,分隔或者使用命令别名功能
另一种方法就是:
%wheel ALL=(ALL) ALL
wheel就是一个确实存在的组名,只要添加到此组的用户都有sudo权限。
zhangsan 和 lisi都是这个wheel组。就可以执行sudo命令。
注:
在做测试的时候,切换到zhangsan后,执行sudo -l 报错sudo:有效用户 ID 不是 0,sudo 属于 root 并设置了 setuid 位吗?
[root@www ~]# ls -l /usr/bin/sudo---x--x--x. 1 root root 123832 11月 22 2013 /usr/bin/sudo[root@www ~]# chmod u+s /usr/bin/sudo[root@www ~]# ls -l /usr/bin/sudo---s--x--x. 1 root root 123832 11月 22 2013 /usr/bin/sudo
然后就可以正常使用sudo了
[zhangsan@www ~]$ sudo -l匹配此主机上 zhangsan 的默认条目: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC 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, logfile=/var/log/sudo.log用户 zhangsan 可以在该主机上运行以下命令: (ALL) /bin/rm, (ALL) /bin/mv[zhangsan@www ~]$
sudo命令:
选项
-l 查看当前用户可执行和无法执行的命令
-u 切换到指定的用户执行命令,不指定默认使用root
-s 指定shell,不输入shell取环境变量中设定的shell