8.25. Shadow-4.9

Shadow 软件包包含安全地处理密码的程序。

估计构建时间: 0.2 SBU
需要硬盘空间: 45 MB

8.25.1. 安装 Shadow

[注意]

注意

如果您希望强制使用强密码,参考 https://www.linuxfromscratch.org/blfs/view/svn/postlfs/cracklib.html 以在构建 Shadow 前安装 CrackLib。然后,将 --with-libcrack 添加到下面的 configure 命令中。

禁止该软件包安装 groups 程序和它的 man 页面,因为 Coreutils 会提供更好的版本。同样,避免安装第 8.3 节 “Man-pages-5.13”软件包已经提供的 man 页面:

sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \;
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;

不使用默认的 crypt 加密方法,使用更安全的 SHA-512 方法加密密码,该方法也允许长度超过 8 个字符的密码。还需要把过时的用户邮箱位置 /var/spool/mail 改为当前普遍使用的 /var/mail 目录。另外,从默认的 PATH 中删除/bin/sbin,因为它们只是指向 /usr 中对应目录的符号链接:

[注意]

注意

如果由于某种原因,希望将 /bin 和/或 /sbin 保留在 PATH 中,可以在构建 LFS 后通过 .bashrc 修改 PATH

sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \
    -e 's:/var/spool/mail:/var/mail:'                 \
    -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                \
    -i etc/login.defs
[注意]

注意

如果您选择构建有 Cracklib 支持的 Shadow,执行以下命令:

sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs

使用以下命令修改文件,修复程序中的一处低级错误:

sed -e "224s/rounds/min_rounds/" -i libmisc/salt.c

准备编译 Shadow:

touch /usr/bin/passwd
./configure --sysconfdir=/etc \
            --with-group-name-max-length=32

配置选项的含义:

touch /usr/bin/passwd

我们需要保证 /usr/bin/passwd 存在,因为它的位置会被硬编码到一些程序中,如果它不存在的话,会使用错误的默认位置。

--with-group-name-max-length=32

最长用户名可以有 32 个字符。设定组名称最大长度为相同值。

编译该软件包:

make

该软件包不包含测试套件。

安装该软件包:

make exec_prefix=/usr install
make -C man install-man
mkdir -p /etc/default
useradd -D --gid 999

8.25.2. 配置 Shadow

该软件包包含用于添加、修改、删除用户和组,设定和修改它们的密码,以及进行其他管理任务的工具。如果希望查阅关于 password shadowing 的详细解释,阅读解压得到源代码目录树中的 doc/HOWTO 文件。如果使用 Shadow 支持,请注意所有需要验证密码的程序 (如显示管理器、FTP 程序、pop3 守护进程等) 都必须和 Shadow 兼容。换句话说,它们必须能使用 Shadow 加密的密码。

如果要对用户密码启用 Shadow 加密,执行以下命令:

pwconv

如果要对组密码启用 Shadow 加密,执行:

grpconv

Shadow 附带的 useradd 配置文件有一些需要解释的事项。首先,useradd 的默认操作是创建一个用户,以及一个名字和用户名相同的组。默认情况下,用户 ID (UID) 和组 ID (GID) 会从 1000 开始。这意味着,如果您不向 useradd 传递参数,每个用户都会属于一个不同的组。如果您不希望这样,就要传递 -g 参数给 useradd。默认参数保存在 /etc/default/useradd 文件中。您可以编辑其中的两个参数,以满足您的特定需求。

/etc/default/useradd 参数解释

GROUP=1000

该参数设定 /etc/group 文件中使用的第一个组编号。您可以将它修改为您希望的任何值。注意,useradd 绝不会重用 UID 或 GID。如果该参数指定的数字已经被使用了,它就会使用下一个可用的数字。另外,如果您第一次使用 useradd 时没有编号 1000 的组,也没有使用 -g 选项,您就会在终端看到一条消息:useradd: unknown GID 1000。您可以忽略这条消息,它会使用组编号 1000。

CREATE_MAIL_SPOOL=yes

该参数使得 useradd 为新创建的用户建立邮箱文件。useradd 会使得 mail 为邮箱文件属组,并为邮箱文件赋予 0660 权限模式。如果您不希望 useradd 创建这些邮箱文件,执行以下命令:

sed -i 's/yes/no/' /etc/default/useradd

8.25.3. 设定 root 密码

为用户 root 选择一个密码,并执行以下命令设定它:

passwd root

8.25.4. Shadow 的内容

安装的程序: chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, gpasswd, groupadd, groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, lastlog, login, logoutd, newgidmap, newgrp, newuidmap, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg (到 newgrp 的链接), su, useradd, userdel, usermod, vigr (到 vipw 的链接), 以及 vipw
安装的目录: /etc/default

简要描述

chage

用于修改强制性密码更新的最大天数

chfn

用于修改用户全名和其他信息

chgpasswd

用于批量更新组密码

chpasswd

用于批量更新用户密码

chsh

用于改变用户的默认登录 shell

expiry

检查并强制保证当前密码过期策略

faillog

检查失败登录日志,设定锁定账户的最大失败次数,或重置失败次数

gpasswd

用于增加或删除组的用户和管理员

groupadd

以指定名称创建组

groupdel

删除指定的组

groupmems

允许用户在不需要超级用户权限的情况下,管理自己的组成员列表

groupmod

用于修改给定的组名称或 GID

grpck

验证组文件 /etc/group/etc/gshadow 的完整性

grpconv

根据普通组文件创建或更新加密组文件

grpunconv

根据 /etc/gshadow 文件更新 /etc/group 文件,并删除前者

lastlog

报告所有用户或给定用户最后一次登录的信息

login

被系统用于允许用户登录

logoutd

是一个限制登录时间和端口的守护进程

newgidmap

用于设定用户命名空间的 gid 映射

newgrp

用于在登录会话中修改当前 GID

newuidmap

用于设定用户命名空间的 uid 映射

newusers

用于批量创建或更新用户账户

nologin

显示一条账户不可用的消息;它被设计为用来当作被禁用的账户的默认 shell

passwd

用于修改用户或组账户的密码

pwck

检验密码文件 /etc/passwd/etc/shadow 的完整性

pwconv

从普通密码文件创建或更新加密密码文件

pwunconv

根据 /etc/shadow 更新 /etc/passwd 并删除前者

sg

在用户 GID 设为给定组 ID 的情况下,执行给定命令

su

用替换的用户和组 ID 运行 shell

useradd

以指定名称创建新用户,或更新新用户默认信息

userdel

删除给定用户

usermod

修改给定用户的登录名称、用户标识符 (UID)、shell、初始组、home 目录等信息

vigr

编辑 /etc/group/etc/gshadow 文件

vipw

编辑 /etc/passwd/etc/shadow 文件