用户提权

一、 概述

1.提权方式

  • su 切换用户(简单,但需要知道root密码)
  • sudo 提高权限(安全,方便,但配置复杂)

2. Linux Shell分两类

  • 交互式Shell: 等待用户输入执行的指令;终端操作,需要不断提示。
  • 非交互式Shell:无需人工干预,自动执行;例如执行Shell脚本,脚本执行结束后Shell自动退出;
  • 登录Shell:需要输入用户名和密码才能进入Shell,日常使用最多的一种;
  • 非登录Shell:不需要输入用户名和密码就能进入Shell,比如运行bash会开启一个新的窗口;

3.bash shell配置文件

  • 个人配置文件: ~/.bash_profile 和 ~/.bash_rc
  • 全局配置文件: /etc/profile /etc/profile.d/*.sh 和 /etc/bashrc
profile类文件:设定环境变量,存放登录前运行的脚本和命令。
bashrc类文件:设定本地变量,定义命令别名。
若全局配置和个人配置产生冲突,个人配置优先生效;

4.环境变量配置文件的应用顺序

  • 登录式Shell配置文件执行顺序:

/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bash_rc -> /etc/bashrc

  • 非登录式Shell配置文件执行顺序:

~/.bash_rc -> /etc/bashrc -> /etc/profile.d/*.sh

[root@Tech ~]# sed -n 2p /etc/profile
echo "Loading /etc/profile"
[root@Tech ~]# sed -n 2p /etc/profile.d/test.sh 
echo "Loading /etc/profil.d/*.sh"
[root@Tech ~]# sed -n 2p /etc/bashrc 
echo "Loading /etc/bashrc"
[root@Tech ~]# sed -n 2p /home/Young/.bash_profile 
echo "Loading ~/.bash_profile"
[root@Tech ~]# sed -n 2p /home/Young/.bashrc
echo "Loading ~/.bashrc"

二、su切换用户

1. 切换用户方式

su -su指令的区别在于加载的环境变量不一致;
  • su - 用户名 #使用登录式Shell切换用户;
[root@Tech ~]# su - Young
Last login: Tue Jan 18 10:10:01 CST 2022 on pts/0
Loading /etc/profile
Loading /etc/profil.d/*.sh
Loading /etc/bashrc
Loading ~/.bash_profile
Loading ~/.bashrc
Loading /etc/bashrcx
  • su 用户名 #使用非登录式Shell切换用户;
[root@Tech ~]# su Young
Loading ~/.bashrc
Loading /etc/bashrc
Loading /etc/profil.d/*.sh
普通用户使用su -指令,代表切换至root用户,需要输入root用户密码才能切换成功;
root用户使用su - 用户名指令,代表切换至普通用户,无需输入任何密码;

2. su的局限性

  • 需要知道用户对应的密码;
  • 安全性较差;

二、sudo提权

普通用户使用sudo命令进行提权操作时,操作日志会被记录在/var/log/secure日志中。

1.sudo提权的步骤

step 01 root用户预先分配权限;
step 02 关联对应用户;

2.sudo命令执行流程

  • step01: 普通用户执行sudo命令时,会检查/var/db/sudo/是否存在时间戳缓存;
  • step02: 若时间戳存在则不需要输入密码,否则需要输入用户密码;
  • step03: 输入密码会检测该用户是否拥有该权限;
  • step04: 如果具备权限则执行,否则报错退出;
用户在使用sudo时,输入一次密码;sudo就会为该用户创建一个时间戳文件;改文件有效期大约为5分钟;

3. 配置sudo的方式

  • 方式一:快速配置
usermod -G wheel 用户名
wheel组默认拥有sudo权限
  • 方式二:标准配置
编辑配置文件/etc/sudoers
注意:不要在文件中针对同一个用户授予多次权限
visudo是编辑/etc/sudoers文件的专属命令;拥有语法检测功能,可使用visudo -c进行语法检测;
注意:visudo == vim /etc/sudoers; 但不建议使用vim直接打开配置文件编辑;直接使用vim编辑配置文件,不具有语法检测功能。
sudoers文件编写格式 用户名(%用户组名) 可登陆主机=(sudo身份) 可执行命令的绝对路径
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
[root@Tech ~]# sed -n '99,100p' /etc/sudoers
## Allow root to run any commands anywhere 
root    ALL=(ALL)   ALL
[root@Tech ~]# sed -n '106,107p' /etc/sudoers
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL

4. 细分化提权

  • 方式一:使用sudo中自带别名操作
User_Alias 用户别名 = 用户名1, 用户名2, 用户名3 ... #sudo定义用户分组(与系统用户组无关)
Cmnd_Alias 命令别名 = /目录/命令1, 目录/命令2, 目录/命令2 ... #sudo定义命令分组
用户别名 ALL=(ALL) 命令别名 #sudo分配权限
[root@Tech ~]# grep -Ev '^$|^#|De' /etc/sudoers
User_Alias OPS = Young, Aspen
User_Alias DEV = Han
Cmnd_Alias NETWORKING =  /usr/sbin/ifconfig, /usr/bin/ping
Cmnd_Alias SOFTWARE  = /usr/bin/rpm, /usr/bin/yum  
Cmnd_Alias SERVICE =  /usr/sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE =  /usr/bin/mount, /usr/bin/umount
Cmnd_Alias DELEGATING =  /usr/bin/chown, /usr/bin/chmod, /usr/bin/chgrp
Cmnd_Alias PROCESSES  =  /usr/bin/nice, /usr/bin/kill, /usr/bin/killall
root    ALL=(ALL)   ALL
OPS     ALL=(ALL)       NETWORKING, DELEGATING, SOFTWARE, SERVICE, STORAGE, PROCESSES
DEV     ALL=(ALL)       NETWORKING, STORAGE
%wheel  ALL=(ALL)   ALL
[root@Tech ~]# visudo -c
/etc/sudoers: parsed OK
#测试验证
[root@Tech ~]# su - Young
Last login: Tue Jan 18 14:20:11 CST 2022 from 10.0.0.1 on pts/2
[Young@Tech ~]$ sudo -l 
......
User Young may run the following commands on Tech:
    (ALL) /usr/sbin/ifconfig, /usr/bin/ping, /usr/bin/chown, /usr/bin/chmod, /usr/bin/chgrp, /usr/bin/rpm,
        /usr/bin/yum, /usr/sbin/service, /usr/bin/systemctl start, /usr/bin/mount, /usr/bin/umount, /usr/bin/nice,
        /usr/bin/kill, /usr/bin/killall
[Young@Tech ~]$ logout
[root@Tech ~]# su - Aspen
Last login: Tue Jan 18 14:17:32 CST 2022 on pts/1
[Aspen@Tech ~]$ sudo -l
......
User Aspen may run the following commands on Tech:
    (ALL) /usr/sbin/ifconfig, /usr/bin/ping, /usr/bin/chown, /usr/bin/chmod, /usr/bin/chgrp, /usr/bin/rpm,
        /usr/bin/yum, /usr/sbin/service, /usr/bin/systemctl start, /usr/bin/mount, /usr/bin/umount, /usr/bin/nice,
        /usr/bin/kill, /usr/bin/killall
[Aspen@Tech ~]$ logout
[root@Tech ~]# su - Han
Last login: Tue Jan 18 14:14:34 CST 2022 on pts/1
[Han@Tech ~]$ sudo -l 
......
User Han may run the following commands on Tech:
    (ALL) /usr/sbin/ifconfig, /usr/bin/ping, /usr/bin/mount, /usr/bin/umount
  • 方式二:面向系统用户组提权

针对系统用户组授权,然后将用户加入对应的用户组

[root@Tech ~]# groupadd G_dev
[root@Tech ~]# useradd test -G G_dev
[root@Tech ~]# echo 1 | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.
[root@Tech ~]# grep -Ev '^$|^#|De' /etc/sudoers
Cmnd_Alias NETWORKING =  /usr/sbin/ifconfig, /usr/bin/ping
Cmnd_Alias SOFTWARE  = /usr/bin/rpm, /usr/bin/yum  
Cmnd_Alias SERVICE =  /usr/sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE =  /usr/bin/mount, /usr/bin/umount
Cmnd_Alias DELEGATING =  /usr/bin/chown, /usr/bin/chmod, /usr/bin/chgrp
Cmnd_Alias PROCESSES  =  /usr/bin/nice, /usr/bin/kill, /usr/bin/killall
root    ALL=(ALL)   ALL
%wheel  ALL=(ALL)   ALL
%G_dev ALL=(ALL) NETWORKING, PROCESSES
[root@Tech ~]# visudo -c
Warning: /etc/sudoers:106 unused Cmnd_Alias "DELEGATING"
Warning: /etc/sudoers:104 unused Cmnd_Alias "SERVICE"
Warning: /etc/sudoers:103 unused Cmnd_Alias "SOFTWARE"
Warning: /etc/sudoers:105 unused Cmnd_Alias "STORAGE"
/etc/sudoers: parsed OK
#测试验证
[root@Tech ~]# su -  test
[test@Tech ~]$ sudo -l 
......
User test may run the following commands on Tech:
    (ALL) /usr/sbin/ifconfig, /usr/bin/ping, /usr/bin/nice, /usr/bin/kill, /usr/bin/killall

5. sudo命令

sudo 命令 #临时以另外一个用户身份(默认root用户)执行事先在/etc/sudoers文件允许的命令

  • -l #查看当前用户拥有的特权指令
[root@Tech ~]# grep 'sudo_user' /etc/sudoers
sudo_user ALL=(ALL) NOPASSWD:ALL
[root@Tech ~]# su - sudo_user
[sudo_user@Tech ~]$ sudo -l 
Matching Defaults entries for sudo_user on Tech:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
    HOSTNAME HISTSIZE 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 sudo_user may run the following commands on Tech:
    (ALL) NOPASSWD: ALL