我有用户和组测试:测试
当我在以测试身份登录的 shell 中时,我可以执行此操作git pull origin master
,并且npm install
它可以工作。
我还有一个从 Caddy(一个 Web 服务器)调用的 CGI 脚本。它做同样的事情作为同一用户但仍然会出现权限错误。
我该如何调试它?哪些命令可以告诉我为什么在 shell 中可以获得权限,但在从生成的脚本运行时却得不到权限?
脚本中的错误是
Could not create directory '/home/test/.ssh'.
/home/test/.ssh
已经存在,并且已经有密钥等。它们在 shell 中工作正常
对于 npm 会出现这些错误
npm ERR! Linux 4.4.0-87-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! node v6.11.2
npm ERR! npm v3.10.10
npm ERR! path /home/test/.npm/_locks
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/home/test/.npm/_locks'
但是再次从 shell 运行没有错误。
我添加了id
脚本,以便查看脚本以哪个用户身份运行。它打印
uid=1000(test) gid=1000(test) groups=1000(test),27(sudo)
id
这与我在 shell 中输入时打印的内容完全相同
我还应该寻找什么?
答案1
问题是 caddy 是由 systemd 运行的,并且被设置为
ProtectHome=true
这意味着/home/test
生成的脚本无法访问。不确定正确的解决方案是什么,但至少找到了问题的根源