1、sudo工具由文件/etc/sudoers进行设置,该文件包含所有能访问sudo工具的用户列表并定义了他们的特权。一个典型的/etc/sudoers条目如下: zte ALL=(ALL) ALL 这个条目使得用户zte作为终极用户访问所有应用程式,如用户zte需要作为终极用户运行命令,他只需简单地在命令前加上前缀sudo。因此,要以root用户的身份执行命令ifconfig,zte能输入如下命令: zte@SMPS-WEB1:/home># sudo /usr/sbin/ifconfig 注意: 执行的ifconfig命令要写绝对路径/usr/sbin/ifconfig,/usr/sbin默认不在普通用户的搜索路径中,或加入此路 径:PATH=$PATH:/usr/sbin;export PATH。另外,不同系统命令的路径不尽相同。能使用命令“whereis 命令名”来查找其路径。ex : zte@SMPS-WEB1:/home> whereis usermod usermod: /usr/sbin/usermod /usr/share/man/man8/usermod.8.gz ,这里搜索到2个路径,取第一个. 表示在zte用户登录下查看usermod命令的具体路径 这时会显示下面的输出结果: We trust you have received the usual lecture from the local System Administrator. It usually boils down to these two things: #1) Respect the privacy of others. #2) Think before you type. Password: 如果zte正确地输入了他的口令,命令ifconfig将会以root用户身份执行。 注意:设置文件/etc/sudoers必须使用命令Visudo来编辑。 只要把相应的用户名、主机名和许可的命令列表以标准的格式加入到文件/etc/sudoers,并保存就能生效,再看一个例子。 2、例子: [1]管理员需要允许gem用户在主机sun上执行reboot和shutdown命令,在/etc/sudoers中加入: gem sun=/usr/sbin/reboot,/usr/sbin/shutdown 注意:命令一定要使用绝对路径,以避免其他目录的同名命令被执行,从而造成安全隐患。 然后保存退出,gem用户想执行reboot命令时,只要在提示符下运行下列命令: $ sudo /usr/sbin/reboot 输入正确的密码,就能重启服务器了。 [2]beinan ALL=(root) /bin/chown, /bin/chmod 表示的是beinan 能在所有可能出现的主机名的主机中,能转换到root下执行 /bin/chown ,能转换到所有用户招执行/bin/chmod 命令,通过sudo -l 来查看beinan 在这台主机上允许和禁止运行的命令; [3]beinan ALL=(root) NOPASSWD: /bin/chown,/bin/chmod 表示的是beinan 能在所有可能出现的主机名的主机中,能转换到root下执行 /bin/chown ,不必输入beinan用户的密码;并且能转换到所有用户下执行/bin/chmod 命令,但执行chmod时需要beinan输入自己的密码;通过sudo -l 来查看beinan 在这台主机上允许和禁止运行的命令; 关于一个命令动作是不是需要密码,我们能发目前系统在默认的情况下是需要用户密码的,除非特加指出不必用户需要输入自己密码,所以要在执行动作之前加入NOPASSWD: 参数; [4]取消程式某类程式的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法; beinan ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk 注:把这行规则加入到/etc/sudoers中;但你得有beinan这个用户组,并且beinan也是这个组中的才行;本规则表示beinan用户在 所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程式,但fdisk 程式除外; [beinan@localhost ~]$ sudo -l Password: 注:在这里输入beinan用户的密码; User beinan may run the following commands on this host: (root) /usr/sbin/* (root) /sbin/* (root) !/sbin/fdisk [beinan@localhost ~]$ sudo /sbin/fdisk -l Sorry, user beinan is not allowed to execute ’/sbin/fdisk -l’ as root on localhost. 注:不能转换到root用户下运行fdisk 程式; [5]如果你想对一组用户进行定义,能在组名前加上%,对其进行设置,如: %cuug ALL=(ALL) ALL 那么属于cuug这个组的所有成员都能sudo来执行特定的任务 3、另外,还能利用别名来简化设置文件。别名类似组的概念,有用户别名、主机别名和命令别名。多个用户能首先用一个别名来定义,然后在规定他们能执行什么 命令的时候使用别名就能了,这个设置对所有用户都生效。主机别名和命令别名也是如此。注意使用前先要在/etc/sudoers中定义: User_Alias, Host_Alias, Cmnd_Alias项,在其后面加入相应的名称,也以逗号分隔开就能了,举例如下: Host_Alias SERVER=no1 User_Alias ADMINS=liming,gem Cmnd_Alias SHUTDOWN=/usr/sbin/halt,/usr/sbin/shutdown,/usr/sbin/reboot ADMINS SERVER=SHUTDOWN 4、sudo命令还能加上一些参数,完成一些辅助的功能,如: $ sudo -l 会显示出类似这样的信息: User liming may run the following commands on this host: (root) /usr/sbin/reboot 说明root允许用户liming执行/usr/sbin/reboot命令。这个参数能使用户查看自己目前能在sudo中执行哪些命令。 5、在命令提示符下键入sudo命令会列出所有参数,其他一些参数如下: -V 显示版本编号。 -h 显示sudo命令的使用参数。 -v 因为sudo在第一次执行时或是在N分钟内没有执行(N预设为5)会询问密码。这个参数是重新做一次确认,如果超过N分钟,也会问密码。 -k 将会强迫使用者在下一次执行sudo时询问密码(不论有没有超过N分钟)。 -b 将要执行的命令放在背景执行。 -p prompt 能更改问密码的提示语,其中%u会替换为使用者的账号名称,%h会显示主机名称。 -u username/#uid 不加此参数,代表要以root的身份执行命令,而加了此参数,能以username的身份执行命令(#uid为该username的UID)。 -s 执行环境变量中的SHELL所指定的Shell,或是/etc/passwd里所指定的Shell。 -H 将环境变量中的HOME(宿主目录)指定为要变更身份的使用者的宿主目录。(如不加-u参数就是系统管理者root。) 要以系统管理者身份(或以-u更改为其他人)执行的命令。