zoukankan      html  css  js  c++  java
  • 🍖权限管理之 su 与 sudo

    引入

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

    1.su 切换用户身份

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

    • 优点: 简单

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

    2.sudo 提权

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

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

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

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

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

    一.su 切换用户

    1.su 命令和选项

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

    2.BashShell 配置文件介绍

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

    2.登入式 shell

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

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

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

    3.非登入式 shell

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

    4.补充知识点

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

    二.sudo 提权

    1.使用 root 用户修改配置文件两种方式

    • visudo (推荐)

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

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

    2.sudo 命令和选项

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

    3.授权规则格式

    • 格式

    user host=(runas) command

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

    示例: root ALL=(ALL) ALL

    • 格式说明

      • 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"
      

    4.示例

    • 用户"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。
    
  • 相关阅读:
    Debian 7 amd64 + fbterm + ucimf
    golanggorilla/mux,强大的URL路由和调度器
    Debian 7 amd64问题
    在mysql启用远程连接
    golang从类型转换角度看interface
    golang监控goroutine异常退出
    golangRedis最佳的Go语言驱动
    usaco Scrambled Letters
    usaco Milk Routing
    滚动数组出错的原因都有那些?&poj3254
  • 原文地址:https://www.cnblogs.com/songhaixing/p/13908241.html
Copyright © 2011-2022 走看看