ocserv基于pam_access模块进行用户访问控制
一、配置 ocserv 的 PAM 文件
-
打开 /etc/pam.d/ocserv
vim /etc/pam.d/ocserv -
在默认/etc/pam.d/ocserv配置中的
@include common-auth下方插入pam_access.so模块进行用户访问控制:auth required pam_access.so请确保这行在
auth部分的适当位置,因为pam的配置从上往下执行,因此需要注意执行的先后顺序 -
重启ocserv服务
systemctl restart ocserv
二、配置access模块
-
编辑前,建议备份原始文件
cp /etc/security/access.conf /etc/security/access.conf.bak -
编辑
/etc/security/access.conf文件来定义用户的访问控制规则:
+ : zhangsan : ALL
+ : yunwei : ALL
- : ALL : ALL
-
access模块配置说明:
+ : 允许的用户 : 允许的服务 - : 禁止的用户 : 禁止的服务+:表示允许访问的规则。-:表示禁止访问的规则。允许的用户:指定被允许或禁止访问的用户名。可以使用单个用户名,也可以使用用户名的通配符(例如*表示所有用户)。允许的服务和禁止的服务:指定被允许或禁止访问的服务。使用ALL表示所有服务。也可以指定特定的服务,例如sshd表示 SSH 服务,ocserv表示 ocserv服务。
三、脚本添加允许访问所有服务的用户
-
基于用户添加的脚本:
./script.sh ${username}#!/bin/bash # 检查是否提供了用户名作为参数 if [ "$#" -ne 1 ]; then echo "请提供一个用户名作为参数。" exit 1 fi # 获取用户名参数 username="$1" # 检查用户名是否已经存在于access.conf文件中 if grep -q "^+ : $username : ALL" /etc/security/access.conf; then echo "用户名 $username 已经存在于access.conf文件中。" else # 添加新规则到access.conf文件 sed -i "s/- : ALL : ALL/+ : $username : ALL/" /etc/security/access.conf # 将默认拒绝规则重新添加到文件末尾 echo "- : ALL : ALL" | tee -a /etc/security/access.conf > /dev/null echo "用户名 $username 已经添加到access.conf文件中。" fi -
添加用户权限、等待指定小时数后删除用户权限的脚本
./script.sh ${username} ${time}#!/bin/bash if [ "$#" -ne 2 ]; then echo "请提供用户名和等待时间(小时)作为参数。" exit 1 fi username="$1" time="$2" if grep -q "^+ : $username : ALL" /etc/security/access.conf; then echo "用户名 $username 已经存在于access.conf文件中。" else sed -i "s/- : ALL : ALL/+ : $username : ALL/" /etc/security/access.conf echo "- : ALL : ALL" | tee -a /etc/security/access.conf > /dev/null echo "用户名 $username 已经添加到access.conf文件中。" fi at now + "$time" hours <<< "sed -i '/^+ : $username : ALL/d' /etc/security/access.conf" echo "用户权限已经添加,并将在 $time 小时后被删除。"