Articles
cp:通常のファイルを作成できません:アクセスが拒否されました
On 2月 15, 2021 by admin ApacheサーバーでPHPスクリプトを実行していますが、スクリプトからいくつかのファイルをコピーする必要があります(実行するにはファイルをコピーするBashスクリプト)。ディレクトリ/tmp
に問題なくコピーできますが、/tmp/foo
にコピーしたい場合、次のエラーが発生します:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
ディレクトリ/tmp
と/tmp/foo
の権限が設定されている場合同じ値に。
何が問題なのか知っていますか?
コメント
回答
/tmp
ディレクトリすべてのユーザーに対するすべてのアクセス許可(読み取り/書き込み)があります。ただし、自分のアカウントで/tmp/foo
を作成した場合は、自分専用の権限があります。他のユーザー(またはプログラム)が書き込み可能にする場合は、次のコマンドで権限を変更します。
chmod 777 /tmp/foo
以前からこのディレクトリ内にある他のファイルについては、上記のコマンドに-R
フラグを追加してください。
更新:このコマンドを使用して、/tmp/foo
の所有者を自分の所有者からapacheのデフォルトユーザーに変更します:
sudo chown www-data:www-data /tmp/foo -R
また、apache2の構成をチェックして、phpスクリプトを実行するためのユーザーを確認してください。
コメント
- 回答ありがとうございますが、機能しません。 / tmp / fooのアクセス許可を777に設定しましたが、それでも同じエラーが発生します。通常のユーザーとしてスクリプトを実行すると、問題ありません。しかし、問題は、phpスクリプトから実行した場合です
- スクリプトを表示できますか? phpまたはphp-fpmを使用していますか?問題は、デフォルトでは、自分のアカウントで
/tmp/foo
を作成しているときに、スクリプトを実行するためにapache構成ユーザーを使用するphpです。回答を更新します。もう一度確認してください。 - phpスクリプト:<?php shell_exec(" bash /path/to/script.sh)?>およびscript.shは#!/ bin / bash cp /my/folder/file.txt / tmp / foo
- phpスクリプトの実行にapacheが使用しているユーザーを見つけるにはどうすればよいですか? phpスクリプトのbashコマンドwhoamiを実行すると、" apache "
- を取得できます。このコマンドの出力:ディレクトリに
foo
名がある場合はls -alh /tmp | grep foo
。
whoami
とll /tmp
/tmp
は、デフォルトでは常にroot用です。この場合、2つのコマンドの結果は関係ありません。これは、/tmp
がすべてのユーザーに対するすべての権限を持っているためですtmp
はroot用ですが、/tmp/foo
用ではありません。OPは、/tmp/foo
が属する別のユーザーとしてスクリプトを実行している可能性があります。