6.7. 创建 passwd、group 和 log 文件

为了让用户 root 能够登录,并且名称 “root” 可以被识别,必须在/etc/passwd/etc/group文件中包含相关的条目。

创建/etc/passwd文件,通过运行以下命令

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
EOF

用户 root 的实际密码(此处使用的 “x” 只是一个占位符)将在稍后设置。

创建/etc/group文件,通过运行以下命令

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
EOF

创建的这些组不是任何标准的一部分——这些组的决定部分基于本章 Udev 配置的要求,部分基于许多现有 Linux 发行版采用的通用约定。《Linux 标准库》(LSB,可在 http://www.linuxbase.org 获取)仅建议,除了组 ID(GID)为 0 的 “root” 组之外,还应存在 GID 为 1 的 “bin” 组。所有其他组名和 GID 都可以由系统管理员自由选择,因为编写良好的程序不依赖于 GID 数字,而是使用组的名称。

要移除 “I have no name!” 提示符,请启动一个新的 shell。由于完整的 Glibc 已在第 5 章中安装,并且/etc/passwd/etc/group文件已创建,用户名和组名解析现在可以正常工作。

exec /tools/bin/bash --login +h

请注意 +h 指令的使用。这告诉 bash 不要使用其内部路径哈希。如果没有此指令,bash 将记住它已执行的二进制文件的路径。为了确保在新编译的二进制文件安装后立即使用,+h 指令将在本章期间使用。

loginagettyinit 程序(以及其他程序)使用许多日志文件来记录信息,例如谁在何时登录到系统。但是,如果日志文件尚不存在,这些程序将不会写入日志文件。初始化日志文件并赋予它们正确的权限

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/run/utmp /var/log/lastlog
chmod -v 664 /var/run/utmp /var/log/lastlog

这些/var/run/utmp文件记录当前已登录的用户。这些/var/log/wtmp文件记录所有登录和注销。这些/var/log/lastlog文件记录每个用户上次登录的时间。这些/var/log/btmp文件记录错误的登录尝试。