Linux 新用户的基本任务(4)成为超级用户(或根用户)
- UID
- 1066743
|
Linux 新用户的基本任务(4)成为超级用户(或根用户)
对于 Linux 上的很多任务,您需要根用户 或超级用户 权限。根用户(有时称为超级用户)是通常用于完成配置系统或安装软件等管理任务的用户。仅当需要执行管理任务才使用 root,避免使用 root 执行常规任务。根用户可以做任何事,包括意外毁灭系统,这通常不是什么好事情。常规用户拥有较少特权,系统受到更多保护,不会受到常规用户意外损坏。
大多数拥有图形界面的管理应用程序现在要求非根用户提供根密码才能访问其功能。当您需要作为根用户从一个终端运行命令时,这帮不上忙。
您的第一反应可能是注销当前 userid 并使用新的 userid 登录,切换到另一个 userid。但如果您只是需要作为另一个用户运行几个快速命令,又该怎么办呢?Linux 提供了一个解决方案:su(替代用户)和 sudo 命令允许临时作为另一个用户运行一个或多个命令。这通常用于需要根权限的任务。事实上,如果您使用 ssh(或非常不安全的 telnet)这样的终端程序远程连接到一个系统,那么很多 Linux 发行版都会阻止您作为根用户登录。这是一种良好的安全实践,我们建议您不要试图绕过这个限制。相反,您应该作为非特权用户登录,然后使用 su 或 sudo 命令执行需要根权限的工作。
总结起来,有两种主要方法可以使用根权限运行任一命令。
- 使用 su 命令(通常带 - 选项)成为根用户。
- 使用 sudo 命令以根权限执行一个命令。
在 Fedora 或 OpenSUSE 这样的系统上,这两种方法都可以使用,但使用 su 可能更普遍。在 Ubuntu 这样的基于 Debian 的系统上,安全模型阻止根登录,因此您既不能作为根用户登录,也不能使用 su 成为根用户,只能使用 sudo。
使用 su假设您已登录,正在查看一个终端窗口,您不是根用户,但需要运行一个需要根权限的命令(比如 fdisk)。您单独使用 su 命令切换到根用户,或者,更普遍的情况是添加 - 选项。
不带 - 选项的 su 命令只是使您变成根用户,但不更改您的环境变量,包括您的路径。- 选项,也可以输入为 -l 或 -login(如果您的确喜欢输入额外的字母),允许读取替代用户的登录启动文件,从而允许将路径、环境和提示等设置为目标用户的值。清单 2 展示了我们的 Fedora 系统上的这两种形式。我们已经使用 pwd (print working directory) 命令显示每种形式的当前工作目录。注意提示有何不同。如果您想深入了解如何定制自己的提示以及哪些因素决定提示外观,请参阅 developerWorks 上的 “” 技巧。
清单 2. 切换到根用户1
2
3
4
5
6
7
| [ian@echidna ~]$ su
Password:
[root@echidna ian]# pwd
/home/ian
[root@echidna ian]# su -
[root@echidna ~]# pwd
/root
|
毫不奇怪,您将注意到,必须提供密码才能切换到根用户。一旦拥有根权限,就能使用 su 或 su - 切换到另一个用户,或切换到带 login 选项的根用户。如果您想切换到一个非根用户,只需添加相应 ID。如前所述,可以根据需要使用或不使用 - 选项。例如:
su - db2inst1 要返回此前的 ID,按 Ctrl-d 键;或者,如果正在使用 bash shell(这是大多数 Linux 系统上的默认值),输入 exit 并按 Enter 键。
我们已经了解了如何使用 su,下面我们通过 fdisk 命令来实践。
清单 3. 使用 su 运行 fdisk 命令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| [ian@echidna ~]$ fdisk /dev/sda
Unable to open /dev/sda
[ian@echidna ~]$ su -
Password:
[root@echidna ~]# fdisk /dev/sda
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): q
[root@echidna ~]# exit
logout
[ian@echidna ~]$
|
使用 sudo与 su 命令类似,sudo 命令允许使用另一个用户的权限运行命令。一个给定用户或一类用户可能执行的命令在 /etc/sudoers 文件中列示。与 su 命令相反,无需 知道根用户或其他用户的密码,但需要提供您自己的密码。/etc/sudoers 文件由根用户维护,通过 visudo 命令编辑。
如果快速执行多个 sudo 命令,通常不需要为每个命令重新输入密码。另一种方法是运行带 -s 选项的 sudo 命令,此命令将为您运行一个 shell,您可以作为目标用户从该 shell 运行多个命令,直到您关闭 shell。清单 4 展示了这两种方法。
清单 4. 在 Ubuntu 上使用 sudo 命令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| ian@pinguino:~$ fdisk /dev/sda
Unable to open /dev/sda
ian@pinguino:~$ sudo fdisk /dev/sda
[sudo] password for ian:
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x54085408
Device Boot Start End Blocks Id System
/dev/sda1 * 1 2611 20972826 7 HPFS/NTFS
/dev/sda2 2612 2624 104422+ 83 Linux
/dev/sda3 2625 14593 96140962 5 Extended
/dev/sda5 2625 2689 522081 82 Linux swap / Solaris
/dev/sda6 2690 5180 20008926 83 Linux
/dev/sda7 5181 9341 33423201 83 Linux
/dev/sda8 9342 14593 42186658+ 83 Linux
Command (m for help): q
ian@pinguino:~$ sudo -s
root@pinguino:~# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): q
root@pinguino:~# exit
ian@pinguino:~$
|
如果您没有在 sudoers 文件中获得授权,将收到一条类似于 清单 5 的错误消息。
清单 5. 越权使用 sudo1
2
3
| [ian@echidna ~]$ sudo fdisk /dev/sda
[sudo] password for ian:
ian is not in the sudoers file. This incident will be reported.
|
|
|
|
|
|
|