sudo的使用:

   通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;

  sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;

配置文件/etc/sudoers:

# ll -h /etc/{sudo.conf,sudoers}
-rw-r-----. 1 root root 1.8K Sep 25  2012 /etc/sudo.conf
-r--r-----. 1 root root 4.0K Mar  2  2012 /etc/sudoers
    权限中含有点表示含有隐藏属性。
# lsattr /etc/{sudo.conf,sudoers}
-------------e- /etc/sudo.conf
-------------e- /etc/sudoers


   由于sudoers含有隐藏属性,所以即使管理员root也无法更改其中的内容。

   所以sudoers有专门的修改工具visudo.

sudoers文件格式:

   user    where=(who)    command

   意义:允许哪个用户在哪个网络或主机以另一个谁的身份,去执行什么命令。


工作中为了方便,而采取了一下格式:

(1)    %user    where=(who)    command

      %user表示某一组的成员。


(2)    User_Alias    USER_NAME  =  hadoop, apache,  nginx    

      Host_Alias    HOST_NAME  =  ftp1,  192.168.1.100,  172.168.1.0/16

      Runas_Alias   以谁的身份执行,一般都是root  

      Cmnd_Alias    COMMAND  =  /usr/sbin/useradd,   /usr/sbin/userdel,  /usr/bin/passwd

        上面的内容表示使用 别名对同类对象进行分组,而组名必须都使用大写。


限制某些命令的使用:

   当开放/usr/bin/passwd命令时,那么任意用户都可以随意更改root用户的密码。

   所以在使用时可以在命令前加上"!"取反,同时可以在命令后面跟上正则表达式。

apache    192.168.1.0/24    /usr/bin/passwd [a-zA-Z0-9]*,  !/usr/bin/passwd  root


标签的使用:

   在用户第一次使用命令时,都会要求用户个人密码,但是可以加入标签使得不用输入密码,

   或者必须输入密码。

   例如:

   yh    ALL=    /usr/sbin/useradd, NOPASSWD: /usr/sbin/userdel

       这样在使用useradd文件时会使用密码,而userdel不会使用密码。

注意:标签NOPASSWD等不能写在Comn_Alias中,否则报错!


记录sudo使用者行为的日志文件:

# ll -h /var/log/secure
-rw-------. 1 root root 1.2K Mar 12 20:23 /var/log/secure


语法

sudo [-bhHpV][-s ][-u <用户>][指令]

sudo [-klv]


参数

  -b  在后台执行指令。

  -h  显示帮助。

  -H  将HOME环境变量设为新身份的HOME环境变量。

  -k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。

  -l  列出目前用户可执行与无法执行的指令。

  -p  改变询问密码的提示符号。

  -s  执行指定的shell。

  -u <用户>  以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。

  -v  延长密码有效期限5分钟。

  -V  显示版本信息。

   -S   从标准输入流替代终端来获取密码