Linux基础命令---sudo

381 阅读5分钟
原文链接: click.aliyun.com
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和文件重定向工作。