为了让 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 记录错误的登录尝试。