美文网首页
sudo与visudo的超细用法说明

sudo与visudo的超细用法说明

作者: 哆啦A梦_ca52 | 来源:发表于2021-02-05 21:39 被阅读0次
    [2016-07-26 22:08:21](javascript:;)
    
    # 1 sudo与visudo
    
    ## 1.1 基本说明
    
    使用su命令切换用户身份虽然简单,但是,也有一些致命的缺点:
    
    (1)     普通用户必须知道root密码才可以切换到root,这样root密码就泄漏了。
    
    (2)     使用su命令切换身份,无法对切换后的身份做精细的控制,拿到超级权限的人可以为所欲为。甚至可以改掉root密码,让真正的管理员无法再拥有root权限。
    
    通过sudo命令,我们可以把某些超级用户权限,分类有针对性授权给指定的普通用户,并且普通用户不需要知道root密码就可以使用得到的授权来管理。因此,sudo命令使得集权式管理在理论上得到了保证,使系统的安全性方面加强了很多。
    
    ### 1.1.1 区别
    
    sudo:可以让普通用户拥有root权限去执行命令,sudo的配置文件是/etc/sudoers。
    
    visudo:通过visudo编辑/etc/sudoers,可以检查语法。
    
    ### 1.1.2 参数说明
    
    *   ### **sudo**
    
    -l:查看授权情况,列出用户在主机上可用的和被禁止的命令※
    
    -k:删除时间戳,**时间戳默认5分钟**也会失效
    
    -u:指定某个用户身份去执行特定的命令操作
    
    *   **visudo:edit the sudoers file**
    
    -c:检查语法※
    
    ### 1.1.3 sudo提权配置说明
    
    | 用户或组 | 机器= (授权角色) | 可以执行的命令 |
    | user | MACHINE= | COMMANDS |
    | oldboy | ALL=(ALL) | /usr/sbin/useradd,/usr/sbin/userdel |
    | %用户组 | 
     | 
     |
    
    ### 1.1.4 配置oldboy用户拥有所有权限
    
    [root@s1 ~]# visudo                  #<==通过visudo编辑/etc/sudoers
    
    oldboy  ALL=(ALL)       NOPASSWD: ALL #<==先切换到98行,再添加
    
    [root@s1 ~]# su - oldboy           #<==切换到oldboy用户
    
    [oldboy@s1 ~]$ sudo su -           #<==可以直接切换到root,不需要密码
    
    [root@s1 ~]#
    
    ## 1.2 快速操作命令增加sudo授权※
    
    \cp /etc/sudoers{,.ori}
    
    echo "oldboy ALL=(ALL)       NOPASSWD:ALL">>/etc/sudoers
    
    tail -1 /etc/sudoers
    
    visudo -c
    
    #<==用echo追加时,最好要检查语法
    
    ## 1.3 sudo配置文件详解
    
    oldboy ALL=(ALL)       NOPASSWD: ALL
    
    用户   主机 身份             命令
    
    ### 1.3.1 主机别名(Host Aliases)
    
    一般不改,只用ALL。
    
    13 # Host_Alias    FILESERVERS = fs1, fs2     #<==注意有空格
    
    14 # Host_Alias    MAILSERVERS = smtp,smtp2
    
    ### 1.3.2 用户别名(User Aliases)
    
    用户别名包含了**用户**和**用户组**。
    
    20 # User_Alias ADMINS = jsmith, mikem, %groupname #<==用户组前面加百分号
    
    ### 1.3.3 身份别名(Runas_Alias)
    
    即sudo允许切换到的用户身份,一般不改
    
    Runas_Alias   OP = root
    
    ### 1.3.4 命令别名(Command Aliases)
    
    32 ## Services
    
    33 # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
    
    ## 1.4 sudo配置文件实践
    
    ### 1.4.1 工作需求
    
    | 职位 | 用户别名 | 身份别名 | 命令别名 |
    | 开发人员 | KF_ADMINS | OP1 | KF_CMD |
    | 运维人员 | YW_ADMINS | OP1 | 
    
    USER_CMD,DISK_CMD,NETMAG_CMD,CTRL_CMD
    
     |
    | 网络工程师 | WL_ADMINS | OP2 | NETMAG_CMD |
    
    ### 1.4.2 操作过程
    
    visudo    #<==直接切换到最后一行,添加如下的内容,实际上修改的文件是:/etc/sudoers
    
    ##Edit by chendianhu at 2016-07-26##
    
    # User Aliases
    
    User_Alias KF_ADMINS =kaifa01, kaifa02
    
    User_Alias YW_ADMINS =oldboy, oldgirl, %sa
    
    User_Alias WL_ADMINS =leo, maya
    
    # Command Aliases
    
    Cmnd_Alias KF_CMD =/bin/grep, /usr/bin/tail, /bin/cat
    
    Cmnd_Alias USER_CMD =/usr/sbin/useradd, /usr/sbin/userdel, \
    
    /usr/bin/passwd[A-Za-z]*, /bin/chown, /bin/chmod
    
    Cmnd_Alias DISK_CMD=/sbin/fdisk, /sbin/parted
    
    Cmnd_Alias NETMAG_CMD =/sbin/ifconfig, /etc/init.d/network
    
    Cmnd_Alias CTRL_CMD =/sbin/reboot, /sbin/halt
    
    #Runas Alias
    
    Runas_Alias    OP1 =root, oldboy
    
    Runas_Alias    OP2 = root, oldgirl
    
    #Authorization
    
    #root    ALL=(ALL)       ALL
    
    #user    host runas      cmd
    
    KF_ADMINS  ALL=(OP1) KF_CMD
    
    YW_ADMINS  ALL=(OP1) USER_CMD, DISK_CMD, NETMAG_CMD, CTRL_CMD
    
    WL_ADMINS  ALL=(OP2)  NETMAG_CMD
    
    #<==注意写法ALL=(OP2),因为写错了,需要排查很久的!
    
    ### 1.4.3 验证过程
    
    #### 1.4.3.1 添加用户
    
    useradd kaifa01
    
    useradd kaifa02
    
    useradd oldgirl
    
    useradd leo
    
    useradd maya
    
    #### 1.4.3.2 验证添加用户
    
    id kaifa01
    
    id kaifa02
    
    id oldgirl
    
    id leo
    
    id maya
    
    #### 1.4.3.3 配置密码
    
    echo "123456"|passwd --stdin kaifa01
    
    echo "123456"|passwd --stdin kaifa02
    
    echo "123456"|passwd --stdin oldgirl
    
    echo "123456"|passwd --stdin leo
    
    echo "123456"|passwd --stdin maya
    
    #### 1.4.3.4 以oldgirl用户为例
    
    [root@s1 ~]# su - oldgirl  #<==切换用户oldgirl
    
    [oldgirl@s1 ~]$ whoami
    
    oldgirl
    
    [oldgirl@s1 ~]$ sudo -l   #<==查看该用户授权情况
    
    [sudo] password for oldgirl:
    
    省略……
    
    用户 oldgirl 可以在该主机上运行以下命令:
    
        **(root, oldboy) /usr/sbin/useradd,/usr/sbin/userdel, /usr/bin/passwd [A-Za-z]*, /bin/chown, /bin/chmod, (root,****oldboy)/sbin/fdisk, /sbin/parted, (root, oldboy) /sbin/ifconfig, /etc/init.d/network,(root, oldboy) /sbin/reboot,**
    
       /sbin/halt
    
    [oldgirl@s1 ~]$ rm -f /etc/hosts  #<==删除命令**肯定**不允许
    
    rm: 无法删除"/etc/hosts":权限不够
    
    [oldgirl@s1 ~]$ useradd li       #<==添加用户,不允许
    
    -bash: /usr/sbin/useradd: 权限不够
    
    [oldgirl@s1 ~]$ sudo useradd li   #<==添加用户,允许,因为前面加了sudo关键字
    
    [oldgirl@s1 ~]$ id li
    
    uid=506(li) gid=506(li) 组=506(li)
    
    [oldgirl@s1 ~]$ tail -1 /etc/passwd
    
    li:x:506:506::/home/li:/bin/bash
    
    [oldgirl@s1 ~]$ userdel li      #<==删除用户,不允许
    
    -bash: /usr/sbin/userdel: 权限不够
    
    [oldgirl@s1 ~]$ sudo userdel li -r  #<==删除用户,允许,因为前面加了sudo关键字
    
    [oldgirl@s1 ~]$ id li
    
    id: li:无此用户
    
    ## 1.5 注意事项
    
    (1)     授权规则中的ALL字符串必须为大写字母
    
    (2)     \:代表换行(反斜线)
    
    (3)     !:代表非(感叹号)
    
    (4)     远程sudo 加-t参数 
    
    ## 1.6 sudo审计
    
    **sudo****配合rsyslog****服务,进行日志审计。**
    
    ### 1.6.1 检查软件是否已安装
    
    [oldgirl@s1 ~]$ **rpm -qa sudo rsyslog**
    
    rsyslog-5.8.10-10.el6_6.x86_64
    
    sudo-1.8.6p3-19.el6.x86_64
    
    ### 1.6.2 配置/etc/sudoers
    
    [root@s1 ~]# echo "Defaults   logfile=/var/log/sudo.log">>/etc/sudoers
    
    #<==只需要往配置文件里加一条记录,**超级简单**!
    
    [root@s1 ~]# tail -1 /etc/sudoers    #<==验证
    
    Defaults   logfile=/var/log/sudo.log
    
    [root@s1 ~]# visudo -c             #<==检查语法
    
    /etc/sudoers:解析正确
    
    ### 1.6.3 验证
    
    [root@s1 ~]#**su - oldgirl**          #<==切换到oldgirl用户
    
    [oldgirl@s1 ~]$ **sudo -l           **#<==列出能执行的命令
    
    省略……
    
    用户 oldgirl 可以在该主机上运行以下命令:
    
        (root,oldboy) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [A-Za-z]*,/bin/chown, /bin/chmod, (root,oldboy)/sbin/fdisk, /sbin/parted, (root, oldboy) /sbin/ifconfig, /etc/init.d/network,(root, oldboy) /sbin/reboot, /sbin/halt
    
    [oldgirl@s1 ~]$ **sudo useradd wang   **#<==sudo来执行添加用户命令
    
    [oldgirl@s1 ~]$ **su -   **       #<==切换回root
    
    密码:
    
    [root@s1 ~]# cat /var/log/sudo.log    #<==查看sudo审计日志
    
    Jul 26 20:31:46 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
    
        COMMAND=**list             **#<==oldgirl用户的sudo操作行为,被记录下来了
    
    Jul 26 20:32:02 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
    
        COMMAND=**/usr/sbin/useradd wang  **#<==oldgirl的操作行为,会全部被记录下来
    
    [oldgirl@s1 root]$** sudo rm -f /etc/hosts  **#<==rm命令不允许执行
    
    [sudo] password for oldgirl:
    
    对不起,用户 oldgirl 无权以 root 的身份在 s1 上执行 /bin/rm -f /etc/hosts。
    
    [root@s1 ~]# cat /var/log/sudo.log       #<==查看sudo审计日志
    
    Jul 26 20:31:46 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
    
       COMMAND=list
    
    Jul 26 20:32:02 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
    
       COMMAND=/usr/sbin/useradd wang
    
    Jul 26 20:37:40 :** oldgirl** : 命令禁止使用 ; TTY=pts/0 ; PWD=/root ;
    
       USER=root ; COMMAND=**/bin/rm -f /etc/hosts** #<==操作失败的命令,也会被记下来
    

    相关文章

      网友评论

          本文标题:sudo与visudo的超细用法说明

          本文链接:https://www.haomeiwen.com/subject/gfngtltx.html