运行具有超级用户权限的命令通常有两种情况:(1)你同时拥有了一个超级用户帐号(root帐号启用)和一个常规用户帐号;(2)你不是一个常规用户但是并没有超级用户的权限(这种情况经常发生在大型多用户网络中的初级和中高级系统管理员身上)。下面我们分别来看下这两种情况:
(1)su命令短暂的更改用户身份
这种情况需要启用超级用户帐号(Ubuntu系统中是默认禁用超级用户帐号的)。启用root账号时,可使用sudo passwd命令。之后你就可以使用su命令进入root用户。
su命令的使用格式如下:
su option username arguments
单独使用su命令,你变成root用户,但是仍然保留你原来的常规用户的环境变量,你的当前目录也不会变化。
你使用su -命令,你变成root用户,并且继承了root用户的环境变量
想要变成其他用户,需要在命令行中指定用户名:su – other_user
如果要回到你原来的用户身份,使用exit命令。
当你想要某些用户能够执行需要超级用户权限的命令时,你告诉他们root用户的密码,他们就可以使用su命令进入root用户,执行相应的命令。
(2)sudo命令授予超级用户权限
sudo是和命令结合使用的。sudo命令的使用格式如下:
sudo command
当你输入上面的命令时,sudo会检查/etc/sudoers文件查看该用户是否被授权可以获得超级用户权限。如果可以的话,该用户会被提示输入这个用户的密码,然后命令会被执行,就好像是root用户执行命令一样。Ubuntu的默认设置时,15分钟内再使用sudo命令时,不要再次输入密码。如果一个没有被授权的用户使用sudo命令时,这个记录会被保存在系统日志中,并通知给超级用户。
有三个和sudo相关的man页面:sudo,sudoers,visudo。第一个主要是关于sudo命令本身,第二个是关于/etc/sudoers文件,第三个是使用文本编辑器编辑/etc/sudoers文件。你需要使用特殊的编辑命令因为它会检查文件的parse错误,并同时将文件锁起来防止其他人编辑。visudo命令使用vi编辑器。
/etc/sudoers文件如下所示:
#
#This file MUST be edited with the 'visudo' command as root.
#
#Please consider adding local content in /etc/sudoers.d/ instead of
#directly modifying this file.
#
#See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
#Host alias specification
#User alias specification
#Cmnd alias specification
#User privilege specification
root ALL=(ALL:ALL) ALL
#Members of the admin group may gain root privileges
%adminALL=(ALL) ALL
#Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
#See sudoers(5) for more information on "#include"directives:
#includedir/etc/sudoers.d
文件中一个sudoers行的基本形式如下:
user host_computer=command
这个user可以是单独的一个用户,也可以是一个群组(群组前面有%)。host_computer通常是ALL包括所有的主机,也可以是localhost只包括本地主机。sudoers行中的command可以是ALL,包括了所有的特殊命令,也可以是所有命令的一个子集(不可被使用的命令前会加上!)。
sudoers man page将给出详细的信息,这里只举几个简单的例子:
如果我们添加行
%wheel ALL=(ALL) NOPASSWD:ALL
那么任何添加到wheel群组的用户将能够执行任何命令,而且不需要输入密码。
假设我们想要给用户sunny,在全网范围内将用户添加到图形界面的权限,我们可以加入下面一行:
sunny ALL=/users-admin
或者我们只希望sunny在她个人的电脑上有这个权限:
sunny 192.168.1.45=/usr/bin/users-admin
如果我们想要授权editors群组在全网范围内不需要密码的删除文件,那么我们可以使用:
%editors ALL=NOPASSWD: /bin/rm
如果我们希望给每一个用户权限在当前主机上不需要密码的挂载CD光驱,可以使用:
ALL localhost=NOPASSWD: /sbin/mount /dev/scd0 /mnt/cdrom /sbin/umount/mnt/cdrom
下面的命令将会输出当前用户被授权使用的命令列表:
sudo -l
有人会误以为su命令是super user的简写,实际上su是substitute user的所写。还有一个重要的区别是命令su和命令su -的区别,前者你获得了新用户的身份但是却保留你原有用户的环境变量(例如path),后者你继承了新用户的环境变量。例如当你使用su命令变成超级用户root时,你并没有继承超级用户的环境变量/bin或者/sbin,所以你必须得输入命令的全路径才能执行,否则系统将找不到你要执行的命令。在Ubuntu中,第一个创建的用户被分类为root,尽管真正的root用户是默认禁用的。如果你希望其他用户也可以通过sudo命令获得root用户的全权限,你可以将这个用户加到admin群组即可。