zoukankan      html  css  js  c++  java
  • sudo及visudo

      sudo是一种权限管理机制,管理员可以授权普通用户去执行root的操作,而不需要知道root的密码,它依赖于/etc/sudoers这个文件,可以授权给哪个用户在哪个主机上能够以管理员的身份执行什么样的管理命令,而且是有限的。/etc/sudoers文件相当于一个授权表,此文件的权限只有管理员可以查看并且不建议使用vim编辑器来进行编辑,跟cron一样有专门的编辑命令可以检测语法问题,以免产生语法错误导致系统崩溃;针对sudo编辑专门提供了一个命令visudo。

    sudo命令格式

    sudo [options] COMMAND

    options:

      -l COMMAND:列出用户可执行或不可执行的命令信息;
      -k:清除用户成功认证所缓存的时间戳,默认缓存时间戳为5分钟;
      -p:改变询问密码的提示符号;
      -s<shell>:执行指定的shell;
      -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份

    visudo

    用户授权语句的格式:

    USERS  LOCATION=(USERNAME|GROUP|runas_alias)  [NOPASSWD|PASSWD]  COMMAND

    实例:root  ALL=(ALL)  ALL (第一个ALL指网络中的主机;第二个ALL指目标用户,以谁的身份运行命令;第三个ALL指命令名)
       user1  ALL=(user2,user3)  /bin/ls, /bin/rm
       user2  localhost=(root)    /bin/touch, /bin/rm
       user3  localhost=(root)    nopasswd:/bin/touch

    其中:

      USERS 可以是:
        username:授权用户名;
        %groupname:授权用户组;
        User_alias:授权的用户或组别名

      LOCATION 可以是:
        ip:规则匹配的IP地址;
        hostname:规则匹配的主机名;
        NetAddr:规则匹配的网段;
        Host_alias:主机别名

      COMMAND 可以是:
        command:命令的绝对路径;
        Cmnd_alias:命令的别名组

    而关于 Alias 定义的格式:

    ALIAS_TYPE  NAME=item1,item2,item3...

    注意:NAME必须全为大写字母。
      ALIAS_TYPE的类型包括:
        User_Alias:授权用户别名类型
        Host_Alias:主机别名类型
        Runas_Alias:作为哪些用户执行的别名类型
        Cmnd_Alias:命令别名类型

    应用实例1

    [root@happiness ~]# visudo
        root    ALL=(ALL)       ALL
        user1   ALL=(user2,user3)     /bin/ls  #指定user1能执行user2,user3的ls命令
    [root@happiness ~]# su - user1
      Last login: Tue Sep  4 16:09:47 CST 2018 on pts/0
    [user1@happiness ~]$ sudo ls /home/user2  #sudo没指定用户时,默认以root执行,而user1没有root的ls权限,故报错
      [sudo] password for user1: 
      Sorry, user user1 is not allowed to execute '/bin/ls /home/user2' as root on happiness.
    [user1@happiness ~]$ sudo -u user2 ls /home/user2  #sudo权限可用
      [sudo] password for user1: 
      user2txt
    [user1@happiness ~]$ sudo -u user3 ls /home/user2
      ls: cannot open directory /home/user2: Permission denied
    [root@happiness ~]# visudo
        root    ALL=(ALL)       ALL
        user1   All=(user2,user3)   /bin/ls
        Defaults:user1        runas_default=user2  #指定user1默认以user2执行ls命令
    [root@happiness ~]# su - user1
      Last login: Tue Sep  4 17:08:18 CST 2018 on pts/0
    [user1@happiness ~]$ sudo -k
    [user1@happiness ~]$ sudo ls /home/user3
    ls: cannot open directory /home/user3: Permission denied
    [user1@happiness ~]$ sudo ls /home/user2  #默认用user2执行并且不需要输入密码
      user2txt

    应用实例2

    [root@happiness ~]# visudo
      Cmnd_Alias COMM1=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd,!/usr/bin/passwd root
      Cmnd_Alias COMM2=/usr/sbin/shutdown,/usr/sbin/reboot
      User_Alias USERADM=user1,user2
      USERADM ALL=(root) NOPASSWD:COMM1,PASSWD:COMM2
    [root@happiness ~]# useradd user1
    [root@happiness ~]# useradd user2
    [root@happiness ~]# passwd user1
    测试结果: [root@happiness ~]# su - user1 [user1@happiness ~]$ sudo -l #查看用户所拥有的sudo权限 Matching Defaults entries for user1 on this host: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin:/bin:/usr/sbin:/usr/bin User user1 may run the following commands on this host: (root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd, !/usr/bin/passwd root, (root) PASSWD: /usr/sbin/shutdown, /usr/sbin/reboot [user1@happiness ~]$ sudo passwd user2 #为user2设置密码   Changing password for user user2.   New password:   [user1@happiness ~]$ sudo passwd root #不允许更改root密码   Sorry, user user1 is not allowed to execute '/bin/passwd root' as root on happiness. [user1@happiness ~]$ sudo shutdown #执行shutdown需要输入用户密码   [sudo] password for user1:
  • 相关阅读:
    Android入门第六篇之ListView (一)
    mysql触发器的作用及语法
    查询记录时rs.previous()的使用
    Microsoft Visual C++ Runtime Library Runtime Error的解决的方法
    Ubuntu中编译链接Opencv应用的简便方式
    24点经典算法
    CMS系统简介(从简介到使用)
    编程学习资源
    Django是什么
    Thinkphp中的自动验证
  • 原文地址:https://www.cnblogs.com/walk1314/p/9322732.html
Copyright © 2011-2022 走看看