visudo
在配置文件/etc/sudoers中,有一个User_Alias 功能,它可以虚拟一个用户组,然后针对虚拟的用户组来进行权限的控制。现在我们的需求是,指定某些普通用户(例如user1, user2) 使其拥有所有命令的root权限,如何操作呢?
vim /etc/sudoers 加入如下内容:
User_Alias ADMINS = user1, user2
ADMINS ALL=(ALL) ALL
用户 (从哪里登录,允许所有IP)=(用户可以使用哪个用户的命令,以哪个用户的身份去执行) 所有命令都可以用(NOPASSWD:不需要输入密码)
sudo -l
注意,是增加这两行,并不是替换掉原来的内容。
这样,user1, user2 就拥有了所有命令的root权限。那么切换到root,也是没有问题的。
sudo su - root
这样,只需要输入普通用户自己的密码就可以切换到root的身份了。其实,你还可以更简单点:
sudo su
这样,只有第一次使用sudo时,需要输入用户本身的密码,以后就免了。
另外,我们也可以取消这个输入密码的步骤,只需把上边的
"ADMINS ALL=(ALL) ALL"
改成
"ADMINS ALL=(ALL) NOPASSWD: ALL"
保存这个/etc/sudoers的时候,会出提示该文件只读,你只要在保存退出的时候加一个叹号即可。
su - -c "echo $PATH"(以xuan这个用户去执行这条命令) xuan(用户)
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。
其实,还有几个类似的用法:
sudo /bin/bash : 这个命令也会切换到root的bash下,但不能完全拥有root的所有环境变量,比如PATH,可以拥有root用户的权限。这个命令和 sudo -s 是等同的。
sudo -s : 如上
sudo su : 这个命令,也是登录到了root,但是并没有切换root的环境变量,比如PATH。
sudo su - : 这个命令,纯粹的切换到root环境下,可以这样理解,先是切换到了root身份,然后又以root身份执行了 su - ,这个时候跟使用root登录没有什么区别。这个结果貌似跟sudo -i 的效果是一样的,但是也有不同,sudo 只是临时拥有了root的权限,而su则是使用root账号登录了linux系统。
所以,我们再来总结一下:
sudo su - 约等于 sudo -i
sudo -s 完全等于 sudo /bin/bash 约等于 sudo su
sudo 终究被一个"临时权限的帽子"扣住,不能等价于纯粹的登录到系统里。