检索软件包后的第一步是解包它。该软件包为 tar (磁带归档) 格式,并使用 gzip 压缩,因此首先将其移动到 /usr/src
,然后键入
tar -xzvf shadow-current.tar.gz
这将解包到以下目录:/usr/src/shadow-YYMMDD
您需要做的第一件事是复制 Makefile
和 config.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.h
和 Makefile
中进行一些更多更改。对于 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
及更高版本中。
最好还跟踪并制作 shadow 套件将替换的程序的备份副本。在 Slackware 3.0 系统上,这些程序是
BETA 软件包在 Makefile 中有一个 save 目标,但它被注释掉了,因为不同的发行版将程序放置在不同的位置。
您还应该制作 /etc/passwd
文件的备份副本,但如果将其放置在同一目录中,请务必将其命名为其他名称,这样您就不会覆盖 passwd
命令。
您需要以 root 身份登录才能执行大多数安装操作.
运行 make 以编译软件包中的可执行文件
make all
您可能会看到警告:rcsid defined but not used
。这没关系,这只是因为作者正在使用版本控制软件包。