8.30 Shadow-4.20.2

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

估计构建时间: 0.1 SBU
需要硬盘空间: 112 MB

8.30.1 安装 Shadow

[重要]

重要

如果已经安装了 Linux-PAM,则应该按照 BLFS shadow 页面,而非本页的说明安装 shadow。

[注意]

注意

如果您希望强制使用强密码,首先安装并配置 Linux-PAM。之后安装并配置带有 PAM 支持的shadow。最后安装 libpwquality 并配置 PAM 使用它

阻止该软件包安装 第 8.3 节 “Man-pages-6.18” 中已安装的手册页:

find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;

不使用默认的 SHA512 加密方法,使用安全程度高很多的 YESCRYPT 算法加密密码。还需要把过时的用户邮箱位置 /var/spool/mail 改为当前普遍使用的 /var/mail 目录。另外,从默认的 PATH 中删除/bin/sbin,因为它们只是指向 /usr 中对应目录的符号链接:

[警告]

警告

/bin 和/或 /sbin 包含在 PATH 中会导致一些 BLFS 软件包构建失败,因此不要通过 .bashrc 等这样做。

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

准备编译 Shadow:

touch /usr/bin/passwd
./configure --sysconfdir=/etc   \
            --disable-static    \
            --with-{b,yes}crypt \
            --without-libbsd    \
            --disable-logind    \
            --with-group-name-max-length=32

新的配置选项的含义:

touch /usr/bin/passwd

我们需要保证 /usr/bin/passwd 存在,因为它的位置会被硬编码到一些程序中;且如果它不存在的话,安装脚本会在错误的位置创建它。

--with-{b,yes}crypt

Shell 将它展开为两个选项,--with-bcrypt--with-yescrypt。它们允许 shadow 使用 Libxcrypt 实现的 Bcrypt 和 Yescrypt 算法对密码进行散列操作。这些算法相比于传统的 SHA 系列算法更安全 (特别是对基于 GPU 的攻击抵抗力强很多)。

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

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

--disable-logind

该选项使得 Shadow (准确来说,其中的 loginwho 程序) 使用 /run/utmp 而非 logind 跟踪运行中的登录会话,这是由于 logind 在当前不完整的 LFS 系统中尚不可用。但是,正如第 7.6 节 “创建必要的文件和符号链接”所述,/run/utmp 的文件格式在 2038 年后将完全无法使用。LFS 编辑团队将试图在 2038 年前解决该问题。

--without-libbsd

不要使用 LFS 不包含的 libbsd 库中的 readpassphrase 函数。使用软件包内置的 readpassphrase 实现代替它。

编译该软件包:

make

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

安装该软件包:

make exec_prefix=/usr install
make -C man install-man

8.30.2 配置 Shadow

该软件包包含用于添加、修改、删除用户和组,设定和修改它们的密码,以及进行其他管理任务的工具。如果希望查阅关于 password shadowing 的详细解释,阅读解压得到源代码目录树中的 doc/HOWTO 文件。

对用户密码启用 Shadow 机制:

pwconv

对组密码启用 Shadow 机制:

grpconv

下面需要解释 Shadow 中 useradd 的默认配置。首先,useradd 的默认操作是创建一个用户,以及一个名字和用户名相同的组。默认情况下,用户 ID (UID) 和组 ID (GID) 会从 1000 开始。这意味着,如果您不向 useradd 传递参数,每个用户都会属于一个不同的组。如果您不希望这样,就要传递 -g 或者 -N 参数给 useradd,或者在 /etc/login.defs 中修改 USERGROUPS_ENAB 的值。参阅 useradd(8) 了解更多相关信息。

其次,为了修改默认参数,必须创建 /etc/default/useradd 文件,并定制其内容,以满足您的特定需要。使用以下命令创建它:

mkdir -p /etc/default
useradd -D --gid 999

/etc/default/useradd 参数解释

GROUP=999

该参数设定 /etc/group 文件中使用的第一个组编号。这里的值 999 是在上面的 --gid 参数中给定的。您可以将它修改为您希望的任何值。注意,useradd 绝不会重用 UID 或 GID。如果该参数指定的数字已经被使用了,它就会使用下一个可用的数字。另外,如果您第一次使用不带 -g 参数的 useradd 命令时没有编号 999 的组,您就会在终端看到错误消息 —— useradd: unknown GID 999,尽管用户账号仍会被正常创建。为了防止这种现象的出现,我们在第 7.6 节 “创建必要的文件和符号链接”中已经用编号 999 创建了 users 组。

CREATE_MAIL_SPOOL=yes

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

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

最后,创建空的 /etc/subuid/etc/subgid 文件:

touch /etc/sub{u,g}id

Shadow 提供的一些工具会自动更新这两个文件的内容,以分配次级用户和组 ID。阅读手册页 subuid(5)subgid(5) 以了解次级 ID 的详细信息。

8.30.3 设定根用户密码

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

passwd root

8.30.4 Shadow 的内容

安装的程序: chage, chfn, chgpasswd, chpasswd, chsh, faillog, getsubids, gpasswd, groupadd, groupdel, groupmod, grpck, grpconv, grpunconv, login, newgidmap, newgrp, newuidmap, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg (到 newgrp 的链接), su, useradd, userdel, usermod, vigr (到 vipw 的链接), 以及 vipw
安装的库: libsubid.so
安装的目录: /etc/default 和 /usr/include/shadow

简要描述

chage

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

chfn

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

chgpasswd

用于批量更新组密码

chpasswd

用于批量更新用户密码

chsh

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

faillog

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

getsubids

用于列出一个用户的辅助 ID 范围

gpasswd

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

groupadd

以指定名称创建组

groupdel

删除指定的组

groupmod

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

grpck

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

grpconv

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

grpunconv

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

login

被系统用于允许用户登录

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 文件

libsubid

用于操作用户或组的辅助 ID 范围的库