下一页 上一页 目录

4. 编译程序。

4.1 解包归档文件。

检索软件包后的第一步是解包它。该软件包为 tar (磁带归档) 格式,并使用 gzip 压缩,因此首先将其移动到 /usr/src,然后键入

tar -xzvf shadow-current.tar.gz

这将解包到以下目录:/usr/src/shadow-YYMMDD

4.2 使用 config.h 文件进行配置

您需要做的第一件事是复制 Makefileconfig.h 文件

cd /usr/src/shadow-YYMMDD
cp Makefile.linux Makefile
cp config.h.linux config.h

然后您应该查看 config.h 文件。此文件包含一些配置选项的定义。如果您正在使用推荐的软件包,我建议您第一次先禁用组 shadow 支持。

默认情况下,已启用 shadow 组密码。要禁用这些密码,请编辑 config.h 文件,并将 #define SHADOWGRP 更改为 #undef SHADOWGRP。我建议您首先禁用它们,然后如果您真的需要组密码和组管理员,则稍后启用它并重新编译。如果您保持启用状态,则必须创建文件 /etc/gshadow

如上所述,不建议启用长密码选项。

请勿更改设置:#undef AUTOSHADOW

AUTOSHADOW 选项最初旨在使那些不了解 shadow 的程序仍然可以运行。这在理论上听起来不错,但实际上并不能正确工作。如果您启用此选项,并且程序以 root 身份运行,则它可能会以 root 身份调用 getpwnam(),然后将修改后的条目写回到 /etc/passwd 文件(带有不再 shadow 的密码)。此类程序包括 chfn 和 chsh。(您无法通过在调用 getpwnam() 之前交换实际和有效 uid 来解决此问题,因为 root 也可能使用 chfn 和 chsh。)

如果您正在构建 libc,同样的警告也适用,它有一个 SHADOW_COMPAT 选项,作用相同。不应该使用它!如果您开始在 /etc/passwd 文件中看到编码后的密码,这就是问题所在。

如果您使用的 libc 版本早于 4.6.27,您将需要在 config.hMakefile 中进行一些更多更改。对于 config.h,编辑并更改

#define HAVE_BASENAME
#undef HAVE_BASENAME
然后在 Makefile 中,更改

SOBJS = smain.o env.o entry.o susetup.o shell.o \
        sub.o mail.o motd.o sulog.o age.o tz.o hushed.o

SSRCS = smain.c env.c entry.c setup.c shell.c \
        pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
        tz.c hushed.c
SOBJS = smain.o env.o entry.o susetup.o shell.o \
        sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o

SSRCS = smain.c env.c entry.c setup.c shell.c \
        pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
        tz.c hushed.c basename.c
这些更改添加了 basename.c 中包含的代码,该代码包含在 libc 4.6.27 及更高版本中。

4.3 制作原始程序的备份副本。

最好还跟踪并制作 shadow 套件将替换的程序的备份副本。在 Slackware 3.0 系统上,这些程序是

BETA 软件包在 Makefile 中有一个 save 目标,但它被注释掉了,因为不同的发行版将程序放置在不同的位置。

您还应该制作 /etc/passwd 文件的备份副本,但如果将其放置在同一目录中,请务必将其命名为其他名称,这样您就不会覆盖 passwd 命令。

4.4 运行 make

您需要以 root 身份登录才能执行大多数安装操作.

运行 make 以编译软件包中的可执行文件

make all

您可能会看到警告:rcsid defined but not used。这没关系,这只是因为作者正在使用版本控制软件包。


下一页 上一页 目录