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:
EOF

这里创建的用户组并不是什么标准所要求的部分,只是因为在随后 Udev 配置将要用到而以。Linux标准基础(LSB,详见http://www.linuxbase.org)只是推荐“root”用户组的 GID 为 0,另一个组“bin”的 GID 为 1 。其它所有的组名和 GID 均由系统管理员自由设定,因为比较好的软件包一般都不依赖于 GID ,而只是使用组名。

既然完整的 Glibc 在 Chapter 5 中已经安装,而且 /etc/passwd/etc/group 文件也已创建,用户名和组名可以开始使用。现在启动新的shell,驱除“I have no name!”的提示符:

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

注意这里使用了 +h 参数。这是告诉 bash 不能使用哈希表查找外部路径。如果没有使用这个参数,则 bash 将会记住已经执行的二进制代码的路径。为了让新编译安装的二进制代码可以马上投入使用,在这一章中,我们关闭了此功能。

程序 login, agetty, init (还有一些其它的程序) 使用一些 log 文件来记录信息,比如谁在什么时候登录了系统等等。然而如果文件不存在,这些程序则无法写入。下面初始化这些 log 文件,并设置适当的权限:

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

/var/run/utmp 记录着现在登录的用户。/var/log/wtmp 记录所有的登录和登出。 /var/log/lastlog 记录每个用户最后的登录信息。 /var/log/btmp 记录错误的登录尝试。