Original:http://fosswire.com/2008/02/03/sudo-vs-su/
Original written by Jacob
你可能已经见过这两个命令中的一个。Ubuntu用户对sudo更加熟悉一点,与此同时SUSE,Fedora和Debian用户更加常用su命令。到底两个命令的区别是什么呢?
两个命令都允许你得到root权限。两者的区别在于如何获得这个权限。
su
su(译者注:switch user的缩写,有的地方也被看作是substitute user的缩写)用于以其他用户的身份来打开一个shell或者登录界面。当该命令不加任何参数运行时,su命令将假设你想成为root。当运行该命令时,你将被提示输入密码。输入的密码即你想切换到的用户的密码。例如,如果我想成为root,在终端中运行su,我将需要输入root用户的密码。如果我运行su bill,我将需要输入bill的密码。
当一个密码输入后,就像你用被su的用户名登录一样,一个新的shell将出现。你从中运行的任何命令将被认为是来自被su的用户。
sudo
在一个Ubuntu系统上,直接运行su以成为root的做法将得不到任何结果。因为默认状态下root用户的并没有一个可用的密码,因此你也就不能输入一个密码来获得权限。这种情况下sudo就有了用武之地了。sudo命令允许你以其他用户的身份运行一条命令(通常是root用户)。
其中主要的不同就是你需要输入的密码是你自己帐户的密码,而不是其他用户的。这将允许一个系统上的多个管理员不用共享一个密码。当运行sudo -s时,一个root权限的shell将被打开,与运行su的效果一样。
Combining the Two
在绝大多数情况下,su在任何系统上都存在,即使它不能被直接使用。sudo,与之不同,通常只存在于Debian或者它的衍生发行版上。正因为如此,我们可以在一个Ubuntu系统上做些小伎俩:
sudo su #与sudo -s的效果相同
在以上例子中,用sudo命令获得root权限,因此su命令是在root用户的权限下运行的。这样su命令将不需要输入密码(译者注:这里的意思是,在运行sudo su命令时,输入的密码不是su命令需要的root密码,而是sudo命令需要的当前用户的密码),这也可以作为一个sudo -s的替代。
再举个例子:
sudo su bill #与sudo -s -u bill的效果相同
该命令将以用户bill的身份获得一个shell。再次说明一下,这里只需要输入你自己的密码。
sudo和su的使用还有很多小技巧,剩下的就该让你自己去发现了。
如果你喜欢这篇日志的话,欢迎订阅我的RSS Feed!
本文来源于一阁Blog。版权所有,转载请确保已阅读该页面。


我还是没搞懂……没看你的文章之前我一直以为ubuntu是通过将root用户的密码设成和第一个用户一样的密码的。如果每个人都可以通过sudo和自己的密码来执行root帐户的权限,这样岂不是很不安全?
sudo可以设置成需要root用户密码才能执行程序,在手册中可以查到。但是这样就失去了sudo的意义了。
至于sudo的实际作用,是通过设置用户的gid和uid来使用户执行特定权限的程序的,曾经看到过一篇文章讲解这个,不过现在有点记不清了……
找到了。你可以尝试下id -u命令和sudo id -u命令。sudo命令通过临时修改用户的uid使用户能够执行某些需要root权限的程序。
另外,sudoers文件中可以指定sudo可以执行的程序的名字,可以设置某些重要的命令不能通过sudo执行,具体可以看man sudoers
thx