6.20. Shadow-4.7

Shadow 软件包包含以安全方式处理密码的程序。

大致构建用时: 0.2 SBU
所需磁盘空间: 46 MB

6.20.1. 安装 Shadow

[注意]

注意

如果你喜欢强制使用更强的密码,在编译 Shadow 之前可以根据 http://www.linuxfromscratch.org/blfs/view/9.0/postlfs/cracklib.html 安装 CrackLib。然后在下面的 configure 命令中增加 --with-libcrack

禁用对 groups 程序以及相应 man 手册的安装,Coreutils 已经提供了更棒的版本。同时也避免了安装已由 第 6.8 节 「Man-pages-5.02」 安装过的手册页:

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

该软件包包含增加、更改、以及删除用户和组的工具;设置和修改密码;执行其它特权级任务。软件包解压后的 doc/HOWTO 文件有关于 password shadowing 的完整解释。如果使用 Shadow 支持,记住需要验证密码(显示管理器、FTP 程序、pop3 守护进程等)的程序必须和 Shadow 兼容。也就是说,它们要能使用 Shadow 加密的密码。

运行下面的命令启用 shadow 密码:

pwconv

运行下面的命令启用 shadow 组密码:

grpconv

用于 useradd 工具的 Shadow 配置有一些需要解释的注意事项。首先,useradd 工具的默认操作是创建用户以及和用户名相同的组。默认情况下,用户 ID(UID) 和组 ID(GID) 的数字从 1000 开始。这意味着如果你不传递参数给 useradd,系统中的每个用户都会属于一个不同的组。如果不需要这样的结果,你需要传递参数 -guseradd。默认参数保存在 /etc/default/useradd 文件中。你需要修改该文件中的两个参数来实现你的特定需求。

/etc/default/useradd 参数解释

GROUP=1000

该参数设定 /etc/group 文件中使用的起始组序号。你可以把它更改为任何你需要的数字。注意 useradd 永远不会重用 UID 或 GID。如果该参数指定的数字已经被使用了,将会使用它之后的下一个可用数字。另外注意如果你系统中没有序号为 1000 的组,第一次使用 useradd 而没有参数 -g 的话,你会在终端中看到一个提示信息: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

从普通组文件创建或升级为 shadow 组文件

grpunconv

/etc/group 更新到 /etc/gshadow 然后删除前者

lastlog

报告所有用户或指定用户的最近一次登录

login

用于系统让用户登录进来

logoutd

用于强制限制登录时间和端口的守护进程

newgidmap

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

newgrp

用于在一次登录会话中更改当前 GID

newuidmap

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

newusers

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

nologin

显示一个账户不可用的信息;它用于来作为不可登录的账户的默认 shell

passwd

用来更改用户或组账户的密码

pwck

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

pwconv

从普通密码文件创建或升级 shadow 密码文件

pwunconv

/etc/passwd 更新到 /etc/shadow 然后删除前者

sg

当用户的 GID 被设置为指定组的 GID 时执行一个特定命令

su

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

useradd

用指定的名称新建用户或更新新用户的默认信息

userdel

删除指定的用户账户

usermod

用于更改指定用户的登录名称、UID、shell、初始组、home 目录,等

vigr

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

vipw

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