7、退出值
当程序成功执行时,sudo的退出状态将只是被执行的程序的退出状态。否则,如果存在配置/权限问题或sudo无法执行给定的命令,sudo将以1退出。在后一种情况下,错误字符串将打印到标准错误。如果sudo无法在用户路径中调用stat函数统计一个或多个条目,则在stderr上打印错误。(如果该目录不存在,或者它实际上不是一个目录,则忽略该条目,并且不打印错误。)在正常情况下不应该发生这种情况。stat(2)返回“拒绝权限”的最常见原因是,如果您正在运行一个自动侦听器,并且您的路径中的一个目录位于当前无法访问的计算机上。
8、安全说明
当执行外部命令时,sudo试图保持安全。为了防止命令欺骗,sudo在用户路径中搜索命令时,最后检查“.”和““。但是请注意,实际的path环境变量没有被修改,而是不改变地传递给sudo执行的程序。
请注意,sudo通常只记录它显式运行的命令。如果用户运行“sudo su“或”sudo sh“之类的命令,则从该shell运行的后续命令不受sudo的安全策略的约束,提供shell转义的命令也是如此。如果启用了I/O日志记录,随后的命令将有它们的输入和输出记录,但这些命令不会有传统的日志。因此,当用户通过sudo访问命令时,必须小心,以验证该命令不会无意中给用户一个有效的root shell。
为了防止泄露潜在的敏感信息,sudo在执行时默认禁用核心转储。为了帮助调试sudo崩溃,您可能希望通过在“/etc/sudo.conf“文件中将“disable_coredump”设置为false来重新启用核心转储,如下所示
Set disable_coredump false
请注意,默认情况下,大多数操作系统从setuid程序(包括sudo)禁用核心转储。要实际获得sudo核心文件,您可能需要为setuid进程启用核心转储。在BSD和Linux系统上,这是通过“sysctl“命令完成的,在Solaris上可以使用”coreadm“命令。
9、环境变量
sudo使用一下环境变量,安全策略控制命令环境的实际内容。
EDITOR
如果没有设置SUDO_EDITOR或VISUAL,则默认编辑器使用”-e”模式。
MAIL
在“-i“模式中或在sudoers中启用env_reset时,将其设置为目标用户的邮件线轴。
HOME
如果指定了“-i“或”-H“,在sudoers中赋值给目标用户的home目录,或者赋值给env_reset或all_set_home。或者当指定”-s“选项时,sudoers中赋值给set_home。
PATH
可能被安全策略覆盖
SEHLL
使用“-s“选项,执行运行的shell
SUDO_ASKPASS
如果没有可用的终端,或者指定了“-A“选项,则指定用于读取密码的辅助程序的路径。
SUDO_COMMAND
赋值给sudo运行的命令
SUDO_EDITOR
“-e“模式下的默认编辑器
SUDO_GID
赋值给调用sudo的用户的组ID
SUDO_PROMPT
作为默认的密码提示语句
SUDO_PS1
如果设置,PS1将被设置为正在运行的程序的值。
SUDO_UID
赋值给调用sudo的用户的ID
SUDO_USER
赋值给调用sudo的用户登录名
USER
赋值给目标用户(默认是root,除非指定“-u“选项)
VISUAL
如果在“-e“模式下没有指定”SUDO_EDITOR“,那么这个就是默认编辑器
10、实例
1)查看当前用户支持的指令
[weijie@192 /]$ sudo –l //当前用户没有权利执行任何sudo指令
[sudo] password for weijie:
对不起,用户 weijie 不能在 192 上运行 sudo。
You have new mail in /var/spool/mail/root
[root@192 /]# sudo –l //当前用户是root,因此可以执行所有的sudo指令
匹配此主机上 root 的默认条目:
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
用户 root 可以在该主机上运行以下命令:
(ALL) ALL
2)以指定的用户身份来执行命令,不可以指定root
[root@192 /]# sudo -u weijie ls /home/david/ //以用户weijie的身份来查看用户david的家目录,很明显是没有权利的
ls: 无法打开目录/home/david/: 权限不够
[root@192 /]# sudo -u weijie ls /home/weijie/ //以用户weijie的身份来查看用户weijie的家目录,这个当然可以
1.zip mail
[root@192 /]# sudo ls /home/david/ //直接查看用户david家目录,由于当前在root环境下,因此完全可以
mail
3)其他例子代码
$ sudo -u yaz ls ~yaz //查看用户yaz的家目录
$ sudo -u www vi ~www/htdocs/index.html //以用户www的身份编辑文件
$ sudo -g adm view /var/log/syslog //以组adm的身份去查看日志文件,
$ sudo -u jim -g audio vi ~jim/sound.txt //要使用不同的主组以Jim的身份运行编辑器
$ sudo shutdown -r +15 "quick reboot" //关机
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE" //若要对/home分区中的目录进行使用列表,请注意,这将在子shell中运行命令,以使cd和文件重定向工作。
当程序成功执行时,sudo的退出状态将只是被执行的程序的退出状态。否则,如果存在配置/权限问题或sudo无法执行给定的命令,sudo将以1退出。在后一种情况下,错误字符串将打印到标准错误。如果sudo无法在用户路径中调用stat函数统计一个或多个条目,则在stderr上打印错误。(如果该目录不存在,或者它实际上不是一个目录,则忽略该条目,并且不打印错误。)在正常情况下不应该发生这种情况。stat(2)返回“拒绝权限”的最常见原因是,如果您正在运行一个自动侦听器,并且您的路径中的一个目录位于当前无法访问的计算机上。
8、安全说明
当执行外部命令时,sudo试图保持安全。为了防止命令欺骗,sudo在用户路径中搜索命令时,最后检查“.”和““。但是请注意,实际的path环境变量没有被修改,而是不改变地传递给sudo执行的程序。
请注意,sudo通常只记录它显式运行的命令。如果用户运行“sudo su“或”sudo sh“之类的命令,则从该shell运行的后续命令不受sudo的安全策略的约束,提供shell转义的命令也是如此。如果启用了I/O日志记录,随后的命令将有它们的输入和输出记录,但这些命令不会有传统的日志。因此,当用户通过sudo访问命令时,必须小心,以验证该命令不会无意中给用户一个有效的root shell。
为了防止泄露潜在的敏感信息,sudo在执行时默认禁用核心转储。为了帮助调试sudo崩溃,您可能希望通过在“/etc/sudo.conf“文件中将“disable_coredump”设置为false来重新启用核心转储,如下所示
Set disable_coredump false
请注意,默认情况下,大多数操作系统从setuid程序(包括sudo)禁用核心转储。要实际获得sudo核心文件,您可能需要为setuid进程启用核心转储。在BSD和Linux系统上,这是通过“sysctl“命令完成的,在Solaris上可以使用”coreadm“命令。
9、环境变量
sudo使用一下环境变量,安全策略控制命令环境的实际内容。
EDITOR
如果没有设置SUDO_EDITOR或VISUAL,则默认编辑器使用”-e”模式。
在“-i“模式中或在sudoers中启用env_reset时,将其设置为目标用户的邮件线轴。
HOME
如果指定了“-i“或”-H“,在sudoers中赋值给目标用户的home目录,或者赋值给env_reset或all_set_home。或者当指定”-s“选项时,sudoers中赋值给set_home。
PATH
可能被安全策略覆盖
SEHLL
使用“-s“选项,执行运行的shell
SUDO_ASKPASS
如果没有可用的终端,或者指定了“-A“选项,则指定用于读取密码的辅助程序的路径。
SUDO_COMMAND
赋值给sudo运行的命令
SUDO_EDITOR
“-e“模式下的默认编辑器
SUDO_GID
赋值给调用sudo的用户的组ID
SUDO_PROMPT
作为默认的密码提示语句
SUDO_PS1
如果设置,PS1将被设置为正在运行的程序的值。
SUDO_UID
赋值给调用sudo的用户的ID
SUDO_USER
赋值给调用sudo的用户登录名
USER
赋值给目标用户(默认是root,除非指定“-u“选项)
VISUAL
如果在“-e“模式下没有指定”SUDO_EDITOR“,那么这个就是默认编辑器
10、实例
1)查看当前用户支持的指令
[weijie@192 /]$ sudo –l //当前用户没有权利执行任何sudo指令
[sudo] password for weijie:
对不起,用户 weijie 不能在 192 上运行 sudo。
You have new mail in /var/spool/mail/root
[root@192 /]# sudo –l //当前用户是root,因此可以执行所有的sudo指令
匹配此主机上 root 的默认条目:
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
用户 root 可以在该主机上运行以下命令:
(ALL) ALL
2)以指定的用户身份来执行命令,不可以指定root
[root@192 /]# sudo -u weijie ls /home/david/ //以用户weijie的身份来查看用户david的家目录,很明显是没有权利的
ls: 无法打开目录/home/david/: 权限不够
[root@192 /]# sudo -u weijie ls /home/weijie/ //以用户weijie的身份来查看用户weijie的家目录,这个当然可以
1.zip mail
[root@192 /]# sudo ls /home/david/ //直接查看用户david家目录,由于当前在root环境下,因此完全可以
3)其他例子代码
$ sudo -u yaz ls ~yaz //查看用户yaz的家目录
$ sudo -u www vi ~www/htdocs/index.html //以用户www的身份编辑文件
$ sudo -g adm view /var/log/syslog //以组adm的身份去查看日志文件,
$ sudo -u jim -g audio vi ~jim/sound.txt //要使用不同的主组以Jim的身份运行编辑器
$ sudo shutdown -r +15 "quick reboot" //关机
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE" //若要对/home分区中的目录进行使用列表,请注意,这将在子shell中运行命令,以使cd和文件重定向工作。