You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible Tower执行任务触发sudo权限异常问题求助

Ansible Tower执行任务触发sudo权限异常问题求助

问题描述

我在RHEL 8.9上部署了最新版的Ansible Tower,但运行某些特定任务时,总会触发sudo权限相关的错误,错误详情如下:

{
    "module_stdout": "",
    "module_stderr": "sudo: /etc/sudo.conf is owned by uid 65534, should be 0\nsudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set\n",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1,
    "_ansible_no_log": false,
    "changed": false
}

我遇到问题的示例任务如下:

- name: Install cx_Oracle Python module
  pip:
    name: cx_Oracle
    state: present

- name: Execute SQL to get Schemas from DB
  ibre5041.ansible_oracle_modules.oracle_sql:
    username: "{{ db_username }}"
    password: "{{ db_password }}"
    mode: "{{ 'sysdba' if ar_orcl_db_sql_user|upper == 'SYS' else 'normal' }}"
    hostname: "{{ db_host }}"
    service_name: "{{ db_service_name }}"
    port: "{{ db_port }}"
    #sql: "SELECT username FROM dba_users"
    sql: "SELECT NAME FROM v$database"
  delegate_to: 127.0.0.1
  register: schema_result

奇怪的是,哪怕我注释掉其中任意一个任务,错误依然会出现。我已经检查过Tower所在机器上相关文件的权限和属主,看起来都是正常的:

$ ls -la /usr/bin/sudo
---s--x--x. 1 root root 165528 Dec  7  2021 /usr/bin/sudo

$ stat /usr/bin/sudo
File: /usr/bin/sudo
Size: 165528      Blocks: 328        IO Block: 4096   regular file
Device: ca02h/51714d    Inode: 9184962     Links: 1
Access: (4111/---s--x--x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:sudo_exec_t:s0
Access: 2024-02-23 12:17:03.876558806 +0000
Modify: 2021-12-07 12:02:43.000000000 +0000
Change: 2022-11-21 19:52:23.879128352 +0000
Birth: 2022-11-21 19:47:26.179931860 +0000

$ stat /etc/sudo.conf
File: /etc/sudo.conf
Size: 1786        Blocks: 8          IO Block: 4096   regular file
Device: ca02h/51714d    Inode: 8619263     Links: 1
Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2024-02-23 12:17:03.883558691 +0000
Modify: 2021-12-07 11:57:12.000000000 +0000
Change: 2022-11-21 19:52:23.873128307 +0000
Birth: 2022-11-21 19:47:26.165931757 +0000

请问我哪里考虑漏了?


可能的排查方向

根据你的描述,我整理了几个容易忽略的排查点:

  1. 确认任务的执行目标节点
    你的第一个任务没有设置delegate_to,默认会在Inventory中指定的受控节点上执行,而你只检查了Tower本机的sudo相关文件权限。如果这个任务是在其他节点运行,你需要登录到对应受控节点,检查/etc/sudo.conf和/usr/bin/sudo的属主、权限是否正常——错误提示里的uid 65534是nobody用户,很可能是目标节点上的这两个文件权限出了问题。

  2. 检查Tower执行环境的权限
    第二个任务是委托到Tower本机(127.0.0.1)执行的,哪怕注释第一个任务仍报错,要考虑Tower的执行用户(比如默认的awx用户)是否存在sudo配置异常:

    • 查看/etc/sudoers或/etc/sudoers.d/下的配置,确认awx用户是否有无需密码sudo的权限,或者配置是否有语法错误(可以用visudo -c检查)。
    • 有可能Tower的虚拟环境(比如Python venv)存在权限继承问题,尝试在Tower的执行环境中手动执行sudo命令,看是否能复现错误。
  3. SELinux上下文异常排查
    虽然你看到stat输出的SELinux上下文是正常的,但有时候SELinux的规则会导致权限拦截。可以临时执行setenforce 0关闭SELinux,再重新运行任务测试——如果问题消失,就需要调整SELinux的规则(比如用restorecon /usr/bin/sudo /etc/sudo.conf修复上下文,或者添加自定义规则)。

  4. 重新修复sudo的setuid权限
    有时候文件权限的显示和实际生效可能存在不一致(比如文件系统缓存问题),可以手动重新设置sudo的setuid位:

    chmod u+s /usr/bin/sudo
    chown root:root /etc/sudo.conf
    

    执行后重启机器或sudo服务,再测试任务。

  5. Tower作业模板配置检查
    检查你的Tower作业模板是否设置了错误的选项:比如是否强制使用了某个非root用户执行sudo,或者开启了become但配置的become_user不正确。

备注:内容来源于stack exchange,提问作者Budianto IP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:40:32