From-Powerup-To-BASH-Prompt-HOWTO 很好地概述了登录过程的步骤。基本上它是这样工作的。
init 守护进程在终端上启动一个 getty 进程。
getty 程序显示/etc/issue的内容并提示输入用户名。
当输入用户名后,控制权将移交给 login 程序。
login 程序会要求输入密码,并使用/etc/passwd, /etc/group以及可能的/etc/shadow.
验证凭据。如果一切正常,用户的 shell 将会被启动。
关于虚拟控制台设备文件的详细信息可以在 Linux 内核源代码目录的devices.txt文件,位于Documentation目录中。我们需要创建tty1到tty6用于每个虚拟控制台,以及tty0和tty来代表当前的虚拟控制台。
这个/etc/issue文件很容易构建。它可以包含我们希望在登录提示符之前在屏幕上显示的任何文本。它可以是友好的,例如“欢迎来到袖珍 Linux”,可以是威胁性的,例如“仅限授权用户!”,也可以是信息性的,例如“已连接到 tty1,波特率为 9600bps”。agetty(8) 手册页解释了如何使用转义码显示 tty 行和波特率等信息。
可以通过阅读 passwd(5) 手册页获得/etc/passwd的格式。我们可以通过在文件中添加类似 "root::0:0:superuser:/root:/bin/sh" 这样的行来轻松创建用户帐户。
由于系统加载到内存盘,维护密码将有些挑战。当系统关闭时,对/etc/passwd的任何更改都将丢失。因此,为了简化操作,我们将创建所有用户,密码为空。
可以从 group(5) 手册页中获得/etc/group的结构。一行 "root::0:root" 将定义一个名为 "root" 的组,该组没有密码,组 ID 为零,并将用户 root 分配为唯一成员。
用户和组的名称和 ID 通常不是随机选择的。大多数 Linux 系统都有非常相似的/etc/passwd和/etc/group文件。常用用户 ID 和组 ID 分配的定义可以在任何流行的 GNU/Linux 发行版的多个
这个/etc/passwd和/etc/group文件中找到。
Debian 策略手册 -- 在线地址:http://www.debian.org/doc/debian-policy。
Linux 标准库规范 -- 可从 http://www.linuxbase.org/spec/index.shtml 下载多种格式。
Aeleen Frisch 著《Essential System Administration》第三版 -- 可在图书馆、书店或直接从 O'Reilly Publishing 获取,网址为 http://www.oreilly.com/。
在 util-linux 中的login程序上运行 ldd 将显示它链接到库libcrypt.so.1, libc.so.6和ld-linux.so.2。除了这些库之外,还有另一个看不见的依赖项,即libnss_files.so.2和配置文件/etc/nsswitch.conf.
名称服务切换库libnss_files.so.2和nsswitch.conf是 login 程序访问libc.so.6,并因此login程序访问/etc/passwd/etc/passwd
文件所必需的。如果没有 libnss 及其配置文件,所有登录都将莫名其妙地失败。有关 glibc 使用名称服务切换库的更多信息,请访问 https://gnu.ac.cn/software/libc/manual/html_node/Name-Service-Switch.html。以前,在单用户系统中,安装目录、文件和设备节点时无需担心权限问题。shell 实际上是以 root 身份运行的,因此一切都是可访问的。随着多用户功能的增加,事情变得更加复杂。现在我们需要确保每个用户都可以访问他们需要的内容,同时阻止他们访问他们不需要的内容。
分配所有权和权限的一个好的指导原则是给予所需的最低访问级别。以/bin目录为例。《文件系统层次结构》(FHS) 文档指出,“/bin包含系统管理员和用户都可以使用的命令”。从这句话我们可以推断,/bin/bin应该对所有人具有读取和执行权限。另一方面,/boot应该对所有人具有读取和执行权限。另一方面,目录包含用于引导加载程序的文件。普通用户很可能不需要访问应该对所有人具有读取和执行权限。另一方面,/boot
目录中的任何内容。因此,最低访问级别将是对 root 用户和属于 root 组的其他管理员的读取权限。普通用户在
/boot
目录上将没有分配任何权限。
大多数时候,我们可以为目录中的所有命令分配类似的权限,但是有些程序被证明是规则的例外。su 命令就是一个很好的例子。/bin 目录中的其他命令的最低要求是读取和执行,但 su 命令需要设置为 setuid root 才能正确运行。由于它是一个 setuid 二进制文件,因此允许任何人运行它可能不是一个好主意。0:0(root 用户,root 组)的所有权和 rwsr-x---(八进制 4750)的权限将非常适合 su。
相同的逻辑可以应用于根文件系统中的其他目录和文件,使用以下步骤:
上一页 | 将所有权分配给 root 用户和 root 组。 | 下一页 |
设置尽可能最严格的权限。 | 根据“需要”调整所有权和权限。 | 首页 |