跳转到内容

Unix 指南/解释/成为 Root

来自维基教科书,开放世界中的开放书籍

大多数用户帐户对 Unix 的访问权限有限。例如,用户通常无法删除其他用户的文件或系统的一部分。用户通常可以在他们的主目录中安装新软件,但不能安装到系统目录,例如/usr. 若要安装此类软件,更改系统文件的权限,在保留端口 < 1024 上启动服务器,或执行其他禁止普通用户执行的任务,您必须成为超级用户。超级用户具有root的用户名、零的用户 ID,并且可以不受系统权限限制地执行任何操作 - 对用户活动的限制永远不适用于 root

注意:对于 UbuntuKubuntu,请参阅 此处

以 Root 用户登录

[编辑 | 编辑源代码]

访问超级用户帐户的最古老方法是以root用户身份登录,使用 root 密码。出于安全原因,以及由于网上的许多黑客似乎都知道 root 的用户名,因此通常只允许在本地控制台上进行 root 登录。(某些系统允许 root 通过 ssh 登录,因为这是唯一的方法。好的系统管理员会在不再需要时禁用 root 登录,例如,在运行 OpenSSH 的系统上,取消注释/etc/ssh/sshd_config中的“PermitRootLogin no”行。)

一般来说,使用 root 登录是不好的。应该要求使用susudo,以便用户必须使用普通用户帐户进行身份验证,然后再成为 root。使用 root 登录的唯一正当理由是在另一个用户帐户创建之前和“su”或“sudo”经过测试之前,在 Unix 系统的初始设置期间。在此之后,应在本地控制台上也禁用 root 登录。

一些安装程序允许您在安装期间创建第一个用户帐户。您永远不会获得 root 密码或进行 root 登录,但第一个用户帐户可以使用sudo。Ubuntu Linux 和 Mac OS X 都是执行此操作的发行版。

使用 su

[编辑 | 编辑源代码]

su命令允许任何知道 root 密码的人获得 root shell,从而拥有 root 的所有权限

$ su
Password:
#

缩写“su”代表切换用户替代用户。您可以指定一个用户(su USERNAME),但默认情况下,它会将您切换到 root。

如果 su 后面跟着一个“-”(su -);shell 类型、工作目录、环境变量和 shell 别名将与您切换到的用户(root)正常登录(在虚拟终端的“用户”提示符下)时相同。

某些系统要求您加入 wheel 组才能访问 su。要求是您的用户名列在/etc/group中,位于组“wheel”的行的组 ID 为零。此要求在某些系统上不存在。

当您完成使用 su 创建的 root shell 后,应退出 root shell,以避免在以后的正常用户活动中意外使用它

# exit
exit
$

使用 sudo

[编辑 | 编辑源代码]

有一个名为 sudo 的高度可配置命令,几个类 Unix 发行版都包含它。这允许您以 root 用户身份运行单个命令。在大多数情况下,运行sudo会提示您输入自己的用户帐户密码,而不是 root 密码,因此sudo非常适合那些不希望记住单独的 root 密码的管理员,尤其是在他们很少使用 root 的情况下。

以 root 用户身份运行 COMMAND 的语法是

$ sudo COMMAND

例如,我们尝试查看通过类 Unix 系统发送的电子邮件的日志

$ less /var/log/maillog
/var/log/maillog: Permission denied

由于权限被拒绝,我们使用 sudo 以 root 用户身份运行命令

$ sudo less /var/log/maillog

另一种方法是使用!!命令。“bang-bang”扩展到重新打印输入到 shell 的最后一个命令,然后执行它。

$ sudo !!
sudo less /var/log/maillog

请注意,这是一个bash功能。此功能在sh中不起作用。默认情况下,大多数现代类 Unix 系统倾向于使用 bash。只是不要将它用于 shell 脚本!

配置 sudo

[编辑 | 编辑源代码]

在某些系统上,您必须在使用 sudo 之前对其进行配置。这是要在 /etc/sudoers 中添加的有用配置行。它可能已经存在,但被注释掉了。

%wheel  ALL=(ALL)       ALL

这意味着什么?第一个词,“%wheel”是允许使用 sudo 执行某项操作的用户。百分号表示 wheel 组中的所有用户都可以这样做。第一个“ALL”表示这在所有计算机上都是允许的。(如果您将相同的 sudoers 文件复制到几个不同的类 Unix 系统,这将很有用。)“(ALL)”是命令将拥有其权限的用户。我们可以说“(root)”但任何可以使用 root 的人都可以使用所有其他帐户,所以我们只说“(ALL)”。最后一个“ALL”表示允许哪些命令。

因此,该行规定wheel 组中的每个用户都可以以任何用户身份运行任何命令,包括 root。唯一的要求是用户输入密码:他们自己的密码,而不是 root 的密码。

有用的默认值

[编辑 | 编辑源代码]

此行在 /etc/sudoers 中禁用两个选项。

Defaults        !insults, !lecture

“insults”功能会对输入错误密码的任何用户进行随机辱骂。“lecture”会在用户第一次使用“sudo”(在系统每次启动后)时显示一条消息。它适用于管理员授予(可能有限的)sudo 访问权限给许多用户的系统;如果只有管理员使用 sudo,那么此选项就没有必要了。

华夏公益教科书