因为root用户的权限太大,破坏力太强,安全风险极高,所以通常情况下公司的服务器对外都是禁止root用户直接登录的,而运维组的小伙伴通常使用的都是普通用户,但是运维组内的小伙伴们在进行日常运维管理的过程中,经常需要获得某些root才有的管理权限才能完成任务,例如需要执行/sbin目录下的命令。
那么如何才能在不使用root用户直接登录操作系统的同时又能保证普通用户完成日常工作呢,有两种方案
| 特点:使用普通用户登录,然后使用su命令切换到root账户下 |
| 优点:简单粗暴 |
| 缺点: |
| 1、需要知道root密码 |
| 2、权限控制不精细:每次都是获取所有root权限 |
| 特点: |
| 1、使用普通用户登录,然后sudo命令提取root用户的部分管理权限,注意只是某部分,而不是全部。 |
| 2、不需要切换到root账户下 |
| |
| 缺点:相对复杂 |
| 优点: |
| 1、不需要知道root密码,输入的是用户自己的密码 |
| 2、权限控制更为精细:可以控制普通用户只获取部分root权限 |
在linux系统中
登录shell进入形式:通过账号密码登录系统、或su – egon、或ssh远程登录
加载的配置文件顺序如下
| # 1、/etc/profile |
| # 2、/etc/profile.d/*.sh |
| |
| # 3、如果是centos9.3,在这里会多加载一次/etc/bashrc |
| |
| # 4、~/.bash_profile |
| # 5、~/.bashrc |
| |
| # 6、/etc/bashrc |
在非登录shell即su egon时,加载配置文件
补充:
| profile类文件, 设定环境变量, 登陆前运行的脚本和命令。 |
| |
| bashrc类文件, 设定本地变量, 定义命令别名 |
| |
| PS: 如果全局配置和个人配置产生冲突,以个人配置为准。 |
补充
在日常的运维工作中,我们不应该把root的密码公开给所有人,因为,一方面,真那样做的话,安全风险就太高了,删库到跑路发生的概率估计会加大,另外一方面,小伙伴们大多数情况下只需要提取某一些权限来使用即可也并不是需要所全部的管理员权限,所以说sudo比su更为靠谱一些。
通过配置sudo,我们可以实现让普通用户输入自己的密码的情况下而获取我们为其配置的特定权限,这样,既保证了普通用户拥有他想要的特定权限,又不至于泄露管理root的密码。
两种编辑方式
| [root@egon ~] |
| /etc/sudoers:解析正确 |
| [root@egon ~] |
| |
| user MACHINE=COMMANDS |
| |
| |
| |
| 1、root:用户 |
| 2、ALL:代表用户可以在哪台机器上执行指令,通常设置为ALL,如果设置为localhost代表在本机上执行指令。 |
| 也可以设置为本机以外的其他IP地址或主机名,此时该/etc/sudoers虽然是在本机上配置的,但用户登录到本机 |
| 后仍然是无法执行命令的,如果把/etc/sudoers这个配置文件复制到指定ip或主机名的那台机器上,就好用了 |
| 配置文件中讲到: |
| |
| |
| |
| 即/etc/sudoers文件可以在多个系统之间共享,如果我们设置成ALL的话就省事了,该文件复制到人任意一台机器 |
| 上的完成的权限配置都一样 |
| |
| 3、(All):表示允许用户以哪个用户的权限做事情 |
| 4、ALL:所有命令 |
| |
| 最终解释:root用户可以在所有主机上以任意用户身份执行所有命令 |
| |
| %xxx ALL=(ALL:ALL) ALL |
| 含义:xxx 组中的用户,可以在所有主机上以所有用户和组执行所有命令。 |
| |
| tom ALL=(ALL) ALL |
| lili ALL=(ALL) NOPASSWD: ALL |
| egon ALL=(ALL) /bin/cp,/bin/touch |
| |
| egon01 ALL=(ALL) ALL,!/usr/bin/vim /test/a.txt |
| egon02 ALL=(ALL) /usr/bin/passwd [a-zA-Z]*,/usr/bin/vim *,!/usr/bin/vim /test/a.txt |
| |
| |
| [root@egon ~] |
| 上一次登录:二 12月 20 11:21:01 CST 2022pts/0 上 |
| [egon02@egon ~]$ |
| [egon02@egon ~]$ sudo vim /test/b.txt |
| [egon02@egon ~]$ sudo vim /test/a.txt |
| 对不起,用户 egon02 无权以 root 的身份在 egon 上执行 /bin/vim /test/a.txt。 |
| [egon02@egon ~]$ |
测试
| [root@egon ~] |
| 上一次登录:四 9月 10 20:27:09 CST 2020pts/0 上 |
| [egon@egon ~]$ ll -d /etc/ |
| drwxr-xr-x. 146 root root 8192 9月 10 20:27 /etc/ |
| [egon@egon ~]$ touch /etc/a.txt |
| touch: 无法创建"/etc/a.txt": 权限不够 |
| [egon@egon ~]$ sudo touch /etc/a.txt |
| |
| 我们信任您已经从系统管理员那里了解了日常注意事项。 |
| 总结起来无外乎这三点: |
| |
| |
| |
| |
| |
| [sudo] egon 的密码: |
| [egon@egon ~]$ ll /etc/a.txt |
| -rw-r--r-- 1 root root 0 9月 10 20:28 /etc/a.txt |
| |
| ps: sudo 执行流程 |
| 1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存 |
| |
| 2.如果存在则不需要输入密码, 否则需要输入用户与密码 |
| |
| 3.输入密码会检测是否该用户是否拥有该权限 |
| |
| 4.如果有则执行,否则报错退出 |
| sudo常用参数: |
| -l : 登录用户下面,执行sudo -l 显示当前用户有哪些权限 |
| -k :删除/var/db/sudo/下面对应的时间戳的信息,下次执行sudo需要输入当前用户的密码 |
| --> 系统默认也是5分钟失效 |
| --> 配置免密是另一种情况 NOPASSWD: ALL远程sudo(有条件限制的) |
其他配置详见配置文件
企业生产环境用户权限集中管理方案实例