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 小时后被删除。"