一、 概述
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