一、用户身份切换
Linux系统中root用户具有超级管理员的权限,由于权限较大,稍不注意可能造成安全隐患,所以在工作中一般的使用普通用户来完成一些工作,但是如果涉及到的任务需要root用户的权限又该如何呢?
此时,可以使用两个重要的命令即su和sudo命令。
二、su命令
(一)介绍
su命令是用户身份切换的命令,假如当前如果是普通用户,但是需要root权限来完成某件工作时,你可以选择退出当前用户,重新以root用户登录;另一种方式就是无需重新登陆只需要使用su命令进行切换即可。
超级用户向普通用户切换时无需密码验证,当时普通用户向超级用户或者普通用户都需要密码验证。su命令的使用可以通过man su查看详细用法,下面是重要的参数说明:
参数选项 | 说明 |
-l,--login | 登录shell设置 |
-c,--command | 在一个shell下执行一个命令 |
-m,--preserve-environment | 切换用户时,不重置用户环境变量 |
-s,--shell=SHELL | 如果/etc/shells允许,则运行指定的shell |
su命令比较常用的是"-"和“-c”参数,其中“-”参数是切换用户后将其环境变量带过来,避免环境变量不一致的情况,"-c"参数上面已经详细说明了。
[root@localhost ~]# su - xiaoshen -c ls -l /project
(二)实例
1、用户切换
su命令切用户用户后,如果不加任何参数,这样并没有改变用户的登陆环境,所以需要使用“su -”。
[root@localhost ~]# who am i root pts/0 2021-01-02 10:34 (192.168.159.1) [root@localhost ~]# su - xiaoshen Last login: Sat Jan 2 10:44:57 CST 2021 on pts/0
如果普通用户进行切换时需要使用密码:
su: Authentication failure [xiaoshen@localhost ~]$ su - Password: Last login: Sat Jan 2 10:34:18 CST 2021 from 192.168.159.1 on pts/0 Last failed login: Sat Jan 2 12:12:44 CST 2021 on pts/0 There was 1 failed login attempt since the last successful login.
2、普通用户执行服务
为了安全起见一般以普通用户来启动服务,所以一般可以在服务器启动时执行对应的脚本即可,在/etc.rc.local文件中设置:
# 分用户方案启动服务 su -xiaoshen -c '/bin/sh /project/script/run.sh'
(三)su命令优缺点
使用改命令确实操作方便,但是同时也会带来一些问题,如果过多的人同时切换到root,并且如果有一个人由于个人的失误,如修改密码等,将会造成其他人无法正常使用。所以此时可以使用sudo命令来解决。
这样超级用户的密码掌握在少数管理员的手中,通过sudo来实现其他人对高级别权限的需求。
三、sudo命令
sudo命令用来解决超级用户滥用,而且能让普通用户拥有一定的超级权限来管理系统。它的运行流程如下:
其中时间戳的位置位于/var/db/sudo目录下:
[root@localhost ~]# ll /var/db/sudo/ total 0 drwx------. 2 root test 15 Oct 13 21:20 test
sudo比较重要的是它的配置文件/etc/sudoers,通过visudo工具来完成sudo的配置,使用这个工具会在添加规则后自动检查语法是否正确。当授权成功后可以切换到被授权的用户下通过sudo -l命令查看那些超级权限命令是被分配的。
/etc/sudoers配置文件中的每一行就是一个规则,前面带#号的为注释说明内容,规则超过一行使用""续行。
/etc/sudoers的规则分为两类:
- 别名定义
- 授权规则
下面是主要的别名定义,通过visudo可以查看配置文件:
# 定义主机别名,在定义授权规则时可以使用ALL来匹配所有的的主机 ## Host Aliases ## Groups of machines. You may prefer to use hostnames (perhaps using ## wildcards for entire domains) or IP addresses instead. # Host_Alias FILESERVERS = fs1, fs2 # Host_Alias MAILSERVERS = smtp, smtp2 #定义用户别名,别名成员可以是用户、用户组(用户组前加%) ## User Aliases ## These aren't often necessary, as you can use regular groups ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname ## rather than USERALIAS # User_Alias ADMINS = jsmith, mikem #命令别名就是定义一个包含一堆命令的别名,即一组相关命令的集合 ## Command Aliases ## These are groups of related commands... ...
上述别名在系统中有多个用户,并且用户需要进行分组管理,给予不同的权限时可以使用。对于授权,加入test用户授予与root用户相同的权限:
## Allow root to run any commands anywhere root ALL=(ALL) ALL test ALL=(ALL) NOPASSWD:ALL