下一页 上一页 目录

6. 您可能需要升级或修补的其他程序

即使 shadow 套件包含了大多数需要访问密码的程序的替代程序,但在大多数系统中,仍然有一些额外的程序需要访问密码。

如果您正在运行 Debian 发行版(或者即使您没有运行),您可以从以下地址获取需要重新构建的程序的 Debian 源代码:ftp://ftp.debian.org/debian/stable/source/

本节的其余部分讨论如何升级 adduserwu_ftpdftpdpop3dxlockxdmsudo,以便它们支持 shadow 套件。

请参阅 向 C 程序添加 Shadow 支持 章节,了解如何将 shadow 支持添加到任何其他需要的程序中(尽管该程序必须以 SUID root 或 SGID shadow 身份运行才能实际访问 shadow 文件)。

6.1 Slackware adduser 程序

Slackware 发行版(以及可能其他一些发行版)包含一个名为 /sbin/adduser 的交互式程序,用于添加用户。此程序的 shadow 版本可以从 ftp://sunsite.unc.edu/pub/Linux/ system/Admin/accounts/adduser.shadow-1.4.tar.gz 获取。

我建议您使用 Shadow Suite 提供的程序(useraddusermoduserdel)而不是 slackware adduser 程序。它们需要一些时间来学习如何使用,但这是非常值得的,因为您可以获得更多的控制权,并且它们对 /etc/passwd/etc/shadow 文件执行适当的文件锁定(adduser 没有)。

有关更多信息,请参阅关于 使用 Shadow Suite 的章节。

但是如果您必须使用它,这就是您需要做的

tar -xzvf adduser.shadow-1.4.tar.gz
cd adduser
make clean
make adduser
chmod 700 adduser
cp adduser /sbin

6.2 wu_ftpd 服务器

大多数 Linux 系统都带有 wu_ftpd 服务器。如果您的发行版没有预装 shadow,那么您的 wu_ftpd 将不会为 shadow 编译。 wu_ftpdinetd/tcpdroot 进程启动。如果您正在运行旧版本的 wu_ftpd 守护程序,您无论如何都应该升级它,因为旧版本存在一个漏洞,该漏洞可能导致 root 帐户被泄露(更多信息请参见 Linux 安全主页)。

幸运的是,您只需要获取源代码并重新编译它,并启用 shadow 支持即可。

如果您没有运行 ELF 系统,则可以在 Sunsite 上找到 wu_ftp 服务器,地址为 wu-ftp-2.4-fixed.tar.gz

检索到服务器后,将其放入 /usr/src,然后键入

cd /usr/src
tar -xzvf wu-ftpd-2.4-fixed.tar.gz
cd wu-ftpd-2.4-fixed
cp ./src/config/config.lnx.shadow ./src/config/config.lnx

然后编辑 ./src/makefiles/Makefile.lnx,并将行

LIBES    = -lbsd -support
更改为
LIBES    = -lbsd -support -lshadow

现在您可以运行构建脚本并安装了

cd /usr/src/wu-ftpd-2.4-fixed
/usr/src/wu-ftp-2.4.fixed/build lnx
cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
cp ./bin/ftpd /usr/sbin/wu.ftpd

这使用 Linux shadow 配置文件,编译并安装服务器。

在我的 Slackware 2.3 系统上,我还必须在运行 build 之前执行以下操作

cd /usr/include/netinet
ln -s in_systm.h in_system.h
cd -

据报告,在 ELF 系统下编译此软件包时存在问题,但下一个版本的 Beta 版本运行良好。它可以在 wu-ftp-2.4.2-beta-10.tar.gz 找到。

检索到服务器后,将其放入 /usr/src,然后键入

cd /usr/src
tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz
cd wu-ftpd-beta-9
cd ./src/config

然后编辑 config.lnx,并更改

#undef SHADOW.PASSWORD
更改为
#define SHADOW.PASSWORD
然后,
cd ../Makefiles
并编辑文件 Makefile.lnx 并更改
LIBES = -lsupport -lbsd # -lshadow
更改为
LIBES = -lsupport -lbsd -lshadow
然后构建并安装
cd ..
build lnx
cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
cp ./bin/ftpd /usr/sbin/wu.ftpd

请注意,您应该检查您的 /etc/inetd.conf 文件,以确保这是您的 wu.ftpd 服务器的实际位置。据报告,某些发行版将服务器守护程序放置在不同的位置,并且 wu.ftpd 特别可能被命名为其他名称。

6.3 标准 ftpd

如果您正在运行标准 ftpd 服务器,我建议您升级到 wu_ftpd 服务器。除了上面讨论的已知错误之外,它通常被认为更安全。

如果您坚持使用标准服务器,或者您需要 NIS 支持,Sunsite 上有 ftpd-shadow-nis.tgz

