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
相关产品推荐
相关产品推荐

