LINUX切换用户与提权相关模块

本文详细介绍了Linux中su与su-命令的区别,以及它们加载环境文件的差异。通过实验验证了su和su-在加载环境变量时的不同,并讨论了在不同配置文件中设置别名的效果。此外,文章还深入讲解了sudo的权限管理和提权流程,展示了如何通过sudoers文件配置用户权限,以及sudo权限滥用可能带来的安全问题。最后,通过实例展示了sudo权限的使用限制及其执行流程。
摘要由CSDN通过智能技术生成

切换用户

命令 su username (非登录式)
su - username (登录式)

区别:加载环境配置文件的范围不一样 (当然切换用户不只是加载这些文件,只是为了区别su/su-而符合我们预期的加载文件拿出来做对比)
su 模式 加载的环境文件有 : ~/.bash_profile(个人配置文件) ~/.bashrc /etc/bash
su - 模式 加载的环境文件有: /etc/profile
/etc/profile.d /ect/bashrc ~/.bashrc(个人配置文件) /ect/bash
接下来我们验证下是否是这样的加载流程:
我们依次在这些文件中加入提示.

[root@localhost ~]# su -
Last login: Wed Jul 14 11:07:43 CST 2021 on pts/0
i come to  profile.d
i come  to  /etc/profile
i come to .bashrc
i come to /etc/bashrc
i come to .bash_profile
[root@localhost ~]# su 
i come to .bashrc
i come to  profile.d
i come to /etc/bashrc

此次的实验可以证明出:
su username 非登录式 -加载环境 (~/.bash_profile ~/.bashrc /etc/bash)
su - username 登录式 --加载环境(/etc/profile /etc/profile.d ~/.bash_profile ~/.bashrc /etc/bash)

所以这种情况也会引出一个问题如果我们在
~/.bash_profile中加入别名是否可以执行
在文件中加入

 alias AA='head  - 1  /etc/passwd'
~                                      

切换到su - 执行别名:

[root@localhost ~]# AA
root:x:0:0:root:/root:/bin/bash

在/etc/bashrc 中加入

alias  BB='tail -1  /etc/passwd'

然后切换到su - 执行别名

[root@localhost ~]# BB
oldwoman:x:7091:7095::/home/oldwoman:/bin/bash

总结:
su su - 切换用户时都会加载环境文件但是su - 加载的文件比非登录式的多 所以如果不使用登录式的方式登录用户,如果/etc/bashrc 和 ~/.bashr_profile 中有别名那么将会不执行加载, 所以我们一般使用 su - username 方式登录更加合理

su username -c ‘command’
切换到用户执行操作,执行完命令后没有切换用户(不切换用户,但是使用其他用户执行某项操作)

[root@localhost ~]# su  oldxie  -c  'uname  -r '
3.10.0-862.el7.x86_64
[root@localhost ~]# 

用途:当写脚本的时候.需要用到,有些时候切换用户后对脚本后面的内容会出现执行问题

sudo 提权

流程:
1先使用root账户对该用户进行授权
2然后使用该账户进行提权,然后可以操作超出本账户不能执行某些权限的操作

sudo : 权限非常的高,几乎可以执行所有的命
配置文件/etc/sudoers
或者在root 下输入visudo

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool  #network下的一些命令的绝对路径然后定义为别名

Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum #


Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /b    in/umount #磁盘相关的一些命令的绝对路径

Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall  nice进程相关的一些命令


 Host_Alias     FILESERVERS = fs1, fs2  #为组定义一个别名,包括了组的集合
 Host_Alias     MAILSERVERS = smtp, smtp2

User_Alias ADMINS = jsmith, mikem #用户集合的别名


在这里插入图片描述

按照上图要求创建分别创建用户和组实现功能

1 创建用户

[root@localhost ~]# useradd   ops1 
[root@localhost ~]# useradd   ops2 
[root@localhost ~]# useradd   dev1 
[root@localhost ~]# useradd   dev2

2 给每个用户设定密码

[root@localhost ~]# echo  '123'  |  passwd  --stdin   ops1 
Changing password for user ops1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo  '123'  |  passwd  --stdin   ops2
Changing password for user ops2.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo  '123'  |  passwd  --stdin   dev1 
Changing password for user dev1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo  '123'  |  passwd  --stdin   dev2
Changing password for user dev2.
passwd: all authentication tokens updated successfully

3设定命令的集合
vim /etc/sudoers
取消以下别名的注释(打开这些命令合集)
Cmnd_Alias NETWORKING 网络相关的权限
Cmnd_Alias SOFTWARE yum pm update 相关的权限
Cmnd_Alias STORAGE 磁盘分区和装载的权限
Cmnd_Alias PROCESSES 启动服务的权限

4创建用户别名合集

User_Alias  OPS = ops1,ops2
User_Alias  DEV = dev1,dev2

5设定命令集合

OPS  ALL=(ALL)       NETWORKING,SOFTWARE,PROCESSES,SERVICES
DEV  ALL=(ALL)       SOFTWARE

6保存退出,切换到ops1用户 再
sudo -l 查询当前用户分配的权限
显示结果:

User ops1 may run the following commands on localhost:
    (ALL) /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
        /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/rpm,
        /usr/bin/up2date, /usr/bin/yum, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall,
        /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop,
        /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status,
        /usr/bin/systemctl enable, /usr/bin/systemctl disable

7测试:
rm -rf /opt

[ops1@localhost ~]$ rm -rf  /opt/
rm: cannot remove ‘/opt/resource’: Permission denied
rm: cannot remove ‘/opt/file’: Permission denied
rm: cannot remove ‘/opt/filename’: Permission denied
[ops1@localhost ~]$ systemctl   restart    network
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 

结论:只能执行划分的命令权限

扩展内容:
1,在DEV加入/usr/bin/vim
加入这个权限的话可以直接越过root进行编辑/etc/sudoers ,一般不能这么写有安全问题
演示一:


```bash
在 DEV 后加入 /usr/bin/vim
然后wq退出
su  -  dev1 
sudo  vim  /etc/sudioers 
输出本账号密码
再次进入sudioers 中 
在DEV后面加入 /bin/rm
sudo   rm  -rf /opt/
成功删除目录

``
演示二:

在DEV后面加入/bin/su
不要密码直接进入root
sudo  su  -
Last login: Wed Jul 14 15:23:29 CST 2021 from 10.0.0.1 on pts/0
i come to  profile.d
i come  to  /etc/profile
i come to .bashrc
i come to /etc/bashrc
i come to .bash_profile
[root@localhost ~]# 


总结:sudo能够执行什么操作,取决于用户对应的组分配了什么范围的命令的合集

 oldman  ALL=(ALL)        /bin/su

/bin/su 本质上权限等于ALL

RBAC(Role-Based Access Control),也就是所谓的**“基于角色的访问控制权限”**。

sudo执行流程

在这里插入图片描述

sudo 支队应用程序起作用对于Linux中的内置命令不起作用
例如: sudo cd

[ops1@localhost ~]$ sudo cd /etc/
[sudo] password for ops1: 
Sorry, try again.
[sudo] password for ops1: 
Sorry, user ops1 is not allowed to execute '/bin/cd /etc/' as root on localhost.localdomain.

解决办法:

sudo  -i 提升用户的执行权限
再 cd
或者sudo -s  打开特殊的bash shell 再执行
cd

做些小练习:

 alice  ALL=(ALL)       NOPASSWD:ALL  alcie拥有sudo所有执行命令的权限,而且还不用输入密码确认
 

XTH ALL=(ALL) /bin/passwd  [a-z]*,!/bin/passwd root  #除了root其他用户的密码都可以变更
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值