Linux可通过pam_access.so模块结合IP/网段/终端类型实现地理级访问控制,配置/etc/security/access.conf规则,支持本地与远程登录区分、多入口加固及pam_time.so时段限制。

Linux系统本身不识别“地理位置”,但可通过用户登录来源的IP地址或网段,结合PAM模块实现等效的地理级访问控制。核心是用 pam_access.so 模块配合 /etc/security/access.conf,按IP、网段、终端类型甚至登录方式(本地/远程)精细放行或拦截。
启用pam_access并配置access.conf规则
该模块轻量、生效快,无需重启服务,适用于SSH、控制台等多种登录入口。
- 编辑
/etc/pam.d/sshd,在account段开头添加:account required pam_access.so - 创建或修改
/etc/security/access.conf,规则从上到下匹配,首条命中即生效。示例:
+ : @admin : 192.168.10.0/24<br>+ : deploy : 203.0.113.5<br>- : ALL : ALL
含义:仅 admin 组成员可从内网段登录,仅用户 deploy 可从指定公网IP登录,其余全部拒绝。
区分本地与远程登录(LOCAL关键字)
利用 origins 字段中的 LOCAL,能严格分离物理控制台、虚拟终端和网络连接,实现运维最小权限原则。
-
+ : root : LOCAL→ 允许 root 在 tty1、tty2 或图形控制台登录 -
- : root : ALL→ 拒绝 root 所有远程访问(含 SSH、Telnet) - 组合使用即可达成“root 仅限本地”的强策略,避免远程提权风险
防止绕过:同步加固其他入口
仅限制 SSH 不够——攻击者可能通过其他路径绕过IP检查。
-
sudo 权限:若普通用户可通过
sudo su -切换到受限账户,需在/etc/sudoers中限制命令,或启用pam_wheel.so控制 wheel 组 -
非SSH服务:如 vsftpd、httpd 若启用了 PAM 认证,也需在对应
/etc/pam.d/vsftpd等文件中加入pam_access.so - 云平台元数据接口:AWS EC2、阿里云等环境需关闭未授权的 IMDS v1 或限制 IMDS v2 token 有效期,防止凭证泄露后跳过IP限制
补充时段控制(pam_time.so)
若还需叠加时间维度(如只允许工作日 9:00–18:00 登录),可用 pam_time.so 模块:
- 在
/etc/pam.d/sshd的account段添加:account required pam_time.so - 编辑
/etc/security/time.conf,格式为:sshd;Al;@admin;Wk0900-1700;→ 表示 sshd 服务对 admin 组仅在工作日 9–5 放行 - 注意:时间不支持跨天写法(如 2200-0600 需拆成两行并显式列出 Mo–Sa)

















