<p>通过pam_access.so和/etc/security/access.conf可实现用户级细粒度登录控制:在/etc/pam.d/sshd的account段添加account required pam_access.so accessfile=/etc/security/access.conf,再于access.conf中配置如+ : @ops : 192.168.10.0/24和- : @ops : ALL规则,即可限制运维组仅从办公网段登录。</p>

要让特定用户只能从办公 IP 段(比如 192.168.10.0/24)登录,核心是用 pam_access.so 模块配合 /etc/security/access.conf,并在 SSH 服务的 PAM 配置中启用它。这不是改防火墙或 sshd_config 的粗粒度拦截,而是基于登录来源做细粒度身份级控制,且对本地终端、SSH、甚至某些图形登录都可分别生效。
确认并启用 pam_access.so(针对 SSH 登录)
该模块默认不启用,必须手动加入 SSH 的 PAM 链路:
- 编辑 /etc/pam.d/sshd
- 在 account 段开头添加一行:
account required pam_access.so accessfile=/etc/security/access.conf - 不要加在 auth 或 session 段——只有 account 段才用于访问决策
- 保存后无需重启 sshd,reload 即可:
systemctl reload sshd
配置 /etc/security/access.conf 规则(按顺序匹配)
规则逐行解析,第一行命中即终止;语法为:权限 : 用户 : 来源。办公网段限制示例如下:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 允许运维组 @ops 仅从 192.168.10.0/24 登录:
+ : @ops : 192.168.10.0/24 - 立即拒绝该组所有其他来源(含公网、内网其他段、localhost):
- : @ops : ALL - 注意:ALL 包括 127.0.0.1 和 ::1,如需保留本机调试,可显式放行:
+ : @ops : 127.0.0.1(放在拒绝行之前)
验证与防锁死要点
配置后立刻生效,但容易误锁自己:
- 测试前,确保至少一个不受限账号(如 root 或另一运维账号)保持登录状态
- 从办公网段外机器尝试登录目标用户,应直接返回 Permission denied,不提示密码
- 检查日志定位失败原因:
tail -f /var/log/auth.log | grep pam_access(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS) - 常见失效原因:sshd 文件里写错成
auth required、access.conf 中 IP 写成192.168.10.*(不支持通配符)、或漏掉accessfile=参数
补充:避免被其他入口绕过
仅控 SSH 不够——用户可能通过其他方式间接获得权限:
-
禁用该用户的 shell 切换路径:确认
/etc/passwd中其 shell 不是/bin/bash,也不被普通用户sudo su - opsuser切换 -
图形界面(如 GDM)也需单独控制:若系统启用了图形登录,还需在
/etc/pam.d/gdm-password或对应显示管理器配置中同样加入 pam_access.so 行 - 不要依赖 hosts.allow/hosts.deny:那是 TCP 层过滤,无法区分同一 IP 下不同用户的登录意图,也不与 PAM 环境变量、时段等策略联动

















