zoukankan      html  css  js  c++  java
  • Linux文件权限与属性详解 之 su & sudo

    Linux文件权限与属性详解 之 一般权限
    Linux文件权限与属性详解 之 ACL
    Linux文件权限与属性详解 之 SUID、SGID & SBIT
    Linux文件权限与属性详解 之 chattr & lsattr
    Linux文件权限与属性详解 之 su & sudo

    前言

    当我们建立了一个项目组,项目组的普通用户对项目文件进行维护,时常会执行一些命令(如 chmod, chattr等),然而,普通用户被没有权限去执行这些命令,这个时候就需要求助root;但是,通常root用户为该项目的PM,PM往往有很多事情要处理,根本没有时间去时时刻刻响应用户的请求,这个时候就产生了矛盾!
    怎么办呢?这个时候,两种解决办法:

    • su :直接进入到root角色(这个需要有root的密码)
    • sudo :将普通用户在执行某个命令时,暂时升级为root,执行完成后回归本用户身份。

    是否觉得 sudo 有点像SUID?然而

    • SUID只能设置一个命令,sudo可以设置所有命令
    • SUID是升级到文件所有者的身份,sudo是升级的root身份

    1. su

    全称,Switch User
    作用:使用户可以在shell中以其它身份运行程序
    PS: 除非该用户自己是超级用户,不然切换用户身份时都需要输入密码

    有一点区别需要注意:

    1). su - user1 :

    切换到user1用户下,且使用user1的环境变量(具体的说就是 .bash_profile和.bash_rc),称之为全切换

    [niesh@niesh ~]$ su Jimmy
    密码:
    [Jimmy@niesh niesh]$ pwd
    /home/niesh
    
    [Jimmy@niesh niesh]$ echo $PATH
    /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/niesh/Desktop
    [Jimmy@niesh niesh]$ exit
    exit
    

    2). su user2 :

    切换到user1用户下,但仍然使用前用户的环境变量,成为半切换

    [niesh@niesh ~]$ su - Jimmy
    密码:
    上一次登录:一 7月 31 22:15:43 CST 2017pts/1 上
    [Jimmy@niesh ~]$ pwd
    /home/Jimmy
    
    [Jimmy@niesh ~]$ echo $PATH
    /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/Jimmy/.local/bin:/home/Jimmy/bin
    

    2. sudo

    1). 特征:

    • 对用户的执行命令权限进行限制
    • 提供了日志记录,可详细记录每个用户具体的操作(http://blog.csdn.net/xyz846/article/details/26406955)
    • 临时性的时间戳(一般为5min),在此期间使用sudo命令,不需要再输入密码
    • 配置文件为/etc/sudoers,可以使root对用户集中管理

    2). 工作流程:

    • 当用户执行sudo时,系统寻找/etc/sudoers文件,判断该用户是否具备执行sudo的权限
    • 确认用户权限后,让用户输入自身的密码
    • 若密码合法,则开始执行sudo后续的命令
    • root执行sudo时不需要输入密码
    • 自身切换自身也不需要输入密码

    3). 命令

    sudo (optional) (argument):
    Optional:

    -b:在后台执行指令; -h:显示帮助
    -H:将HOME环境变量设为新身份的HOME环境变量
    -k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
    -l:列出目前用户可执行与无法执行的指令
    -p:改变询问密码的提示符号
    -s:执行指定的shell
    -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
    -v:延长密码有效期限5分钟;
    -V :显示版本信息。

    Argument:

    需要运行的指令

    4). 配置:

    对sudo权限的配置其实就是修改 /etc/sudoers 文件,有两种方式实现:

    • vim /etc/sudoers
    • visudo : 推荐使用

    打开/etc/sudoers文件,我们见会找到这样一段话:
    mark

    • 用户名:即需要赋予sudo权限的用户账号
    • Server-IP: 即用户被允许在这个Server-IP这个网段里执行命令(并不是允许某个IP的主机去执行sudo)
    • 可切换的身份:即本用户使用sudo后,可以切换到哪个用户身份(不写的话默认为任何身份)
    • 可执行的命令:即我使用sudo后,可以执行哪些命令

    mark
    类似上面的图,只是 %之后变成了组,即整个组都可以执行sudo的命令。

    mark
    上图中,NOPASSWD为当使用sudo时,不需要输入密码。

    5). 例程:

    增加sudo权限:

    现在新增加一个用户Jimmy,没有sudo权限:

    [Jimmy@niesh ~]$ ll
    总用量 0
    -rw-rw-r--. 1 root Jimmy 0 8月   1 21:33 aa
    [Jimmy@niesh ~]$ sudo chattr +i aa
    [sudo] password for Jimmy:
    Jimmy 不在 sudoers 文件中。此事将被报告。
    

    因为Jimmy不再sudoers里面,所以不能使用sudo命令(chattr命令只有root才可执行)!
    增加Jimmy到sudoers里:

    [Jimmy@niesh ~]$ su -
    密码:
    上一次登录:二 8月  1 21:32:59 CST 2017pts/1 上
    [root@niesh ~]# visudo
    

    mark
    重新执行 chattr命令:

    [Jimmy@niesh ~]$ sudo chattr +i aa
    [sudo] password for Jimmy:
    
    [Jimmy@niesh ~]$ lsattr aa
    ----i----------- aa
    

    OK,成功执行!

    增加组的sudo权限,且不需要输入密码:

    增加组niesh 为 NOPASSWD(无密码):
    mark

    [root@niesh ~]# su - niesh
    上一次登录:二 8月  1 21:47:06 CST 2017pts/1 上
    [niesh@niesh ~]$
    

    增加文件 dog+i 权限(需要sudo):

    [niesh@niesh Desktop]$ sudo chattr +i dog
    [niesh@niesh Desktop]$ lsattr dog
    ----i----------- dog
    

    看吧,不需要输入密码了是吧!

  • 相关阅读:
    【IDEA】颜色主题 Color Theme
    【IDEA】IntelliJ IDEA 2020.1破解版
    【HTML】基础
    SQLyog
    【GitHub】本地代码上传
    【NetWork】外网和内网
    C#根据PDF模板生成内容
    layui数据表格显示与导出问题
    LayUIDataResult
    LayUIParameter
  • 原文地址:https://www.cnblogs.com/Jimmy1988/p/7270881.html
Copyright © 2011-2022 走看看