说明:本文仅供学习交流,转载请标明出处,欢迎转载!
区别:
$su user==>需要输入user的密码;
$sudo -u user cmd==>需要输入$前那个用户的密码。
下面就详细谈谈su与sudo的详细用法!
1.su 用法
su 选项 user
选项:
-l:login的缩写,表示以login-shell方式切换到user;
-c cmd:切换用户后执行cmd.
注意:$su - 等价于 su root,以login-shell切换,即连同环境变量一块切换;
$su 以no-login shell 切换。
exit:还原用户最近一次切换前的角色。
举例:
$ su root -c 'ls'
#who am i //查询登录用户名
#whoami //查询当前切换后的用户
#exit //跳出当前用户
很明显,su的致命缺点在于需要输入的密码是待切换用户的密码,例如$su root,需要输入root的密码,这样很不实际。root需要被动地将密码告诉$对应的用户,不好吧!所以,root需要变被动为主动,这个时候就采用sudo吧!sudo使得root可以指定若干用户能够切换到其他用户,而且仅需要输入$自己的密码。
2.sudo 用法
sudo 选项 cmd
选项:
-u:后接待切换的用户名,默认为root。
说明:
(1)不是所有的用户都具有sudo的执行权,只有/etc/sudoers存在的用户才能使用sudo命令;
(2)sudo要求输入的原密码为$对应的用户密码;
如何使得$用户具有sudo命令的使用权呢?加入当前的用户为House,需要切换到root。
方法一:修改/etc/sudoers中的ALL=...相应的行。
$su root
#visudo //用于编辑/etc/sudoers中的内容
进入/etc/sudoers中,按[esp]进入命令行模式,输入/ALL=[enter],然后找到root ALL=(ALL) ALL,输入yy(复制本行),接着输入p(将复制的内容粘贴到下一行),然后将root改为House。使得内容为:House ALL=(ALL) ALL。其中House表示可以使用sudo命令的用户,第一个ALL表示可以指定客户机(即该账号是由哪一台网络主机连接过来的),当其为root表示可以对应网络中的任意主机。第二个(ALL)用户指定可以切换的用户,第三个ALL位置记录的内容为可执行的命令。
方法二:修改/etc/sudoers中的#%wheel,名将House加入到组wheel中。
#visudo
找到#%wheel,并将#去掉后,输入:wq,保存后退出文件。
#usermod -aG wheel House //将House加入到组wheel中
-a:表示以追加的方式将wheel加入到groups(House)中。
最后,再次说明下su和sudo的主要区别:su需输入切换后的用户的密码,而sudo需要输入的是$对应用户的密码。值得一提的是,我们可以重复利用两个的有点,将su和sudo联合起来使用。
例如:$sudo su Tom //将House切换为Tom,同时要求输入House的密码。
$sudo su //将House切换为root,同时要求将输入House的密码。