ユーザーとグループtest:testがあります
シェルでテストとしてログインしているときにgit pull origin master
、npm install
これを実行すると動作します。
Caddy(ウェブサーバー)から呼び出されるCGIスクリプトもあります。同じことを行います。同じユーザーとしてしかし、それでも権限エラーが発生します。
これをデバッグするにはどうすればいいでしょうか。シェル内では権限を取得できるのに、生成されたスクリプトから実行しているときには権限を取得できない理由を示すコマンドは何ですか?
スクリプトのエラーは
Could not create directory '/home/test/.ssh'.
/home/test/.ssh
すでに存在し、キーなどもすでに持っています。シェルからは正常に動作します。
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'
しかし、やはりシェルから実行するとエラーは発生しません。
id
スクリプトがどのユーザーで実行されているか確認できるようにスクリプトに追加しました。
uid=1000(test) gid=1000(test) groups=1000(test),27(sudo)
id
これはシェルに入力したときに出力されるものと全く同じです
他に何を探せばいいでしょうか?
答え1
問題はcaddyがsystemdから実行され、
ProtectHome=true
つまり、/home/test
生成されたスクリプトには立ち入り禁止です。正しい解決策が何であるかはわかりませんが、少なくとも問題の原因を追跡しました。