pam@pam_securetty.so
pam_securetty.so 是 Linux PAM(Pluggable Authentication Modules)框架中的一个模块,主要用于限制 root 用户只能从指定的“安全终端”(secure tty)登录。它通过检查登录请求的终端设备是否在 /etc/securetty 文件中列出,来决定是否允许 root 用户登录。这种机制最初设计是为了增强系统安全性,防止 root 从不安全的终端(如远程网络连接)直接登录。
功能
- 限制
root登录终端:pam_securetty.so检查当前登录请求的终端设备(tty)是否被认为是“安全的”。 - 依赖
/etc/securetty文件:该文件列出了允许root登录的终端设备名称(如tty1、pts/0)。 - **仅影响
root**:通常只对 UID 为 0 的用户(即root)生效,对普通用户无限制。
使用场景
- 在需要严格控制
root登录的环境中,例如物理服务器或嵌入式系统。 - 防止
root通过不安全的远程终端(如某些 telnet 配置)登录。
工作原理
- 当应用程序(如
login或sshd)调用 PAM 的auth栈时,pam_securetty.so被触发。 - 模块检查当前登录的终端设备名称(例如
tty1或pts/0)。 - 将终端名称与
/etc/securetty文件中的条目进行比对:- 如果终端在文件中列出,认证通过。
- 如果不在,针对
root用户返回失败。
- 返回结果给 PAM 框架,由控制标志决定后续流程。
配置示例
在 PAM 配置文件中(例如 /etc/pam.d/login),可能会看到如下条目:
auth required pam_securetty.so
- 类型:
auth表示用于认证阶段。 - 控制标志:
required表示此模块必须通过,否则认证失败。 - 模块:
pam_securetty.so。
/etc/securetty 文件
该文件是一个纯文本文件,每行指定一个允许 root 登录的终端名称。示例内容:
tty1
tty2
tty3
pts/0
tty1,tty2等:物理终端。pts/0:伪终端,通常用于 SSH 或图形界面。
如果文件为空或不存在,pam_securetty.so 默认拒绝 root 从任何终端登录。
参数
pam_securetty.so 支持少量可选参数:
debug:启用调试输出,将日志写入系统日志。noconsole:忽略控制台设备(较少使用)。
示例:
auth required pam_securetty.so debug
注意事项
- 现代系统的局限性:
- 在现代 Linux 发行版中,
pam_securetty.so的使用逐渐减少,因为 SSH 等远程登录工具已成为主流,而 SSH 默认不允许root直接登录(通过PermitRootLogin配置控制)。 - 伪终端(
pts/*)的广泛使用也削弱了其作用,因为需要手动在/etc/securetty中列出所有可能的pts设备并不实用。
- 在现代 Linux 发行版中,
- 兼容性:
- 如果系统中没有
/etc/securetty文件,模块行为可能因实现而异(某些版本可能默认允许登录)。
- 如果系统中没有
- 安全性:
- 依赖静态文件配置,可能无法应对动态环境,建议结合其他模块(如
pam_tally2.so)增强防护。
- 依赖静态文件配置,可能无法应对动态环境,建议结合其他模块(如
典型应用
假设系统配置如下:
/etc/pam.d/login中包含auth required pam_securetty.so。/etc/securetty只列出tty1。
结果:
root只能通过物理终端tty1登录。- 从
tty2或pts/0(如 SSH)登录时,pam_securetty.so会拒绝。
总结
pam_securetty.so 是一个简单但历史悠久的 PAM 模块,适合需要限制 root 登录终端的场景。然而,随着现代安全实践(如禁用 root 远程登录、强制使用 sudo)的普及,其重要性已有所下降。