Linux /etc/login.defs 详解:用户账户与密码策略的核心配置文件
在 Linux 系统中,用户账户管理和密码策略是系统安全的基石。而 /etc/login.defs 文件作为 shadow 密码套件(shadow-utils)的核心配置文件,扮演着至关重要的角色。它定义了用户账户创建的默认规则(如 UID/GID 范围、家目录路径)、密码策略(如密码有效期、最小长度)以及登录会话设置(如登录超时)等关键参数。理解并正确配置 /etc/login.defs,不仅能规范用户管理流程,还能显著提升系统安全性。
本文将深入解析 /etc/login.defs 的结构、核心参数、最佳实践及常见配置示例,帮助系统管理员掌握这一文件的使用方法。
目录#
1. 文件位置与权限#
位置#
/etc/login.defs 位于系统的 /etc 目录下,是全局可见的配置文件。
权限#
文件默认权限为 0644(所有者可读写,组和其他用户只读),所有者为 root:root。这一权限设置确保普通用户无法修改系统级配置,仅管理员(root)可调整参数。
$ ls -l /etc/login.defs
-rw-r--r-- 1 root root 11K 2023-10-01 12:00 /etc/login.defs2. 核心配置参数详解#
/etc/login.defs 的参数按功能可分为四大类,以下逐一解析。
2.1 用户账户默认配置#
此类参数定义了创建普通用户和系统用户时的默认规则,如 UID/GID 范围、家目录路径等。
2.1.1 UID/GID 范围#
-
UID_MIN:普通用户的最小 UID 值(默认:1000,不同发行版可能一致)。- 作用:避免与系统账户(如
root、daemon)的 UID 冲突。 - 示例:
UID_MIN 1000
- 作用:避免与系统账户(如
-
UID_MAX:普通用户的最大 UID 值(默认:60000)。- 示例:
UID_MAX 60000
- 示例:
-
SYS_UID_MIN/SYS_UID_MAX:系统账户的 UID 范围(默认:100-999)。- 系统账户(如
nginx、mysql)用于运行服务,通常不需要登录权限。 - 示例:
SYS_UID_MIN 100、SYS_UID_MAX 999
- 系统账户(如
-
GID_MIN/GID_MAX、SYS_GID_MIN/SYS_GID_MAX:与 UID 对应,定义用户组的 GID 范围(默认与 UID 规则一致)。
2.1.2 家目录与 Shell#
-
CREATE_HOME:创建用户时是否默认创建家目录(默认:yes)。- 可选值:
yes(创建)、no(不创建)。 - 示例:
CREATE_HOME yes→useradd alice会自动创建/home/alice。
- 可选值:
-
HOME_DIR:家目录的路径模板(默认:/home/%u,%u表示用户名)。- 示例:
HOME_DIR /home/%u→ 用户bob的家目录为/home/bob。
- 示例:
-
SHELL:默认登录 Shell(默认:/bin/bash或/bin/sh,依发行版而定)。- 示例:
SHELL /bin/bash→ 新用户默认使用bash。
- 示例:
2.1.3 用户组与权限#
-
USERGROUPS_ENAB:是否为用户创建同名私有组(默认:yes)。- 作用:避免用户共享默认组(如
users),增强文件权限隔离。 - 示例:
USERGROUPS_ENAB yes→ 创建用户alice时自动创建组alice,并将用户加入该组。
- 作用:避免用户共享默认组(如
-
UMASK:家目录的默认权限掩码(默认:022)。- 计算方式:实际权限 = 777 - UMASK →
022对应755(rwxr-xr-x)。 - 示例:
UMASK 027→ 家目录权限为750(仅用户和组可访问)。
- 计算方式:实际权限 = 777 - UMASK →
2.2 密码策略配置#
此类参数控制密码的生命周期和强度,是系统安全的核心。
2.2.1 密码有效期#
-
PASS_MAX_DAYS:密码最大有效期(默认:99999,即永不过期)。- 安全建议:设置为 90 天(每季度更换一次)。
- 示例:
PASS_MAX_DAYS 90
-
PASS_MIN_DAYS:密码修改间隔(默认:0,即允许立即修改)。- 安全建议:设置为 7 天,防止用户频繁更换密码绕过策略。
- 示例:
PASS_MIN_DAYS 7
-
PASS_WARN_AGE:密码过期前警告天数(默认:7)。- 示例:
PASS_WARN_AGE 14→ 过期前 14 天开始提醒用户。
- 示例:
2.2.2 密码强度#
-
PASS_MIN_LEN:密码最小长度(默认:5 或 6,依发行版而定)。- 安全建议:设置为 10 以上,并结合 PAM 模块(如
pam_cracklib)增强复杂度。 - 示例:
PASS_MIN_LEN 12
- 安全建议:设置为 10 以上,并结合 PAM 模块(如
-
PASS_ALWAYS_WARN:即使密码未过期,登录时是否提示密码状态(默认:no)。- 示例:
PASS_ALWAYS_WARN yes→ 登录时显示密码剩余有效期。
- 示例:
2.3 登录会话设置#
此类参数控制用户登录过程中的行为,如超时时间、登录提示等。
-
LOGIN_TIMEOUT:登录提示符超时时间(秒,默认:60)。- 作用:防止未完成的登录会话长期占用终端。
- 示例:
LOGIN_TIMEOUT 30→ 30 秒无输入则断开连接。
-
MOTD_FILE:登录后显示的“每日消息”(MOTD)文件路径(默认:/etc/motd)。- 示例:
MOTD_FILE /etc/motd→ 用户登录后显示/etc/motd内容。
- 示例:
-
FAILED_LOGIN_DELAY:登录失败后的延迟时间(秒,默认:0)。- 安全建议:设置为 2 秒,缓解暴力破解风险。
- 示例:
FAILED_LOGIN_DELAY 2
2.4 影子文件(Shadow)相关配置#
影子文件(/etc/shadow)存储用户密码哈希,此类参数控制其加密方式和安全性。
-
ENCRYPT_METHOD:密码加密算法(默认:SHA512)。- 可选值:
MD5(不安全,不推荐)、SHA256、SHA512(推荐)。 - 示例:
ENCRYPT_METHOD SHA512→ 使用 SHA-512 加密密码。
- 可选值:
-
SHA_CRYPT_MIN_ROUNDS/SHA_CRYPT_MAX_ROUNDS:SHA 加密的迭代次数(默认:5000/50000)。- 作用:次数越高,破解哈希的难度越大(但会增加 CPU 开销)。
- 示例:
SHA_CRYPT_MIN_ROUNDS 10000、SHA_CRYPT_MAX_ROUNDS 20000
3. 常见实践#
以下是日常管理中高频使用的配置场景:
3.1 规范 UID/GID 分配#
- 保持
UID_MIN=1000、UID_MAX=60000,避免手动指定 UID 时与系统账户冲突。 - 系统账户(如数据库、Web 服务)使用
SYS_UID_MIN-SYS_UID_MAX范围内的 UID,例如:useradd -r -u 1001 mysql # -r 表示系统账户,UID 1001 位于 100-999 范围内
3.2 强制密码定期更换#
将 PASS_MAX_DAYS 从默认的 99999 改为 90,并配合 PASS_WARN_AGE=14,确保用户及时更换密码:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 143.3 限制家目录权限#
通过 UMASK 控制家目录默认权限,例如 UMASK 027 确保其他用户无法访问:
UMASK 027 # 家目录权限为 rwxr-x--- (750)4. 最佳实践#
4.1 定期审计配置#
- 使用
grep检查关键参数是否符合安全要求:grep -E 'PASS_MAX_DAYS|PASS_MIN_LEN|ENCRYPT_METHOD' /etc/login.defs
4.2 结合 PAM 增强安全性#
/etc/login.defs 的部分参数(如密码复杂度)需依赖 PAM 模块(如 pam_cracklib)补充。例如,在 /etc/pam.d/system-auth 中添加:
password requisite pam_cracklib.so minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1(要求密码至少 12 位,包含大小写字母、数字和特殊字符)。
4.3 避免使用 deprecated 参数#
部分旧参数已被淘汰,例如 MD5_CRYPT_ENAB(已被 ENCRYPT_METHOD 取代),需确保配置文件中无此类参数。
4.4 保持配置一致性#
若管理多台服务器,建议通过 Ansible、SaltStack 等工具统一同步 /etc/login.defs,避免策略碎片化。
5. 示例配置#
以下是一个符合安全最佳实践的 /etc/login.defs 片段:
# 用户账户配置
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 100
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 100
SYS_GID_MAX 999
CREATE_HOME yes
HOME_DIR /home/%u
SHELL /bin/bash
USERGROUPS_ENAB yes
UMASK 027
# 密码策略
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
PASS_MIN_LEN 12
PASS_ALWAYS_WARN yes
# 登录会话设置
LOGIN_TIMEOUT 30
FAILED_LOGIN_DELAY 2
MOTD_FILE /etc/motd
# 影子文件配置
ENCRYPT_METHOD SHA512
SHA_CRYPT_MIN_ROUNDS 10000
SHA_CRYPT_MAX_ROUNDS 200006. 参考资料#
login.defs手册:man 5 login.defs- shadow-utils 官方文档:https://github.com/shadow-maint/shadow
- NIST 密码策略指南:SP 800-63B
- Linux PAM 文档:
man pam
通过本文的解析,相信你已掌握 /etc/login.defs 的核心配置逻辑。合理调整参数,不仅能规范用户管理,更能为系统筑牢安全防线。