PAM(Pluggable Authentication Modules)是 Linux 系统上用于为应用与服务提供动态认证支持的组件。系统的某些配置可能导致所配置的 PAM 认证过程失败,从而使 OCP-Agent 的 pos_proxy 进程执行命令失败。

问题现象

当 OCP-Agent 2.4.0 及以上版本运行在 redhat、centos、alios 7 等 Linux 操作系统时,

  • 添加主机,子任务失败且日志包含 sudo: pam_open_session: Permission denied 报错信息。

  • 部署集群,子任务失败且日志包含 sudo: pam_open_session: Permission denied 报错信息。

  • 部署 OBProxy ,某些子任务失败且日志包含 sudo: pam_open_session: Permission denied 报错信息。

可能原因

系统中所配置的 Session 类型的 PAM 模块在验证相关状态时失败,可能原因如下:

  • 验证 sudo 权限时失败: /etc/sudoers 文件未给相关用户配置充足的权限。

  • 验证系统资源限制的配置时失败: ulimit 命令或 /etc/security/limits.conf 文件配置了不合理的系统资源限制。

解决方法

  • 当无法判断具体原因时,依次尝试如下方法解决问题。

  • 当原因为验证 sudo 权限时失败时,执行如下操作给予相关用户充足的 sudo 权限。

    1. 使用 root 用户登录操作系统。

    2. 打开 /etc/sudoers 文件:

      vim /etc/sudoers
    3. 修改 root 与 admin 用户的权限,并保存文件:

      root  ALL=(ALL) ALLadmin ALL=(ALL) ALL
    4. 重启 OCP-Agent:

      export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py stop basesleep 10export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py start base
  • 当原因为验证系统资源限制的配置时失败时,可按如下两种方案进行操作。

    • 执行如下操作修改系统资源限制配置。

      1. 使用 root 用户登录操作系统。

      2. 查看内核允许的进程最大打开文件数。

        cat /proc/sys/fs/nr_open
      3. 进入 /etc/security/limits.conf 文件,配置小于 /proc/sys/fs/nr_open 的文件打开数限制:

        # 假设655360小于/proc/sys/fs/nr_opencat >> /etc/security/limits.conf <<EOF* soft nofile 655360* hard nofile 655360EOF
      4. 重启 OCP-Agent:

        export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py stop basesleep 10export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py start base
    • 执行如下操作移除 PAM 在 session 中对系统资源限制的验证 。

      注意

      • 此方法将移除 PAM 在 session 中对系统资源限制的验证,可能引入安全风险。

      • 此方法将在 debian/ubuntu 系统上使 ulimit 的配置不生效。

      1. 使用 root 用户登录操作系统。

      2. 打开 PAM 配置文件:

        vim /etc/pam.d/sudo
      3. 将以下行删除,并保存文件:

        session    required     pam_limits.so
      4. 重启 OCP-Agent:

        export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py stop basesleep 10export PYTHONPATH=/home/admin/ocp_agent/libs && cd /home/admin/ocp_agent && ./ocp_agentd.py start base