![尽管用户和组相同,但 shell 中有权限,但是衍生程序中没有权限?](https://linux22.com/image/1539893/%E5%B0%BD%E7%AE%A1%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84%E7%9B%B8%E5%90%8C%EF%BC%8C%E4%BD%86%20shell%20%E4%B8%AD%E6%9C%89%E6%9D%83%E9%99%90%EF%BC%8C%E4%BD%86%E6%98%AF%E8%A1%8D%E7%94%9F%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%B2%A1%E6%9C%89%E6%9D%83%E9%99%90%EF%BC%9F.png)
我有用户和组测试:测试
当我在以测试身份登录的 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
生成的脚本无法访问。不确定正确的解决方案是什么,但至少找到了问题的根源