2019年6月15日 星期六

Unix 工作环境下 以超级用户工作:su & 以超级用户执行一条单独命令:sudo

1. 超级用户: su
为了保证系统安全Unix被设计成为每个用户标识拥有一组有限的权限。例如,您可以删除自己的文件,但不能删除其他人的文件,除非他人已授予您明确的权限。同理,作为一名普通用户,您不能修改或者运行影响系统整体性的程序。
有时候,为了获得超出普通用户所拥有的权限,系统管理员有必要以超级用户的身份登录。例如,系统管理员可能需要在系统中添加一个新用户、修改某人的口令、升级、或者安装软件等。

Unix系统中有一个特殊的用户标识root,它就拥有这样的权限。当您以root登录时,您可以做您想做的任何事情(很明显,root的口令是一个非常重要的秘密)。
如果您使用的是一个共享系统,那么会有人负责系统的管理,例如学校或者单位的系统,因此您不要担心。例如,您如果忘记了自己的口令,可以请求他人帮忙。但是,当您使用自己的Unix系统时,例如一台运行Linux或者FreeBSD的PC,您自己就是系统管理员,因此您必须知道怎样以超级用户的身份工作。
为了成为超级用户,您需要超级用户的口令(通常称为root口令)。如果在自己的计算机上安装Unix系统,那么在安装过程中系统将要求您选择root口令。
一旦知道了root口令,有两种方法可以成为超级用户。第一种,在登录提示处,您可以以root登录。当系统初次启动或者使用虚拟控制台时,您可以以root登录。
另外一种,如果您已经作为一名普通用户登录系统,那么您可以使用su(substitute userid,替换用户标识)变成超级用户。
su命令允许您临时变成另一个用户标识。为此,只需要在 su命令后输入新的用户标识即可。下面举例说明。
假设您现在已经以harley登录系统,下面是一种可能的shell提示:

[Harley]$ su weedly
password:
[weedly]$

当您结束weedly的工作时,您需要做的就是结束当前的shell。输入exit命令就可以结束当前shell。一旦结束了新shell,您就会自动返回原来的shell,即用户标识harley。

[weedly]$ exit
[Harley]$
尽管你可以使用su命令变换到任何一个用户标识(如果拥有口令的话),但是su名令的主要用途还是变换到超级用户。在详细介绍之前,先解释一下面一件的事情。
无论何时,当你登录时,Unix都会运行一些特定的命令为您的用户标识建立一个具体的环境。假设您以harley登录后,输入了下述命令:

su weedly
您将用户标识变换成weedly,但是仍然在Harley的环境下工作。如果希望同时变换用户标识和环境,则需要在su命令之后键入-(连字符)。注意,连字符的两边都有一个空格。

su - weedly
现在您在weedly的环境中以weedly的名义工作了。当您输入exit命令时,将返回到harley环境中以harley的名义工作 。
这听起来有点神秘,但是,总有一天,他的价值会体现出来。现在之所以提它是因为我准备向您示范如何使用su命令变换超级用户。当您这样做时,您要在超级用户的环境中工作,而不是在自己的环境中工作,这一点很重要。
为了变换超级用户,需要使用命令su,后面跟用户标识root。记住不要落下连字符。

su - root
现在系统向你询问一个口令。一旦您输入了口令,当前shell将被挂起,系统将启动一个人新的shell。在新的shell中,您的用户标识将是root,而且您将拥有完全的超级用户权限。
[Harley]$ su - root
password:
#


注意shell提示符已经变成了#。这表示您已经成为超级用户。
当您结束需要成为超级用户才能完成的工作时,键入exit命令,您将返回到自己的旧shell中:

# exit
[Harley]$
为了方便起见,如果su命令没有指定用户标识,那么默认的用户标识是root,大多数时候您需要的就是这种方式。因此,下述两个命令是等效的。

su -
su - root

重要提示
当以root登录时,您可以做任何想做的事情,但是这样可能导致错误,防止偶尔产生问题(或者灾难)的最好方法就是只在必要时临时以超级用户登录。
换句话说,就是在大多数时间里要做Clark Kent,而不是超人Superman.
2. su & sudo 的区别
su (substitute userid)命令允许你变换到另一个用户标识。sudo(substitute the userid and do something)命令允许您以令一个用户标识的名义执行一条单独的命令。
名称su的发音是两个单独的字母“ess-you”,而名称sudo听起来像“pseudo”。实际上,刚开始听人说sudo时,您可能会迷惑,因为听起来好像在说“pseudo”。
susudo的使用时一种习惯,不仅可以作为名称,还可以作为动词。例如,我们偷偷来来听一下两个喝多了酒的Unix人士的谈话。
人物1:“i have an idea. Let's edit the password file just for fun. All we have to do is pseudo the vipw command” (我有一个主意,让我们
为了好玩编辑一下口令文件吧。我们需要做的就是使用sudo执行view命令。)
人物2:“Ahh, that's too lame. Let's ess-you instead. I like to live dangerously. (哈哈,那也太差劲了。我们还是使用su吧。 我喜欢冒险的生活。)”

3. 超级用户执行一条命令:sudo
作为超级用户的时间太久会非常危险:您可能不小心键入了导致故障的内容。另外还有一个潜在的问题。假如以root登录后,您碰巧觉得饿了。然后你离开了计算机,准备去拿一些热奶油细麦粉蛋糕。当您回来时,发现在您离开时,有一个聪明但是家伙获得对您机器的控制。充当超级用户删除了数百个文件。
当然,无论以什么用户标识登录,您都不应该离开自己的计算机。这就像离开自己没有上锁的汽车,并将钥匙藏在座位下面一样。但是,以root登录时离开自己的计算机,就好比离开自己没有上锁的汽车时,发动机发动着,而且门还开着。
防范这些不经意间错误的最好方法就是使用sudo命令。
sudo命令允许您以另一个用户标识执行一条单独的命令(命令sudo的意思是“替换当前用户标识,然后做一些事情”)。和su的命令一样,sudo命令默认的用户标识为root。因此,为了超级用户执行一条具体命令,只需键入sudo,后面跟着这条命令即可:

sudo command

例如,为了以root用户标识执行id命令,可以输入:

sudo id

(id命令显示您的当前用户标识。)
当您是使用sudo以root用户标识执行命令时,系统将要求您输入您的口令(不是超级用户的口令)。
作为超级用户,您可以运行任何自己希望的命令。下面举一个简单的例子,示范当您以root用户标示运行id命令时用户标识如何发生变换。不用担心您现在还不能理解全部输出。我希望您注意的是用户标识的名称(uid)如何变化。

[harley]$ I'd

uid=500 (harley) gid=500 (harley) groups=500 (harley)
[harley]$ sudo id
Password:
uid=0 (root) gid=0 (root) groups=0 (root)

为了方便起见,一旦您正确输入了超级用户口令,就可以在一定时间内不必再次输入口令而运行sudo命令。大多数系统的默认时间是5分钟,不过这一时间也可能发生变化。这意味着,如果您在5分钟之内使用sudo不止一次,那么您只需输入一次口令。


沒有留言:

張貼留言