6.20. Shadow-4.6

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

估计编译时间: 0.2 SBU
需要硬盘空间: 46 MB

6.20.1. 安装 Shadow

[注意]

注意

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

禁止该软件包安装 groups 程序和它的 man 页面,因为 Coreutils 会提供更好的版本。 同样,避免安装 man 页面 软件包已经提供的 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 个字符的密码。另外,还需要把 Shadow 默认使用的用户邮箱位置 /var/spool/mail 改为当前普遍使用的 /var/mail 目录:

sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
       -e 's@/var/spool/mail@/var/mail@' etc/login.defs
[注意]

注意

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

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

进行微小的改动,使 useradd 使用 1000 作为第一个组编号:

sed -i 's/1000/999/' etc/useradd

准备安装 Shadow:

./configure --sysconfdir=/etc --with-group-name-max-length=32

配置选项的含义:

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

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

编译该软件包:

make

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

安装该软件包:

make install

将一个安装位置不正确的程序移动到正确位置:

mv -v /usr/bin/passwd /bin

6.20.2. 配置 Shadow

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

[注意]

译注

大多数 Linux 程序要么本身支持 Shadow,要么通过 Linux PAM 支持 Shadow。为了提高安全性,建议启用 Shadow 加密。

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

pwconv

执行命令,对组密码启用 Shadow 加密:

grpconv

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

/etc/default/useradd 参数解释

GROUP=1000

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

CREATE_MAIL_SPOOL=yes

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

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

6.20.3. 设定 root 密码

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

passwd root

6.20.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/gshadow 文件,并删除前者

lastlog

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

login

被系统用于允许用户登录

logoutd

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

newgidmap

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

newgrp

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

newuidmap

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

newusers

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

nologin

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

passwd

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

pwck

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

pwconv

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

pwunconv

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

sg

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

su

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

useradd

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

userdel

删除给定用户

usermod

修改给定用户的登录名称、用户 ID、shell、初始组、 home 目录等信息

vigr

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

vipw

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