Linux_权限管理-su-切换用户_sudo-提权

su-切换用户 sudo-提权

1. su sudo介绍

# su
	switch user
	Change the effective user id and group id to that of USER

# sudo
	switch user, do
	execute a command as another user

# su和sudo出现的缘由
    因为root用户的权限太大,破坏力太强,安全风险极高,所以通常情况下公司的服务器对外都是禁止root用户直接登录的
    而运维组的小伙伴通常使用的都是普通用户,但是运维组内的小伙伴们在进行日常运维管理的过程中,经常需要获得某些root才有的管理权限才能完成任务,例如需要执行/sbin目录下的命令
    
# 问题    
    那么如何才能在不使用root用户直接登录操作系统的同时又能保证普通用户完成日常工作呢?
    
# 两种解决方案    
    1. su切换用户身份
  		特点:
        	使用普通用户登录,然后使用su命令切换到root账户下 
        优点:
        	简单粗暴 
        缺点:
            1. 需要知道root密码 
            2. 权限控制不精细 每次都是获取所有root权限
            
	2. sudo提取部分管理员权限
    	特点:
        	1. 使用普通用户登录,然后sudo命令提取root用户的部分管理权限,注意只是某部分,而不是全部。
            2. 不需要切换到root账户下 
        优点:
        	相对复杂 
        缺点:
        	1. 不需要知道root密码,输入的是用户自己的密码 
            2. 权限控制更为精细 可以控制普通用户只获取部分root权限

2. su-切换用户

# linux中shell可以分两类
	登陆shell,需要输入用户名和密码才能进入Shell,日常接触的最多的一种 
    非登陆shell,不需要输入用户和密码就能进入Shell,比如运行bash会开启一个新的会话窗口
    
# shell的使用方式有两种
	交互式,等待用户输入执行的命令(终端操作,需要不断提示) 
    非交互式,执行shell脚本, 脚本执行结束后shell自动退出
    
# bash shell配置文件介绍
1. 作用
	主要保存用户的工作环境
    
