• sudo


    sudo

     


     

    sudo的使用

    • sudo命令可以用来使用其他的用户身份执行指定的命令。如果未授权用户尝试使用 sudo,会提示联系管理员。
    • sudo还有日志功能,无论谁使用sudo命令操作什么命令,都会被记录在日志当中/var/log/secure
    • sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
    • sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”,关于时间戳文件在/var/db/sudo
    • 通过visudo命令编辑配置文件,具有语法检查功能visudo –c检查语法

    命令sudo [-u user] COMMAND
    参数

    • -V 显示版本信息等配置信息
    • -u user 默认为root
    • -l,ll 列出用户在主机上可用的和被禁止的命令
    • -v 再延长密码有效期限5分钟,更新时间戳
    • -k 清除时间戳(1970-01-01),下次需要重新输密码
    • -K 与-k类似,还要删除时间戳文件
    • -b 在后台执行指令
    • -p 改变询问密码的提示符号
      示例: -p ”password on %h for user %p:"

    上面就是命令的使用介绍和一些参数,并没有具体的示例,那是因为,我们真正的要使用这个命令,需要配合针对于该命令的配置,配置文件在/etc/sudoers, /etc/sudoers.d/中,其中第一个数主配置文件,第二个是次配置文件,但在实际上,我们最好是将我们的规则写在此配置文件目录中,这样便于管理还以免损坏主配置文件,接下来,我们先对主配置文件进行了解:
     
    我们在上面显示的东西,第一个 root ALL=(ALL) ALL , 其实是 user host=(runas) command ,其中user代表是运行命令者的身份,host是指通过哪些主机运行,runas是以哪个用户的身份运行,command运行哪些命令。
    第二个配置 %wheel ALL=(ALL) ALL 则是让哪些组中的成员以某些身份在哪些机器上运行哪些命令。

    然后我们做一些示例,当然,我们需要写配置文件的,我们把配置写到/etc/sudoers.d/下面去,保证主配置文件不变。我们使用创建文件test(文件名可自己取,没问题)

    tom ALL=(root)/usr/bin/cat /etc/shadow

     

    我们使用tom用户去使用root的身份在所有机器上查看shasow文件,在一般情况下,作为普通用户tom是没有权限查看该文件的,但是,我们给他一个临时执行的权限,他就能使用sudo命令查看到该文件。
     

    我们可以看到,他可以查看该文件,但是需要输入自己的密码,并且在5分钟之内使用该命令,不需要再次输入密码,关于此的时间戳文件在/var/db/sudo,一点五分钟的时间过了,我们需要重新输入密码。并且时间戳文件会自动更新。
     
    刚刚我们是使用vim写的那个配置文件,但是文件有没有什么问题呢?我们使用命令 visudo –c 来检查一下该文件是否有问题。

    [root@CT73 sudoers.d]$ visudo -c
    /etc/sudoers: parsed OK
    /etc/sudoers.d/test: bad permissions, should be mode 0440

    我们看到test语法是没有问题的,但是权限有点问题,它说权限应该是440,我们需要把它改改,我们可以使用手动修改,或者在写这个文件的时候使用visudo -f  test来写就没问题了。

    我们的配置文件还是支持通配符的,例如:

    • ? :任意单一字符
    • * :匹配任意长度字符
    • [wxc]:匹配其中一个字符
    • [!wxc]:除了这三个字符的其它字符
    • x : 转义
    • [[alpha]] :字母 示例: /bin/ls [[alpha]]*

    以上这些都可以使用在通配符里面,如:

    tom ALL=(root)/usr/bin/cat /etc/*

    此时tom就可以使用cat命令查看/etc/下面的所有文件内容。或者我们还可以这样写:

    tom ALL=(root)/usr/sbin/useradd

    这个配置使得tom用户具有创建用户的权限。

    在配置文件中,我们可以使用以下的命名方式:
    Users和runas:

    • username
    • #uid
    • %group_name
    • %#gid
    • user_alias | runas_alias

    host:

    • ip或hostname
    • network(/netmask)
    • host_alias

    command:

    • command name
    • directory
    • sudoedit
    • Cmnd_Alias

    示例如下
    让tom可以在192.168.111.120主机下删除用户

    tom 192.168.111.120=(#0)/usr/sbin/userdel

    让tom可以修改sudoers文件,这是一个可怕的命令,tom可以修改任何他想得到的权限。

    tom 192.168.111.120=(#0) sudoedit

     

    命令别名

    很多的时候,需要使用sudo的用户很多,我们要对他们处理,如果将一个配置写的很长,会看起来很多,这时候,我们就可以使用命令别名:
    别名有四种类型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias

    示例1
    让student用户可以使用pidof和ifconfig命令,让在wheel组里面的用户可以无密码执行任何操作

    student ALL=(root)/sbin/pidof,/sbin/ifconfig
    %wheel ALL=(ALL) NOPASSWD: ALL

    实例2
    定义用户别名,包含两个用户,定义命令别名,让这两个用户可以执行该操作。

    User_Alias NETADMIN= netuser1,netuser2
    Cmnd_Alias NETCMD =/usr/sbin/ip
    NETADMIN ALL=(root) NETCMD

    示例3
    SYSADER SERS= SYDCMD,DSKCMD没有带(),它就代表 ALL 任何人

    User_Alias SYSADER=wang,mage,%admins
    User_Alias DISKADER=tom
    Host_Alias SERS=www.fire.com,172.16.0.0/24
    Runas_Alias OP=root
    Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
    Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
    
    SYSADER SERS
    = SYDCMD,DSKCMD DISKADER ALL=(OP) DSKCMD

    示例4
    定义两个用户,在使用useradd,usermod,和passwd使用的时候不需要输入密码(设置无法改变root的密码),在userdel的时候需要输入密码(防止误操作,删除用户)

    User_Alias ADMINUSER = adminuser1,adminuser2
    Cmnd_Alias ADMINCMD =/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
    
    ADMINUSER ALL
    =(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel

    示例5
    默认设置,在授权普通用户使用sudo命令时,如果没有-u username的话,默认使用wang用户,在()不写tom,或者没有(),默认就是以tom的执行命令

    Defaults:wang runas_default=tom
    wang ALL=(tom,jerry) ALL

    示例6

    wang 192.168.175.136,192.168.175.138=(root)/usr/sbin/,!/usr/sbin/useradd

    示例7
    让tom可以查看message*的日志文件,但是这里有一个安全问题

    tom ALL=(ALL) NOPASSWD:/bin/cat /var/log/messages*

    我们在使用tom用户cat/var/log/messages时候,还可以:

    sudo cat /var/log/messages /etc/shadow

    并且在man帮助文档中有说明:

    Note that mail will not be sent if an unauthorized user tries to run sudo with
    ...skipping...
    %operator ALL =/bin/cat /var/log/messages*
    will allow command like:
    $ sudo cat /var/log/messages.1
    It will also allow:
    $ sudo cat /var/log/messages /etc/shadow
    which is probably not what was intended.
  • 相关阅读:
    python中的__init__
    python中的单例模式
    python中闭包和装饰器
    sql多表查询
    configurationChanges
    excludeFromRecents标签
    activity-alias
    meta-data
    launchMode
    Apache ant 配置
  • 原文地址:https://www.cnblogs.com/duzhaoqi/p/7605667.html
Copyright © 2020-2023  润新知