• Linux sudo命令与其配置文件/etc/sudoers


    Linux sudo命令与其配置文件/etc/sudoers
    2012-05-04 11:00:56     我来说两句      
    收藏    我要投稿
    Linux sudo命令与其配置文件/etc/sudoers
     
    linux有一定了解的人多少也会知道点关于sudo命令。sudo命令核心思想是权限的赋予 ,即某个命令的所属用户不是你自己,而你却有权限执行它。但是我们需要注意的是,虽然你有权限执行这个命令,但是在执行的时候却仍是以这个命令本身所属用户来完成的[注释1]。(su命令类似sudo命令,但是两者的差别在于前者su是一个粗粒度权限赋予, www.2cto.com 
    对su最好的理解我觉得是change user running command permanent。即永久的切换到了su过去的用户,然后以这个su到的新用户干它能干的一切事情,而sudo则是指在执行某个命令的时候临时切换到这个命令的所属用户执行[注释1],而且sudo可以做到以单个命令为单位将权限赋予给其他用户,相比su显得更加灵活。)
     
    大概了解了sudo的功能,那么你知道怎么配置sudo吗?下面来简要说明一下:
    配置sudo的配置文件在/etc/sudoers里面,一般通过visudo命令来安全打开编辑。查看/etc/sudoers的用法可以使用命令: man 5 sudoers。在/etc/sudoers文件里面主要包括这两部分:
    1. 别名设置  www.2cto.com 
    别名主要包括这几种:User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias,分别是用户别名,主机别名,运行用户别名,命令别名。设置这几个别名的命令主要是为了配置方便,这个很类似linux用户群组或是数据库中角色的作用,有了别名便可以批量的赋予权限。
    设置方法 Alias_Type alias_name = name1, name2, name3, 例如User_Alias User1 = user1, user2, user3。其他类型的alias设置方法类似。
    2. 真正的sudo entry
    这个就是真正配置哪些用户可以使用哪些命令了(你甚至可以不使用别名设置那部分)。
    格式为:用户名(用户别名) 主机名(主机别名)=[(运行用户或是Runas_Alias)可选] [tag可选] 可以执行的命令(或Cmmd_Alias)  这样描述语法很生硬,不易理解,举例子
    user1  host1 = /bin/kill                                                                              # user1 可以在host1上使用命令/bin/kill
    user1  host1 = NOPASSWD: /bin/kill                                                     # user1 可以在host1上使用命令/bin/kill 同时可以不必输入密码(这里就是使用了NOPASSWD
                                                                                                                          # 这个tag,默认是PASSWD)
    user1  host1 = NOPASSWD: /bin/kill , PASSWORD: /bin/ls              # user1 可以在host1上使用命令/bin/kill无需输入密码,但是使用/bin/ls则需要输入密码
    user1  host1 = (opterator) /bin/kill                                                          # user1 可以在host1上使用命令/bin/kill但是必须是以operator用户运行这个命令,等价于
                                                                                                                          # su -u opertor /bin/kill
    user1  host1 = (:group_name) /bin/kill                                                 # user1 可以在host1上使用命令/bin/kill,且必须以group_name这个用户群组里面的用户来运行。
    %group_name host1 = /bin/kill                                                              # 所有group_name里面的用户都可以在host1上执行/bin/kill(linux中一般代表整个用户群组用
                                                                                                                         # %group_name)
     
    再举个实际例子,我之前对sudo su这个命令不理解,为什么我可以直接就su到root用户了呢,连密码都不需要?查看了一下sudoers文件才知道原来里面有这么一行:
    xxx     ALL=NOPASSWD: /bin/su  www.2cto.com 
    好了,到此为止~,多了流水账一篇~~~^__^
     
    注释1:
    linux中每个进程都是有与之相关的UID,GID,分别为有效UID,真实UID,有效GID,真实GID。有效UID,GID是用来判断权限,而真实UID,GID是用来记账(哪个进程属于哪个用户,或记录日志等等)。当配置了sudo entry后,有效UID里面就包含了这个被配置的用户UID,因而权限验证的时候就可以通过。
     
    -----------------
     
    sudo 是 linux 下允许普通用户使用超级权限的工具,他的配置文件为 /etc/sudoers , 我们可以使用 visudo 对该文件进行编辑,并且强烈建议使用这个命令对文件进行编辑,因为这个命令在编辑时带有自动排错和检查语法的功能,这样可以很有效滴保护 sudoers 文件不被错误地修改掉!

           一: sudo 设置不输入密码自动登录:

           1. 用 visudo 编辑 sudoers 文件,默认情况我们会看到有"%admin ALL=(ALL) ALL"一行注释 , 这里的 admin 是一个组名,这里表示属于 admin 组的用户可以有 sudo 权限,但是需要输入密码,如果想不输入密码,可以将此行改为  "%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL" 即可。

           2. 我们知道,sudo 情况下执行 /usr/bin/passwd root , 这个时候由于 admin 组的用户继承了 root 超级权限,因此它是可以将 root 的密码修改的,从安全上来讲,这个是不被允许的,避免这种情况发生,可以在 admin 组后面做如下配置, %admin ALL=(ALL) NOPASSWD:ALL, !/usr/bin/passwd root , 这样把 passwd命令禁用掉,则就不能修改 root 的密码了。

           3. 对于普通用户而言,可以单独定义其sudoer的访问规则:

            首先需要配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种         Host_Alias         Cmnd_Alias         User_Alias         Runas_Alias
    1) 配置Host_Alias:就是主机的列表 Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3 2) 配置Cmnd_Alias:就是允许执行的命令的列表 Cmnd_Alias      COMMAND_FLAG = command1, command2, command3 3) 配置User_Alias:就是具有sudo权限的用户的列表 User_Alias USER_FLAG = user1, user2, user3 4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表 Runas_Alias RUNAS_FLAG = operator1, operator2, operator3 5) 配置权限 配置权限的格式如下: USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG 如果不需要密码验证的话,则按照这样的格式来配置 USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG 

    例:

    # Host alias specification Host_Alias      IP = 172.16.1.100 , 172.16.1.101 。。。。
    # User alias specification User_Alias  OK = test1 , test2 # Cmnd alias specification Cmnd_Alias      OK2 = /usr/bin/scp , /usr/bin/ssh  
    # Defaults specification
    # User privilege specification root    ALL=(ALL) ALL support IP=(ALL) NOPASSWD: Ok2

          

  • 相关阅读:
    Using sudo inside a docker container
    python enumerate用法总结
    如何保存Keras模型
    python pickle模块
    如何选择开源项目的license
    github在线创建文件夹
    关于python3.4版本中的zip函数
    使用sqoop 在关系型数据库和Hadoop之间实现数据的抽取
    HBase Shell 常见操作
    Java API 实现HBase的数据添加与过滤查询
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/2812654.html
Copyright © 2020-2023  润新知