22.权限管理之 su 与 sudo

1|0引入

在公司工作普通用户权限不够, 需要使用管理员权限的时候通常有两种解决方案

1|11.su 切换用户身份

  • 特点: 使用普通用户身份登入, 然后使用 su 命令切换到 root 用户

  • 优点: 简单

  • 缺点: 需要知道 root 密码, 并且获得了所有root权限,不安全

1|22.sudo 提权

  • 特点: 使用普通用户身份登入, sudo 命令获得 root 用户的部分管理权限(管理员设置好的)

  • 优点: 1.不需要切换到root用户下,

            ​ 2.不需要知道root密码, 输入的是自己的密码, 提升了安全性

    ​         3.权限控住更为精确, 可以控制普通用户之获取 root 用户部分权限

  • 缺点: 设置相对比较复杂

2|0一.su 切换用户

2|11.su 命令和选项

  • su [用户名] : 切换用户身份,不切换环境,切到root直接su,需要密码,root切到其他不需要
  • su - [用户名] : 切换用户并切换用户环境
  • su [用户名] -c [命令] :临时使用某个用户身份执行命令

2|22.BashShell 配置文件介绍

  • 全局配置文件
             /etc/profile               #类文件, 设定环境变量,登入前运行的脚本和命令
             /etc/profile.d/*.sh     #可执行的脚本文件
             /etc/bashrc              #类文件, 设定本地变量,定义命令别名
  • 个人配置文件
              ~/.bash_profile #类文件, 设定环境变量,登入前运行的脚本和命令
              ~/.bashrc #类文件, 设定本地变量,定义命令别名
  • 如果全局变量与个人个人变量冲突, 以个人配置为准
  • 验证配置加载 : 使用 echo 在每个文件添加一行输出, 注意放在文件的第一行

2|32.登入式 shell

  • 需要输入用户名和密码才能进入的 shell, 日常接触最多的一种

  • 执行登入式 shell : 身份与环境都切换

  命令 : su - [用户名]
  • 加载配置文件的应用顺序
            1. 👉 /etc/profile
            2. 👉 /etc/profile.d/*.sh
            3. 👉 ~/.bash_profile
            4. 👉 ~/.bashrc
            5. 👉 /etc/bashrc

2|43.非登入式 shell

  • 不需要输入用户名和密码就能进入 shell, 比如运行bash会开启一个新的会话窗口
  • 执行非登入式 shell : 只切换用户身份, 不切换环境
命令 : su [用户名]
  • 加载配置文件的应用顺序
               1. 👉 ~/.bashrc
               2. 👉 /etc/bashrc
               3. 👉 /etc/profile.d/*.sh

2|54.补充知识点

  • Shell 的使用方式有两种
                  1.交互式 shell : 等待用户输入执行的命令(终端操作,需要不断地提醒)
                  2.非交互式 Shell : 执行 Shell 脚本, 脚本执行结束后 Shell 自动退出
  • 用户切换补充
                 1.从 root 切到普通用户无需密码, 反过来需要
                 2.临时切换身份执行命令 : su - [用户名] -c "[命令]"

3|0二.sudo 提权

3|11.使用 root 用户修改配置文件两种方式

  • 1|0visudo (推荐)

              [root@shawn ~]# visudo
              [root@shawn ~]# visudo -c    #检查配置是否正确
               
               /etc/sudoers:解析正确
  • 1|0vim /etc/sudoers

               不会检查配置是否正确
                  会高亮显示语法
               使用sudo操作会被记录到管理员邮箱"/var/spool/mail/root"

3|22.sudo 命令和选项

  • sudo –i –u [用户名] 切换身份为某某用户
  • sudo -u [用户名] 使用指定的用户执行命令(一般是在root用户下)
  • sudo -l 列出用户在主机上可用的和被禁止的命令
  • sudo -v 再延长密码有效期限5分钟,更新时间戳(密码5分钟有效)
  • sudo -k 清除时间戳,下次需要重新输密码

3|33.授权规则格式

  • 1|0格式

  user host=(runas) command

    [用户] [主机IP或主机名]=[转成的用户身份] [命令]

示例: root ALL=(ALL) ALL

  • 1|0格式说明

    • user : 运行者的身份
         1.👉 username : 直接写用户名
         2.👉 #UID : 使用用户的uid
         2.👉 %group_name : 使用一个组
         3.👉 %#gid : 使用组ID
         4.👉 User_Alise : 使用用户别名,跟组一样在里面加入多个用户
     
     
    • host : 允许哪些用户使用哪些主机
           1.👉 ip地址 : 比如 192.168.12.179
           2.👉 hostname : 直接使用主机名
           3.👉 network : 网段
           4.👉 Host_Alias : 主机别名
     
     
    • (runas): 使用哪个用户身份运行,一般是(root)
             1.👉 username : 用户名
             2.👉 #uid : uid
             3.👉 %group_name : 组名
             4.👉 %#gid : gid
             4.👉 Runaas_Alias : 别名
     
     
    • command: 运行哪些命令
             1.👉 command name : 命令的绝对路径
             2.👉 directory : 一个目录,代表目录下的命令都可用
             3.👉 sudoedit : 编辑"sudoers"文件,授权用户可以自定义权限
             4.👉 Cmnd_Alias : 命令别名,里面都得是绝对路径,用逗号分隔
     
     
     
    • 补充
            1.👉 命令必须使用绝对路径: 比如"/usr/bin/vim /etc/shadow"
            2.👉 别名必须大写: 比如"USER=song1,song2","IP=192.x.x.x,192.x.x.x"
            3.👉 执行命令不需要密码设置: "NOPASSWD:command","NOPASSWD:Cmnd_Alias"

3|44.示例

   

  • 用户"song1"可以使用命令别名"MND"里的命令
  • 命令别名"MND"包含了"cat /etc/shadow"命令
          ⛅设置命令别名,里面包含命令,多个命令用逗号隔开
                    [root@shawn ~]# visudo
                      Cmnd_Alias CMND = /bin/cat /etc/shadow
         
         ⛅设置用户"song1"可使用,并无需输入密码
                     song1 ALL=(root) NOPASSWD:MND
         
 
         ⛅验证 [root@shawn ~]# su - song1
                                上一次登录:六 10月 31 16:34:20 CST 2020pts/0 上
                      [song1@shawn ~]$ cat /etc/shadow               #未提权
                                 cat: /etc/shadow: 权限不够
                     [song1@shawn ~]$ sudo  cat /etc/shadow      #提权
                                 root:$6$TRKWGiXlX063z/6A$fTzd6HMfLMtdfXFm0::0:99999:7:::
                                 bin:*:17110:0:99999:7:::
                                 daemon:*:17110:0:99999:7:::
                                 adm:*:17110:0:99999:7:::
                                      ..............
                                      ........
                                      ...
  • 用户别名"ADMINS"里的用户可以使用"ifconfig"修改网卡配置
  • 用户别名"ADMINS"包含了用户"song1""song2"
 
 
⛅设置用户别名,里面包含"song1","song2"
              User_Alias ADMINS = song1, song2
 
⛅设置别名可使用网卡配置命令
             ADMINS ALL=(root) /usr/sbin/ifconifg
 
⛅验证"song1"
             [root@shawn ~]# su - song1
             [song1@shawn ~]$ ifconfig ens32:0 2.2.2.2      #未提权
                    SIOCSIFADDR: 不允许的操作
                    SIOCSIFFLAGS: 不允许的操作
           
             [song1@shawn ~]$ sudo ifconfig ens32:0 2.2.2.2 #提权
             [sudo] song1 的密码: #输入密码
             [song1@shawn ~]$ ifconfig
                     ens32:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                     inet 2.2.2.2 netmask 255.0.0.0 broadcast 2.255.255.255
                     ether 00:0c:29:3e:45:6a txqueuelen 1000 (Ethernet)
  ⛅验证"song2"
            [root@shawn song1]# su - song2
                       上一次登录:五 10月 30 19:32:23 CST 2020pts/1 上
            [song2@shawn ~]$ ifconfig ens32:2 4.4.4.4           #未提权
                      SIOCSIFADDR: 不允许的操作
                      SIOCSIFFLAGS: 不允许的操作
            [song2@shawn ~]$ sudo ifconfig ens32:2 4.4.4.4    #提权
   
                  我们信任您已经从系统管理员那里了解了日常注意事项。
                  总结起来无外乎这三点:
                       #1) 尊重别人的隐私。
                       #2) 输入前要先考虑(后果和风险)。
                       #3) 权力越大,责任越大。
              [sudo] song2 的密码:   #输入密码
             [song2@shawn ~]$ ifconfig
                    ens32:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                    inet 4.4.4.4 netmask 255.0.0.0 broadcast 4.255.255.255
                     ether 00:0c:29:3e:45:6a txqueuelen 1000 (Ethernet)
  • 用户"song3"可以使用"root"的所有权限,但唯独不能"userdel"删除用户
 
⛅设置"song3"的配置
        song3      ALL=(ALL)       NOPASSWD:ALL,!/usr/sbin/userdel
 
 
⛅验证
        [root@shawn ~]# su - song3
                 上一次登录:六 10月 31 17:09:41 CST 2020pts/0 上
 
 
        [song3@shawn ~]$ useradd aaaa #未提权
                 -bash: /usr/sbin/useradd: 权限不够
           
        [song3@shawn ~]$ sudo useradd aaaa #提权
        [song3@shawn ~]$ id aaaa
                 \uid=1004(aaaa) gid=1005(aaaa) 组=1005(aaaa)
         [song3@shawn ~]$ sudo userdel aaaa #无法删除用户
                  对不起,用户 song3 无权以 root 的身份在 shawn 上执行 /sbin/userdel aaaa。

 


__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/articles/14443723.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(302)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示