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

Ansible执行shell模块遇Permission denied错误排查求助

问题:Ansible加载环境文件时出现权限拒绝错误

我需要以foouser身份运行command1,该命令的环境变量配置在.some_env文件中,因此需要先加载该文件。编写的Ansible任务如下:

- name: Run something
  become_user: foouser
  become_method: sudo   
  shell: . /path/to/dir/.some_env; command1

但执行时出现错误:

/bin/sh: /path/to/dir/.some_env: Permission denied

该文件权限显示正常:

-rwxr-x--- 1 foouser foogroup 2107 Mar 20 07:08 .some_env

我尝试了以下方法但均无效:

  • 使用source代替.
  • 在环境文件顶部添加shebang

请问为何会出现权限拒绝的错误?


解答

问题出在父目录的权限上,而非.some_env文件本身的权限。

虽然.some_env文件对foouser有读/执行权限,但如果它所在的/path/to/dir/目录没有给foouser提供进入权限(即执行权限x),用户根本无法访问到该文件。

验证方法:切换到foouser身份,直接尝试进入目录并读取文件:

sudo su - foouser
cd /path/to/dir/
cat .some_env

如果这里也出现权限拒绝,就说明目录权限存在问题。

解决方法:

  • 给目标目录添加foouser或foogroup的执行权限:
    chmod u+x /path/to/dir/
    # 若需开放组权限则执行
    chmod g+x /path/to/dir/
    
  • 或者在Ansible任务中先通过file模块修正目录权限:
    - name: Fix directory permissions for env file
      file:
        path: /path/to/dir/
        mode: '0750'
        owner: foouser
        group: foogroup
    

补充说明:用.或source加载文件时,shell只需要文件的读权限(不需要执行权限),所以之前添加shebang或修改文件执行权限的操作并无作用,核心问题是目录的访问权限。


内容的提问来源于stack exchange,提问作者snailrider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:05