sudo

    su: switch user, 切换用户; 

        完全切换: su -l username, su - username

        非完全切换: su username

        su - user -c 'COMMAND'

    sudo:

        以另外一个用户的身份执行指定的命令; 通常情况下, 此处的另外一个用户指的是root用户;

        授权机制: sudo的授权配置文件, /etc/sudoers; 只有超级用户才可以修改它. 一般使用visudo来编辑此文件, 原因: 

            1.能防止两个用户同时修改它;

            2.能进行有限的语法检查;

        对于此配置文件, 共分为两类内容:

            1.别名的定义: 定义内建变量;

            2.用户规格: 其实就是授权项, 其中可以调用定义过的别名;

        用户规格(授权项):

            每行只能有一个授权项;

            其格式为: 

                who where=(whom) what
                user client=(runas) commands

        注意: 通过编辑/etc/sudoers文件完成的授权, 只能通过sudo命令来启动;

        sudo命令:

            sudo [option]... command

                -u user: 以指定的用户身份运行命令;

                -l[l] [command]: 列表显示当前用户能以sudo方式运行的所有命令;

                -k: 清楚缓冲密码;

        /etc/sudoers文件的编写格式:

            who: 此次sudo配置的授权目标用户;

                username: 当个用户的用户账号名称;

                #uid: (必须加#号如: #1004)单个用户的UID;

                %groupname: 指定组内的所有用户账户;

                %#gid: 以"gid"为GID的组内的所有用户账户;

                user_alias: 事先定义过的用户账户的别名;

            where: 定义被授权访问的客户端主机;

                ip/hostname: 单个主机;

                Network Address: 网络地址;

                host_alias: 事先定义过的主机的别名;

            whom: 授权用户后续命令的运行者的真实身份; 通常是root;

            what: 此次授权能够运行的命令;

                command: 单个命令;

                directory: 指定目录下所有的命令;

                sudoedit: 特殊命令, 用于授权其他用户可以执行sudo命令, 并且可以编辑/etc/sudoers文件;

                cmnd_alias: 事先定义过的命令的别名;

        示例: 

zhangsan ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, !/usr/bin/passwd root

        定义别名的方法:

            Alias_Type ALIASNAME = item1, item2, ...

            Alias_Type:

                User_Alias:

                Host_Alias: 

                Runas_Alias:            

                Cmnd_Alias:

            ALIASNAME: 别名的名称必须全部使用大写字母;

User_Alias USERADMINUSERS = tom, jerry, centos, suse, %myclas
Cmnd_Alias USERADMINCOMMANDS = /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/passwd [a-zA-Z0-9]*, !/usr/bin/passwd root, /usr/sbin/usermod
USERADMINUSERS ALL=(root) USERADMINCOMMANDS

            常用的标签:

                PASSWD

                NOPASSWD

Cmn_Alias USERADMINCOMANDS = NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, !/usr/bin/passwd root, /usr/sbin/usermod

    特别强调:

        诸如passwd, su, sudo, sudoedit等之类的特殊的命令, 在使用sudo授权时务必要考虑全面, 否则可能为系统引入安全隐患; 需要格外注意!!!