在Debian操作系统中,用户账户和密码的管理是通过PAM(Pluggable Authentication Modules,可插拔认证模块)框架来实现的。本文将介绍Debian管理账号信息的命令、设立密码、PAM 和 NSS,帮助读者了解如何创建和管理用户账户,并采取适当的措施来保护系统免受未经授权的访问。
下表是一些管理账号信息的重要命令:
命令 | 功能 |
---|---|
getent passwd user_name |
浏览 “user_name ” 的账号信息 |
getent shadow user_name |
浏览用户 “user_name ” 隐藏的账户信息 |
getent group group_name |
浏览 “group_name ” 的组信息 |
passwd |
管理账号密码 |
passwd -e |
为激活的账号设置一次性的密码 |
chage |
管理密码有效期信息 |
其中的一些功能只能被 root 使用。
在设置了 PAM 和 NSS 的系统上(例如 Debian salsa 机器),本地的 “/etc/passwd”、“/etc/group” 和 “/etc/shadow” 可能不会被系统激活使用。上述的命令即使处于这种环境下依旧是有效的。
一、好密码
在系统安装时建立一个账号或使用 passwd(1) 命令时,应该选择一个好密码,它应该由 6 到 8 个字符组成,其中包含下列根据 passwd(1) 设定的每个组合中的一个或多个字符。
- 小写字母
- 数字 0 到 9
- 标点符号
注意:密码中不要使用可以猜到的词。账号名、身份证号码、电话号码、地址、生日、家庭成员或宠物的名字、字典单词、简单的字符序列(例如 “12345” 或 “qwerty”)等都是糟糕的选择。
二、设立加密的密码
下面是一些用于 生成加盐的加密密码 的独立工具。
生成密码的工具:
软件包 | 流行度 | 大小 | 命令 | 功能 |
---|---|---|---|---|
whois |
V:26, I:259 | 387 | mkpasswd |
具备 crypt (3) 库所有特性的前端 |
openssl |
V:838, I:995 | 2294 | openssl passwd |
计算密码哈希 (OpenSSL). passwd (1ssl) |
三、PAM和NSS
现代的类 Unix 系统(例如 Debian 系统)提供 PAM (Pluggable Authentication Modules,插入式验证模块) 和 NSS(Name Service Switch,名称服务切换) 机制给本地系统管理员,使他们能够配置自己的系统。它们的功能可以概括为以下几点。
- PAM 给应用软件提供了一个灵活的认证机制,因此涉及到了密码数据的交换;
- NSS 提供了一个灵活的名称服务机制,它经常被 C 标准库使用,使例如 ls(1) 和 id(1) 这样的程序获得用户和组名称。
PAM 和 NSS 系统必须保持配置一致。PAM 和 NSS 系统中重要的软件包如下表:
软件包 | 流行度 | 大小 | 说明 |
---|---|---|---|
libpam-modules |
V:890, I:999 | 1005 | 插入式验证模块(基础服务) |
libpam-ldap |
V:1, I:6 | 249 | 允许 LDAP 接口的插入式验证模块 |
libpam-cracklib |
V:0, I:8 | 117 | 启用 cracklib 支持的插入式验证模块 |
libpam-systemd |
V:550, I:932 | 624 | 用于 logind 注册用户会话的插入式验证模块(PAM) |
libpam-doc |
I:0 | 1002 | 插入式验证模块(html 和 文本文档) |
libc6 |
V:925, I:999 | 12987 | GNU C 库:同样提供“名称服务切换”服务的共享库 |
glibc-doc |
I:9 | 3502 | GNU C 库:帮助页面 |
glibc-doc-reference |
I:4 | 13188 | GNU C 库:有 info、pdf 和 html 格式(non-free) |
libnss-mdns |
I:508 | 141 | 用于解析组播 DNS 名称的 NSS 模块 |
libnss-ldap |
V:0, I:6 | 265 | NSS 模块,用于使用 LDAP 作为一个名称服务的 |
libnss-ldapd |
I:15 | 129 | NSS 模块,用于使用 LDAP 作为一个名称服务的(libnss-ldap 的新 fork) |
注意:
- 可以使用 “aptitude search ‘libpam-|libnss-‘” 命令查看更多的相关软件包。NSS 缩写也可能意味着 “Network Security Service,网络安全服务”,它不同于 “Name Service Switch,名称服务切换”;
- PAM 是用来为每个程序使用系统范围的默认值来初始化环境变量的最基础方法;
- 在 systemd 下, libpam-systemd 软件包被安装用来管理用户登录,通过为 logind 在 systemd 控制组层级中注册用户会话来实现。
1、PAM 和 NSS 访问的配置文件
下表是一些 PAM 和 NSS 访问的重要配置文件:
配置文件 | 功能 |
---|---|
/etc/pam.d/program_name |
为 “program_name ” 程序设置 PAM 配置; |
/etc/nsswitch.conf |
为每个服务条目设置 NSS 配置。 |
/etc/nologin |
通过 pam_nologin (8) 模块限制用户登录 |
/etc/securetty |
通过 pam_securetty (8) 模块限制 root 访问 tty |
/etc/security/access.conf |
通过 pam_access (8) 模块设置访问限制 |
/etc/security/group.conf |
通过 pam_group (8) 模块设置基于组的限制 |
/etc/security/pam_env.conf |
通过 pam_env (8) 模块设置环境变量 |
/etc/environment |
通过带有 “readenv=1 ” 参数的 pam_env (8) 模块设置额外的环境变量 |
/etc/default/locale |
通过带有 “readenv=1 envfile=/etc/default/locale ” 参数的 pam_env (8) 模块设置语言环境值(在 Debian 系统中) |
/etc/security/limits.conf |
通过 pam_linits (8) 模块设置资源限制(ulimit、core 等等) |
/etc/security/time.conf |
通过 pam_time (8) 模块设置时间限制 |
/etc/systemd/logind.conf |
设置systemd 的登录管理器配置 |
密码选择的限制是通过 PAM 模块 pam_unix(8) 和 pam_cracklib(8) 来实现的。它们可以通过各自的参数进行配置。
注意:PAM 模块在文件名中使用后缀 “.so”。
2、现代的集中式系统管理
现代的集中式系统管理可以使用集中式的轻量目录访问协议(LDAP)服务器进行部署,从而通过网络管理许多类 Unix 和 非类 Unix 系统。轻量目录访问协议的开源实现是 OpenLDAP 软件。
LDAP 服务器使用带有 PAM 和 NSS 的libpam-ldap 和 libnss-ldap 软件包为 Debian 系统提供账号信息。需要一些动作来启用 LDAP。
- 通过运行一个程序,例如独立的 LDAP 守护进程 slapd(8),来建立集中式的 LDAP 服务器;
- 在 “/etc/pam.d/” 目录中的 PAM 配置文件里,使用 “pam_ldap.so” 替代默认值 “pam_unix.so”;
- Debian 使用 “/etc/pam_ldap.conf” 作为 libpam-ldap 的配置文件,“/etc/pam_ldap.secret” 作为保存 root 密码的文件;
- 在 “/etc/nsswitch.conf” 文件中改变 NSS 配置,使用 “ldap” 替代默认值(“compat” 或 “file”);
- Debian 使用 “/etc/libnss-ldap.conf” 作为 libnss-ldap 的配置文件;
- 为了密码的安全,必须让 libpam-ldap 使用 SLL(或 TLS)连接;
- 为了确保 LDAP 网络开销数据的完整性,必须让 libpam-ldap 使用 SLL(或 TLS)连接;
- 为了减少 LDAP 网络流量,应该在本地运行 nscd(8) 来缓存任何 LDAP 搜索结果。
类似地,可以使用其它方法来设置另一种集中式的系统。
同 Windows 系统集成用户和组:
- 通过 winbind 和 libpam_winbind 软件包访问 Windows domain 服务;
- 同古老的类 Unix 系统集成用户和组。
3、为什么GNU su不支持wheel组
这是在旧的 “info su” 底部 Richard M. Stallman 所说的一句名言。别担心:Debian 系统中当前的 su 命令使用了 PAM,这样当在 “/etc/pam.d/su” 中启用了带有 “pam_wheel.so” 的行后,就能够限制非 wheel 组的用户 su 到 root 组的能力。
4、严格的密码规则
安装 libpam-cracklib 软件包能够强制使用严格的密码规则。在一个典型的 GNOME 系统,将会安装 libpam-gnome-keyring,”/etc/pam.d/common-password” 看起来像:
# here are the per-package modules (the "Primary" block) password requisite pam_cracklib.so retry=3 minlen=8 difok=3 password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt # here's the fallback if no module succeeds password requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around password required pam_permit.so # and here are more per-package modules (the "Additional" block) password optional pam_gnome_keyring.so # end of pam-auth-update config