权限管理-su与sudo
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权限
二 、su切换用户
2.1 储备知识
linux中shell可以分两类
登录shell,需要输入用户名和密码才能进入shell,日常接触的最多的一种
非登录shell,不需要输入用户和密码就能进入shell,比如运行bash会开启一个新的会话窗口
shell的使用方式有两种
交互式,等待用户输入执行的命令(终端操作,需要不断提示)
非交互式,执行shell脚本,脚本执行结束后shell自动推出
bash shell配置文件介绍(文件主要保存用户的工作环境)
全局配置文件:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置文件:
~/.bash_profile
~/.bashrc
profile类文件,设定化境变量,登陆前运行的脚本和命令
bashrc类文件,设定本地变量,定义命令别名
ps:如果全局配置和个人配置产生冲突,以个人配置为准
配置文件的应用顺序
如果执行的是登陆时shell,那么配置文件执行顺序是:
/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc
如果执行的是非登陆时shell,那么配置文件执行顺序是:
~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh
ps:验证使用echo在每行添加一个输出即可,注意,要把输出放在文件的第一行
执行登录与非登录shell
执行登录shell: 身份与环境都切换
su - 永华
执行非登录shell: 指切换用户身份
补充:
1、从root往普通用户下切换无需输入密码,反之则需要
2、切换身份执行命令: su - 用户 -c '命令'
三、sudo提权
在日常的运维工作中,我们不应该把root的密码公开给所有人,因为,一方面,真那样做的话,安全风险就太高了,删库到跑路发生的概率估计会加大,另外一方面,小伙伴们大多数情况下只需要提取某一些权限来使用即可也并不是需要所全部的管理员权限,所以说sudo比su更为靠谱一些。
通过配置sudo,我们可以实现让普通用户输入自己的密码的情况下而获取我们为其配置的特定权限,这样,既保证了普通用户拥有他想要的特定权限,又不至于泄露管理root的密码。
3.1 配置
两种编辑方式
3.1.1 visudo (会提示语法错误,推荐使用)
visudo -c 检查配置是否正确
3.1.2 vim /etc/sudoers
sudo 语法
# 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用户可以在所有主机上以任意用户身份执行所有命令
tom ALL=(ALL) ALL tom用户在任何机器上,可以以任何用户身份执行任何命令,等同于root用户
lili ALL=(ALL) NOPASSWD:ALL 免密
egon ALL=(ALL) /bin/cp,/bin/touch 只允许egon用户以root身份执行,cp,touch命令
egon01 ALL=(ALL) ALL,!/user/bin/vim/test/a.txt # !代表取反
egon02 ALL=(ALL) /user/bin/passwd [a-zA-Z]*,/user/bin/vim *,!/user/bin/vim/test/a.txt #可以编辑所有文件,除了/test/a.txt
# 可以测试
[root@egon ~]# su - egon02
[egon02@egon ~]$ sudo vim /test/b.txt
对不起,用户 egon02 无权以 root 的身份在 egon 上执行 /bin/vim /test/a.txt。
测试
su - egon
ll -d /etc/
drwxr-xr-x. 146 root root 8192 9月 10 20:27 /etc/
touch: 无法创建"/etc/a.txt": 权限不够
sudo touch /etc/