2. 配置文件
	1. 全局配置文件
        /etc/profile
        /etc/profile.d/*.sh 
        /etc/bashrc 
        
	2. 个人配置文件
		~/.bash_profile
    	~/.bashrc
      '''
      profile类文件, 设定环境变量, 登陆前运行的脚本和命令
      bashrc类文件, 设定本地变量, 定义命令别名
      PS: 
          如果全局配置和个人配置产生冲突,以个人配置为准
      '''     
    
3. 配置文件的应用顺序
	1. 如果执行的是登录式shell,那么配置文件执行顺序是
    	/etc/profile 
        	-> /etc/profile.d/*.sh 
        		-> ~/.bash_profile 
        			-> ~/.bashrc 
       					-> /etc/bashrc 
        
    2. 如果执行的是非登录式shell,那么配置文件执行顺序是
    	~/.bashrc
        	-> /etc/bashrc
            	-> /etc/profile.d/*.sh 
                
    PS: 验证使用echo在每行添加一个输出即可,注意,要把输出放在文件的第一行
        
4. 执行登录与非登录shell
	1. 执行登录shell:身份与环境都切换 
    	su - 用户 
        
    2. 执行非登录shell:只切换用户身份 
    	su 用户 
        
    # 注意
    	1. 从root往普通用户下切换无需输入密码,反之则需要 
        2. 切换身份执行命令:su - 用户 -c “命令”

3. sudo-提权

1. 简介

	在日常的运维工作中,我们不应该把root的密码公开给所有人
    因为,一方面,真那样做的话,安全风险就太高了,删库到跑路发生的概率估计会加大
    另外一方面,小伙伴们大多数情况下只需要提取某一些权限来使用即可也并不是需要所全部的管理员权限,所以说sudo比su更为靠谱一些

	通过配置sudo,我们可以实现让普通用户输入自己的密码的情况下而获取我们为其配置的特定权限,这样,既保证了普通用户拥有他想要的特定权限,又不至于泄露管理root的密码

2. 配置

# 两种编辑方式
	1. visudo(会提示语法错误,推荐使用)
    	# 检查配置是否正确
    	[root@lee ~]# visudo -c  
        /etc/sudoers:解析正确
        
    2. vim /etc/sudoers
    	# sudo 语法 
        user MACHINE=COMMANDS 
        
        # 示例
        # root  ALL=(ALL)  ALL
        
        # 说明
        1. root
        	   用户 
        2. ALL
        	   代表用户可以在哪台机器上执行指令,通常设置为ALL
               如果设置为localhost代表在本机上执行指令
               也可以设置为本机以外的其他IP地址或主机名,此时该/etc/sudoers虽然是在本机上配置的
               但用户登录到本机后仍然是无法执行命令的
               如果把/etc/sudoers这个配置文件赋值到指定ip或主机名的那台机器上,就好用了
            
		  配置文件中讲到:
          '''
          Next comes the main part: which users can run what software on 
          which machines (the sudoers file can be shared between multiple systems)
          '''/etc/sudoers文件可以在多个系统之间共享
          如果我们设置成ALL的话就省事了,该文件复制到任意一台机器上的完成的权限配置都一样
            
		3. (All)
        	   表示允许用户以哪个用户的权限做事情
            
        4. ALL
        	   所有命令   
            
        最终解释:root用户可以在所有主机上以任意用户身份执行所有命令 
        
		5. 示例
        	# tom用户在任何机器上,可以以任何用户身份执行任何命令等同于root用户
        	tom ALL=(ALL) ALL  
            
            # 免密
            lili ALL=(ALL) NOPASSWD: ALL  
                
            # 只允许lee用户以root用户的身份执行cp,touch命令    
            lee ALL=(ALL) /bin/cp,/bin/touch 
            
            # !代表取反
            lee01 ALL=(ALL) ALL,!/usr/bin/vim /test/a.txt 
            
            # 可以编辑所有文件,除了/test/a.txt
            lee02 ALL=(ALL) /usr/bin/passwd [a-zA-Z]*,/usr/bin/vim *,
                            !/usr/bin/vim /test/a.txt   
                
            # 测试1
            [root@lee ~]# su - lee02 
            上一次登录:二 1220 11:21:01 CST 2022pts/0[lee02@lee ~]$ sudo vim /test/b.txt
            [lee02@lee ~]$ sudo vim /test/a.txt
            对不起,用户lee02无权以root的身份在lee上执行 /bin/vim /test/a.txt
            
            # 测试2
            [root@lee ~]# su - lee 
            上一次登录:四 910 20:27:09 CST 2020pts/0[lee@lee ~]$ ll -d /etc/ 
            drwxr-xr-x. 146 root root 8192 910 20:27 /etc/ 
            [lee@lee ~]$ touch /etc/a.txt 
            touch: 无法创建"/etc/a.txt": 权限不够
            # 使用sudo提权        
            [egon@egon ~]$ sudo touch /etc/a.txt
            
		6. 总结
        	1. 尊重别人的隐私
            2. 输入前要先考虑(后果和风险)
            3. 权力越大,责任越大
            
		7. sudo 执行流程
        	1. 普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存 
            2. 如果存在则不需要输入密码, 否则需要输入用户与密码 
            3. 输入密码会检测该用户是否拥有该权限 
            4. 如果有则执行,否则报错退出

3. sudo 常用参数

sudo常用参数
	-l
    	登录用户下面,执行sudo -l 显示当前用户有哪些权限 
        
    -k
    	删除/var/db/sudo/下面对应的时间戳的信息,下次执行sudo需要输入当前用户的密码 
        系统默认也是5分钟失效
        配置免密是另一种情况 NOPASSWD: ALL远程sudo(有条件限制的)

4. sudo 实例

企业生产环境用户权限集中管理方案实例
	根据角色的不同,给不同的用户分配不同的角色

1. 创建初级工程师3个,网络工程师1个,中级工程师1个,经理1# 批量创建用户  
for user in chuji{01..03} net01 senior01 manager01
> do 
> useradd $user
> echo "111111"|passwd --stdin $user 
> done

2. 创建5个开发人员,属于phpers组
groupadd -g 999 phpers 
for n in `seq 5` 
do 
	useradd -g phpers php0$n 
done

3. 创建开发经理,中级phper
for user in kaifaManager seniorPhper 
> do 
> useradd $user 
> echo "111111"|passwd --stdin $user 
> done

4. 编辑配置文件
[root@localhost ~]# vim /etc/sudoers 
########################Cmnd_Alias By FTL ################################### 
Cmnd_Alias CY_CMD_1=/usr/bin/free, /usr/bin/iostat,/usr/bin/top, /bin/hostname, 
/sbin/ifconfig, /bin/netstat, /sbin/route Cmnd_Alias GY_CMD_1=/usr/bin/free, 
/usr/bin/iostat,/usr/bin/top, /bin/hostname, /sbin/ifconfig, /bin/netstat, /sbin/route, 
/sbin/iptables, /etc/init.d/network, /bin/nice, /bin/kill, /usr/bin/kill, 
/usr/bin/killall, /bin/rpm, /usr/bin/updatedb, /usr/bin/yum, /sbin/fdisk, /sbin/sfdisk,
/sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount Cmnd_Alias CK_CMD_1=/usr/bin/tail, 
/bin/grep, /var/log/messages* Cmnd_Alias GK_CMD_1=/sbin/service, /sbin/chkconfig, 
/bin/tail, /var/log/*, /bin/grep, /bin/cat, /bin/ls, /bin/sh Cmnd_Alias GW_CMD_1= 
/sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
/sbin/iwconfig, /sbin/mii-tool, /bin/cat, /var/log/*

########################User Aliases By FTL ###################################
User_Alias CHUJI_YUNWEI_ADMINS=chuji01,chuji02,chuji03 
User_Alias CHUJI_KAIFA_ADMINS=php01,php02,php03,php04,php05 
User_Alias GAOJI_WANG_ADMINS=net01

########################Runas_Alias By FTL ###################################
Runas_Alias OP = root -->未来切换到某个角色执行任务

########################Config By FTL ###################################
senior01   ALL=(OP)   GY_CMD_1 
manager01  ALL=(ALL)  NOPASSWD:ALL 
kaifaManager ALL=(ALL) ALL, /usr/bin/passwd [A-Za-z], !/usr/bin/passwd
root, !/usr/sbin/visudo, !/usr/bin/vi *sudoer*, !/usr/bin/sudo su -, !/bin/su
seniorPhper ALL=(OP) GK_CMD_1 
CHUJI_YUNWEI_ADMINS ALL=(OP) CY_CMD_1 
CHUJI_KAIFA_ADMINS ALL=(OP) CK_CMD_1 
GAOJI_WANG_ADMINS ALL=(OP) GW_CMD_1

'''
注意点
    1. 命令的路径要全路径 
    2. 别名需要大写 
    3. 超过一行,用"\"换行 
    4. 排除的命令一定在最后面写 
    5. kaifaManager 因为有ALL,所以可以直接su - 切换root,但是 sudo su -切换不了
'''
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I believe I can fly~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值