用户切换
su命令
su就是切换用户身份的命令。通过su命令可以在用户之间切换,超级权限用户root向普通或虚拟用户切换不需要密码验证。其他普通用户之间或者普通用户切换到root,都需要切换用户的密码验证。
su语法
su [选项参数] [用户]
参数选项 | 说明 |
---|---|
-,-l,–login | 使一个shell成为登录的shell,如执行su - Ian时,表示该用户想改变身份为Ian,并且使用Ian用户的环境变量配置如:/home/Ian/.bash_profile等 |
-c,–command | 切换到一个shell下,执行一个命令,然后退出所切换的用户环境 |
实例
1.-c参数的运用。在root下,以Lisa身份创建一个文件。
2.如何让系统在每一次开机时也要以普通用户启动指定的服务脚本呢?
把要执行的脚本放入开机自启动配置文件/etc/rc.local中。通过su - 用户 -c “命令”执行启动服务的命令。
[root@ianLinux ~]# tail -5 /etc/rc.local
## 分用户方案启动服务命令
su - Lisa -c "/bin/sh /home/Lisa/bin/deploy.sh"
/bin/sh /home/Lisa/bin/deploy.sh就是仅能在Lisa用户下启动的服务命令脚本。
su命令总结
- 普通用户切换到root用户,可使用su -或su - root。必须输入root的密码才能完成切换。
- root用户切换到普通用户,可使用su - 普通用户名,不需要任何密码就能完成切换。切换到普通用户后,在执行一些命令如ifconfig时,可能会遭遇到环境变量PATH路径问题而找不到某个系统命令(一般是/sbin,/usr/sbin等下面的命令),这时就需要将普通用户的PATH,配置成root的PATH内容。
- 如果仅希望以某个用户的角色执行命令而不直接切换到该用户下操作,可以使用su - 用户名 -c “命令”的方式。
sudo命令
sudo以root身份执行普通用户无法执行的任务。
sudo命令执行的流程
- 当用sudo执行命令时,系统会首先查找/var/run/sudo/%HOME(或者是/var/db/sudo/%HOME)目录中是否有用户时间戳文件,如果时间戳文件过期,则提示用户是否输入自身的密码。
- 当密码验证成功后,系统会查找.etc/sudoers配置文件,判断用户是否有执行相应sudo命令权限。
- 如果具备执行相应sudo命令权限,就会自动由当前用户切换到root,然后以root身份执行该命令。
- 执行完成后,又会自动的直接退回到当前用户shell下。
验证:
visudo
一开始/var/db/sudo/Lisa/是没有时间戳的。
在删除时需要输入当前用户密码,验证密码正确后,检查/etc/sudoers配置文件里是否存在执行相关命令的权限,如果有,执行并返回结果。
删除后就有时间戳了,而且5分钟内再次删除时不需要输入密码。
时间戳
这是/etc/sudoers配置文件里不存在执行相关命令的权限情况,直接退出sudo。
sudo语法
sudo [参数选项] 命令
参数选项 | 说明 |
---|---|
-l | 列出用户在主机上可用的和被禁止的命令。当配置好sudo授权规则后,可用这个参数来查看授权情况 |
-k | 同-K。删除时间戳,下一个sudo命令要求提供密码,前提是该用户授权中不能有NOPASSWD:参数。时间戳默认5分钟也会失效 |
[Lisa@ianLinux ~]$ sudo -l
[sudo] password for Lisa:
...
用户 Lisa 可以在该主机上运行以下命令:
(ALL) /bin/rm
[Lisa@ianLinux ~]$
visudo
visudo修改/etc/sudoers配置文件,给用户进行授权。visudo -c能检查语法。
文件权限440。
如果这个配置文件里面语法错了,或者权限改变了,sudo就不能用了。
如何利用sudo控制用户对系统命令的使用权限。
su与sudo
切换用户身份的su命令为我们管理linux系统带来了很多方便,通过切换到root下,可以完成各种系统管理工作,只要任何一个普通用户知道了root用户的密码,都能以普通用户的身份切换到root来完成本来无法完成的系统管理的工作。
但是这样通过su命令切换到root后,也带来了安全管理问题。系统有多个普通用户,都可以通过su切换到root身份进行系统管理,甚至还可以改掉root密码,让其他的普通用户无法再实现系统管理。这样的非集权式管理,在一定程度上就对系统的安全造成了较大的威胁。
我们既希望超级用户root密码掌握在少数或唯一的管理员手上,又希望多个系统管理员能够完成更复杂的系统管理的工作,即希望多个系统管理员都能管理系统而又不让超级权限泛滥。这就需要sudo命令来代替su命令了。