当我们需要使用系统管理员权限操作系统时,可以使用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