3-ocserv基于pam_access模块进行用户访问控制

发布时间 2023-10-15 17:28:22作者: 一个坏的芒果

ocserv基于pam_access模块进行用户访问控制

一、配置 ocserv 的 PAM 文件

  1. 打开 /etc/pam.d/ocserv

    vim /etc/pam.d/ocserv
    
  2. 在默认/etc/pam.d/ocserv配置中的@include common-auth下方插入pam_access.so 模块进行用户访问控制:

    auth required pam_access.so
    

    请确保这行在 auth 部分的适当位置,因为pam的配置从上往下执行,因此需要注意执行的先后顺序

  3. 重启ocserv服务

    systemctl restart ocserv
    

二、配置access模块

  1. 编辑前,建议备份原始文件

    cp /etc/security/access.conf /etc/security/access.conf.bak
    
  2. 编辑/etc/security/access.conf 文件来定义用户的访问控制规则:

+ : zhangsan : ALL
+ : yunwei : ALL
- : ALL : ALL
  1. access模块配置说明:

    + : 允许的用户 : 允许的服务
    - : 禁止的用户 : 禁止的服务
    
    • +:表示允许访问的规则。
    • -:表示禁止访问的规则。
    • 允许的用户:指定被允许或禁止访问的用户名。可以使用单个用户名,也可以使用用户名的通配符(例如 * 表示所有用户)。
    • 允许的服务禁止的服务:指定被允许或禁止访问的服务。使用 ALL 表示所有服务。也可以指定特定的服务,例如 sshd 表示 SSH 服务,ocserv表示 ocserv服务。

三、脚本添加允许访问所有服务的用户

  1. 基于用户添加的脚本:./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
    
  2. 添加用户权限、等待指定小时数后删除用户权限的脚本 ./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 小时后被删除。"