普通用户的提权
当我们使用普通用户执行/sbin
目录下的命令时,会发现没有权限。这中情况会照成无法正常管理服务器。这时候我们需要不使用root
用户直接登录系统,同时又要保证普通用户可以完成日常工作,我们可以使用su、sudo
来完成需求。
- 1,
su user
身份切换,使用普通用户登录。这个简单但是需要知道root
密码,不安全 - 2,
sudo
提权,当需要使用root
权限时进行提权。无需切换至root
用户。方便,安全。但是需要预先定义规则,较为复杂。
1,su 命令身份切换
- 在使用
su
切换身份前,我们需要shell
登录分类、环境变量配置文件加载顺序
1.1 Shell登录分类
- 登录
shell
需要输入用过户名和密码才能进入Shell
- 非登录
shell
不要输入用户和密码就能进入Shell
,比如运行bash
hi开启一个新的会话窗口
1.1.2
profile
类文件:设定环境变量,登录前运行的脚本和命令bashrc
类文件:设定本地变量,定义命令别名- 用户配置文件:
~/.bash_profile
~/.bashrc
- 全局环境变量
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
- 登录式
Shell
配置文件加载顺序:/etc/profile--->/etc/profile.d/*.sh--->~/.bash_profile--->~/.bashrc--->/etc/bashrc
- 非登录式
shell
配置文件加载顺序:/.bashrc--->/etc/bashrc--->/etc/profile.d/*.sh
1.1.3, su与环境变量的关系
su -username
属于登录式Shell
su username
属于非登录式Shell
- 他们最大的区别就在与加载的环境变量不一样
#以某个用户的身份执行某个服务,使用命令`su -c username`
[root@Linux.net: ~]#su - zhao -c 'pwd '
/home/zhao
2,sudo命令提权
- 快速配置
sudo
方式
1,将用户加入
wheel
组,默认wheel
组有sudo
权限;
[root@Linux.net: ~]#usermod zhao -G wheel
2,切换到普通用户
[root@Linux.net: ~]#su - zhao
3,普通用户正常情况下无法删除
/opt
目录
[zhao@Linux ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/file-1000’: Permission denied
4.使用sudo提权,然后输入普通用户密码,就可以删除
/opt
目录了。
[zhao@Linux ~]$ rm -rf /opt/
5,后期还可以通过审计日志查看普通用户提权都执行了什么操作。在
root
下查询
[root@Linux.net: ~]#tail -f /var/log/secure
3,sudo权限分配
-
通过快速提权的方式,我们会发现
sudo
什么操作都可以执行,所以我们需要限制ta,也就是说只给普通用户开启某几个命令的sudo使用权限,其他命令不允许。 -
我们来模拟个场景
1.,创建用户,并为用户设定对应的密码;
#先创建用户
[root@Linux.net: ~]#useradd ops1
[root@Linux.net: ~]#useradd ops2
[root@Linux.net: ~]#useradd dev1
[root@Linux.net: ~]#useradd dev2
#为每个用户设定密码
[root@Linux.net: ~]#echo "1" | passwd --stdin ops1
Changing password for user ops1.
passwd: all authentication tokens updated successfully.
[root@Linux.net: ~]#echo "1" | passwd --stdin ops2
Changing password for user ops2.
passwd: all authentication tokens updated successfully.
[root@Linux.net: ~]#echo "1" | passwd --stdin dev1
Changing password for user dev1.
passwd: all authentication tokens updated successfully.
[root@Linux.net: ~]#echo "1" | passwd --stdin dev2
Changing password for user dev2.
passwd: all authentication tokens updated successfully.
2.,在
/etc/sudoers
文件中配置规则
[root@Linux.net: ~]#vim /etc/sudo
#1.使用sudo定义逻辑分组
User_Alias OPS = ops1,ops2
User_Alias DEV = dev1,dev2
#2,在相同命令逻辑上划分为一个命令集:
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
#3,进行权限划分,为OPS和DEV分配对象的命令集名称
OPS ALL=(ALL) NETWORKING,SERVICES,STORAGE,PROCESSES
DEV ALL=(ALL) STORAGE,PROCESSES
3,然后登录对应的用户检查相应的
sudo
权限;
#检查ops用户sudo权限
[ops1@Linux root]$ sudo -l
[dev1@Linux root]$ sudo -l
4,sudo执行流程
sudo
命令执行流程
- 普通用户执行
sudo
命令时,会去检查/var/db/sudo
是否存在时间戳缓存;如果存在则不需要输入密码。否则需要输入用户与密码。输入密码会检测该用户是否拥有该权限,有则执行,否则报错