6.4 pop3d (邮局协议 3)

如果您需要支持第三个 邮局协议 (POP3),您将需要重新编译 pop3d 程序。 pop3d 通常由 inetd/tcpdroot 身份运行。

Sunsite 上提供了两个版本:pop3d-1.00.4.linux.shadow.tar.gzpop3d+shadow+elf.tar.gz

这两个版本都非常容易安装。

6.5 xlock

如果您安装了 shadow 套件,然后在没有升级 xlock 的情况下运行 X Windows 系统 并锁定屏幕,您将必须使用 CNTL-ALT-Fx 切换到另一个 tty,登录,并杀死 xlock 进程(或使用 CNTL-ALT-BS 杀死 X 服务器)。幸运的是,升级您的 xlock 程序相当容易。

如果您正在运行 XFree86 3.x.x 版本,您可能正在使用 xlockmore(它除了锁定屏幕外,还是一个很棒的屏幕保护程序)。此软件包通过重新编译支持 shadow。如果您有较旧的 xlock,我建议您升级到这个版本。

xlockmore-3.5.tgz 可在以下地址获得:ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz

基本上,这就是您需要做的

获取 xlockmore-3.7.tgz 文件并将其放入 /usr/src 解压缩它

tar -xzvf xlockmore-3.7.tgz

编辑文件:/usr/X11R6/lib/X11/config/linux.cf,并将行

#define HasShadowPasswd    NO

to

#define HasShadowPasswd    YES

然后构建可执行文件

cd /usr/src/xlockmore
xmkmf
make depend
make

然后将所有内容移动到位并更新文件所有权和权限

cp xlock /usr/X11R6/bin/
cp XLock /var/X11R6/lib/app-defaults/
chown root.shadow /usr/X11R6/bin/xlock
chmod 2755 /usr/X11R6/bin/xlock
chown root.shadow /etc/shadow
chmod 640 /etc/shadow

您的 xlock 现在可以正常工作了。

6.6 xdm

xdm 是一个为 X-Windows 提供登录屏幕的程序。当系统被告知进入指定的运行级别时,某些系统会启动 xdm(请参阅 /etc/inittab)。

安装 Shadow Suite 后,xdm 需要更新。幸运的是,升级您的 xdm 程序相当容易。

xdm.tar.gz 可在以下地址获得:ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz

获取 xdm.tar.gz 文件并将其放入 /usr/src,然后解压缩它

tar -xzvf xdm.tar.gz

编辑文件:/usr/X11R6/lib/X11/config/linux.cf,并将行

#define HasShadowPasswd    NO

to

#define HasShadowPasswd    YES

然后构建可执行文件

cd /usr/src/xdm
xmkmf
make depend
make

然后将所有内容移动到位

cp xdm /usr/X11R6/bin/

xdmroot 身份运行,因此您无需更改其文件权限。

6.7 sudo

程序 sudo 允许系统管理员让用户运行通常需要 root 访问权限的程序。这很方便,因为它允许管理员限制对 root 帐户本身的访问,同时仍然允许用户执行诸如挂载驱动器之类的操作。

sudo 需要读取密码,因为它在调用时会验证用户密码。 sudo 已经以 SUID root 身份运行,因此访问 /etc/shadow 文件不是问题。

用于 shadow 套件的 sudo 可在以下地址获得:ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz

警告:当您安装 sudo 时,您的 /etc/sudoers 文件将被默认文件替换,因此如果您向默认文件添加了任何内容,则需要对其进行备份。(您也可以编辑 Makefile 并删除将默认文件复制到 /etc 的行)。

该软件包已针对 shadow 进行设置,因此只需重新编译该软件包即可(将其放入 /usr/src

cd /usr/src
tar -xzvf sudo-1.2-shadow.tgz
cd sudo-1.2-shadow
make all
make install

6.9 pppd (点对点协议服务器)

pppd 服务器可以设置为使用多种类型的身份验证:密码验证协议 (PAP) 和 加密握手身份验证协议 (CHAP)。 pppd 服务器通常从 /etc/ppp/chap-secrets 和/或 /etc/ppp/pap-secrets 读取其使用的密码字符串。如果您正在使用 pppd 的这种默认行为,则无需重新安装 pppd。

pppd 还允许您使用 login 参数(在命令行上,或在配置或 options 文件中)。如果给出了 login 选项,则 pppd 将使用 /etc/passwd 文件作为 PAP 的用户名和密码。当然,现在我们的密码文件已被 shadow 化,这将不再有效。对于 pppd-1.2.1d,这需要添加 shadow 支持的代码。

下一节中给出的示例是将 shadow 支持添加到 pppd-1.2.1d(pppd 的旧版本)。

pppd-2.2.0 已经包含 shadow 支持。


下一页 上一页 目录