用户授权
    生产环境中,root用户密码只有极少数人知道,普通员工只能使用普通用户登录,
    如果普通用户需要执行特殊操作,有两种方法。
    (1)su -root ,切换到root执行特殊操作,然后再返回到普通用户
    (2)sudo 
    su
    优点:
    使用简单
    缺点:
    1、root密码容易泄露
    2、普通用户可执行的操作不可控
    sudo命令
    作用:给普通用户授权,让普通用户可以执行特定操作的权限
    缺点:需要进行配置授权
    优点:
    1、不需要切换到root用户(不需要知道root的密码)
    2、用户可执行的命令都是预先设置好的(可执行的权限是可控的)
    3、可以记录每个用户所执行过的命令
    sudo的使用
    第一步:通过sudo的配置文件为普通用户授权
    第二部:普通用户使用sudo来执行特定的操作
    sudo的配置文件
    /etc/sudoers  
    格式:
    用户名   主机=(切换的用户)  可执行的命令
    说明
    用户名:普通用户的名称
    主机:可以在哪个主机上执行特定的命令
    ALL 表示任意主机
    localhost 表示当前主机
    hostName 表示具体的主机名
    ***.***.***.*** 表示一个ip地址(192.168.6.123)
    ***.***.***.***/netmask 表示一个网段(192.168.6.0/24)
    切换的用户:切换到指定的用户来执行后面的命令,通常的都是root用户
    表示的方式
        1、(all)
        2、(root)
        3、 空
    可执行的命令:用户可以执行命令
        格式:命令1,命令2……
        补充:可以用通配符的方式
        例子:给test赋权,让这个用户可以在任意主机切换到root用户执行useradd
    test    ALL=(ALL)       /usr/sbin/useradd
    注意:修改sudo的配置文件,通常不用vi,而是用visodu命令
    使用visodu来修改配置文件,如果你修改的配置文件有错误,那么系统会提示有错,并且阻止保存。
    例子:让普通用户laowantong可以在任意主机上执行useradd和userdel命令
    1、创建用户laowantong
    useradd laowantong
    passwd laowantong
    2、修改sudo配置文件
    visudo
    laowantong ALL=(root)  /usr/sbin/useradd,/usr/sbin/userdel
    3、用普通用户laowantong登录系统,然后执行新建用户和删除用户的操作
    sudo useradd zhoubotong
    sudo userdel zhoubotong
    思考:为什么用sudo的时候,会提示输入密码
    为什么第二次不需要输入密码   
    普通用户在执行sudo的时候,会在/var/db/sudo/lectured/下生成该用户的一个秘钥,
    这个用户的秘钥有效期是5分钟,这样在5分钟之内再次执行sudo的时
    候,是不需要输入密码的。
    扩展授权格式
    test ALL=(root) /usr/sbin/useradd
    test ALl=(root)  ALL
    %gp01 ALL=(root)  /usr/sbin/useradd
    test  ALL=(root) /usr/sbin/*
    %gp01 ALL=(root)/usr/sbin/useradd,/usr/sbin/userdel
    %gp01 ALL=(root)NOPSAAWD:/usr/sbin/useradd,/usr/sbin/userdel  不用输入密码
    %gp01 ALL=(root)NOPASSWD:/usr/sbin/useradd,NOPASSWD:/usr/sbin/userdel 不用输入密码
    test ALL(root) NOPASSWD:ALL  不用输入密码
    %gp01  ALL(root)  /usr/sbin/*,!/usr/sbin/useradd   除了/usr/sbin/useradd 不能执行
    注意:如果直接是一个字符串,那么这几一个用户名
    如果在字符串前面有个%,那么这是一个用户组
    用户使用sudo的基本流程
    1、sudo
    -------->>>>>var/db/sudo/检查时间戳是否过期
    -------->>>>>如果过期,要求重新输入密码
    -------->>>>>记录时间戳到/var/db/sudo --检查/etc/sudoers 是否有授权
    -------->>>>>如果有执行命令
    -------->>>>>如果尚未过期--->>>>>检查/etc/sudoers 是否有授权
    -------->>>>>如果有执行命令
    -------->>>>>报错提示无权限,并退出sudo
    sudo配置文件的构成
    定义别名
    授权规则
    别名的类别
    Host_Alias:主机别名。别名字母必须都是大写,成员可以是主机、网段
    Host_Alias MYHOST = zhangsan,lisi
    Host_Alias MYHOST = ALL
    Host_Alias MYHOST =locahost,192.168.6.0/24,172,10.0.0/16
    User_Alias:用户别名。别名字母必须都是大写,成员都是系统中的用户,
    也可以是组
    User_Alias MYUSER =tom,jerry
    User_Alias MYUSER =tom,jerry,%gp01
    Cmnd_Alias:命令别名,成员都是系统中的命令,这里最好用命令的绝对路径。
    Cmnd_Alias MYCMD = usr/sbin/useradd,usr/sbin/userdel
    Cmnd_Alias MYCMD = usr/sbin/*,/usr/bin*
    Cmnd_Alias MYCMD = usr/sbin/*,/usr/bin* !/usr/sbin/useradd
    Runas_Alias:角色别名,成员通常都是root或者其他权限较高的用户,用的比较少
    注意:1、别名的名称中的字母必须都是大写
         2、别名中的可以有数字和下划线,但是必须以字母为开头
    主机别名举例
    Host_Alias H1 = localhost,zhangsan,lisi,192.168.6.123,172.20.0.0/16
    用户别名举例
    User_Alias DEV = zs,ls,ww,%admin
    命令别名举例
    Cmnd_Alias CMND1 = /usr/sbin/useradd, /usr/sbin/userdel,/bin/*,/sbin/[a-g]*
    Cmnd_Alias CMND1 = /usr/sbin/useradd, NOPASSWD:/usr/sbin/userdel,/bin/*,!/bin/find,/sbin/[a-g]* 
    特殊写法
    User_Alias DEV = zs,ls,ww,%admin: NET = dehua,degang
    sudo的授权规则
    格式:
    授权用户 主机=[(切换到的用户)] [NOPASSWD:]命令1,[(切换到的用户)] [NOPASSWD:]命令2,
    [(切换到的用户)] [NOPASSWD:]命令3……
    说明:
    1、[]中的内容都是可省略的
    2、命令和命令之间用逗号分隔
    3、如果省略[(切换到的用户)],表示切换到root用户执行后面的命令
    4、如果(切换到的用户)写出(ALL),表示切换到所有用户,从所有用户中
    找出可以执行后面的命令并执行命令
    5、如果[NOPASSWD:]省略,则表示在用户首次使用sudo时候输入密码,密码有效期为5分钟
    timi ALL= /bin/*    
    timi ALL= /usr/bin/passwd, !/usr/bin/passwd root
    timi ALL= /bin/vi, !/bin/vi /etc/*
    或者
    Cmnd_Alias CMD_TIMI = /bin*,  /usr/bin/passwd, !/usr/bin/passwd root,/bin/vi, !/bin/vi /etc/*
    timi ALl= CMD_TIMI
    sudo-l
    User timi may run the following commands on this host:
    (root) /usr/bin/passwd
    sudo命令的选项
    -l:查看当前用户的授权信息
    -k:让当前主机上的sudo秘钥立刻失效
    visudo命令选项
    -c:检查sudo的配置文件是否有语法错误
    治理公司root权限泛滥的情况
    第一步:分析员工的类别
    分析梳理公司需要使用服务器的员工的数量和类别
    开发1、开发2……开发主管
    运营1、运营2……运营主管
    初级运维1、初级运维2、初级运维3
    中级运维1、中级运维2、中级运维3
    高级运维1、高级运维2、高级运维3
    第二步:分析各类员工要执行的操作
    开发:上传和下载、创建目录、文件、删除文件、目录
    开发主管:上传和下载、创建目录、文件、删除文件、目录
    运营……
    运营主管……
    第三步:结合要执行的操作给出必须的命令
    将命令反馈给各个部门,让他们检查是否满足日常的操作需求
    第四步:sudo授权
    定义命令别名
    定义用户别名
    定义主机别名
    sudo授权
    第五步:测试授权是否可用