<< Back to shouce.jb51.net

安装 Shadow-4.0.3

预计所需编译时间:      0.4 SBU
预计所需硬盘空间:      11 MB

Shadow的内容

Shadow用来增强系统密码的安全性。

安装下列程序: chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd, pwck, pwconv, pwunconv, sg (link to newgrp), useradd, userdel, usermod, vigr (link to vipw) 和 vipw

Shadow 安装依赖关系

Shadow 依赖于: Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.

安装 Shadow

login, gettyinit 程序 (以及其他一些) 维护几个登陆文件,用来记录登陆到系统的用户。然而,它们本身却不创建这些文件,所以如果你想记录这些消息,就要自己创建文件,并保持正确的读写权限:

用下面的命令创建这些文件,能确保正确的权限:

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

/var/run/utmp 文件列出现在登陆的用户,/var/log/wtmp 文件列出以前有谁登陆过,是在什么时间,/var/log/lastlog 文件显示每个用户最后一次登陆的时间,/var/log/btmp 列出失败的登陆尝试。

Shadow 把 passwd 程序的路径硬编码了,但用的方法错了。如果在安装 shadow 前没有 passwd 程序存在,它会(错误地)假设存在/bin/passwd,然后却把它自己带的passwd安装成 /usr/bin/passwd。这会造成找不到 /bin/passwd 的奇怪错误。为了修正这个 bug,我们创建一个空的 passwd 文件,以使它能硬编码到正确的位置:

touch /usr/bin/passwd

目前的 shadow 套件中 newgrp 命令会出错,这是一个bug。下面的补丁(也出现在 Shadow 的CVS中)修正了这个错误:

patch -Np1 -i ../shadow-4.0.3-newgrp-fix.patch

为编译 Shadow 做准备:

./configure --prefix=/usr --libdir=/usr/lib --enable-shared

编译软件包:

make

安装软件包:

make install

Shadow 使用两个文件来配置系统的身份验证。安装这些配置文件:

cp etc/{limits,login.access} /etc

我们希望改变加密的方法,使用MD5密码,它比缺省的"crypt"方法更安全,也允许大于8位的密码。我们还希望改变老的/var/spool/mail邮箱位置到目前的/var/mail。我们在拷贝配置文件时做这些改变:

sed -e 's%/var/spool/mail%/var/mail%' \
    -e 's%#MD5_CRYPT_ENAB.no%MD5_CRYPT_ENAB yes%' \
    etc/login.defs.linux > /etc/login.defs

注: 手动输入上面的命令时要格外小心。最好是拷贝粘贴上面的命令。

根据vipw的手册页,vigr应是它的一个符号链接。因为 shadow 的安装过程中没有创建这样的链接,我们不得不手动创建它:

ln -s vipw /usr/sbin/vigr

vipw 链接现在指向一个空的文件,因为这个文件不需要在这里,删除它:

rm /bin/vipw

sg程序移到 /usr/bin 目录:

mv /bin/sg /usr/bin

把Shadow的动态库文件移到更合理的位置:

mv /usr/lib/lib{shadow,misc}.so.0* /lib

库文件移走了,但有的软件包还会在/usr/lib目录里找它们。为了满足要求,创建下列符号链接:

ln -sf ../../lib/libshadow.so.0 /usr/lib/libshadow.so
ln -sf ../../lib/libmisc.so.0 /usr/lib/libmisc.so

useradd 程序的 -D 参数需要这个目录才能正常工作:

mkdir /etc/default

Coreutils 和 Shadow 密码套件分别安装了一个同样的groups程序。如果你愿意,你可以删除Shadow 密码套件所安装的groups程序:

rm /bin/groups

配置 Shadow

这个软件包中包括一些工具程序,用来修改用户的密码,加入新的用户或组,删除它们,以及其它用途。在此,我们不想解释shadow密码是什么意思,在源代码的doc/HOWTO文件中有详细介绍。这里,你需要记住一点,如果你决定使用shadow密码,那么所有需要对密码进行校验的程序(例如:xdm、ftp守护进程、pop3守护进程等等)都需要和它兼容,也就是说它们得能够使用shadow密码。

下面的命令使 Shadow 密码生效:

/usr/sbin/pwconv

下面的命令使 shadow 的组密码生效:

/usr/sbin/grpconv

正常情况下,你还没有创建任何密码,然而,如果是创建密码后才运行上面的命令,就需要用 passwd 来更新所有现存的用户密码,同时用 gpasswd 更新所有现存的组密码。

设置 root 密码

为 root 用户选择一个密码,并用如下命令设置:

passwd root