为了让用户 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 指令将在本章期间使用。
login、agetty 和 init 程序(以及其他程序)使用许多日志文件来记录信息,例如谁在何时登录到系统。但是,如果日志文件尚不存在,这些程序将不会写入日志文件。初始化日志文件并赋予它们正确的权限
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文件记录错误的登录尝试。