権限について質問があります。
ディストリビューション: Debian GNU/Linux 6.0.4(圧縮)
したがって、PHPスクリプトを含むフォルダがあります。フォルダとファイルの両方がUser1の所有です。
私がこうすれば:
php script.php
権限拒否エラーが発生します。十分です。私はユーザー1ではなくユーザー2です。もし私がするなら
sudo php script.php
私のユーザーアカウントはこれに設定されているので動作します。
だから私は、「デバッグ」モードのようなものを出力するためにオプションのパラメータを受け入れるようにこのスクリプトを作成しました。
sudo php script.php debug
一部のコンテンツをCLIに出力します。今まではそんなに良くなった。
しかし、時にはスクリプトの出力が長すぎて上にスクロールして最初から出力を見ることができないので、出力をファイルにリダイレクトできるようにしたいです。
だから、次のことを試しました。
これにより権限拒否エラーが発生しました。
sudo php script.php debug >> results.txt
これは効果があります
sudo touch results.txt
sudo chown User1 results.txt
sudo chmod 777 results.txt
sudo php script.php debug >> results.txt
またはこれが機能します
sudo su -
php script.php debug >> results.txt
だから私が知りたいのは...最初の項目で権限拒否エラーが発生するのはなぜですか? sudo プレフィックスのポイントは、PHP スクリプトの実行に機能する root でコマンドを実行することです。しかし、これがリダイレクトの実行まで拡張されていないようです。誰かが理由を説明できますか?
編集する:
だから何かを見つけました。ここに別の投稿がありますこれは働きます:
sudo php script.php debug | sudo tee results.txt
それに対する答えは、リダイレクトがsudoの代わりに私のユーザーとして実行され続けているという疑いを確認しますが、理由は説明しません。理由を説明できる人はいますか?
答え1
コマンドラインで作業すると、シェルは最初にリダイレクトを実行し、次に外部コマンドを実行します。これは、ユーザー権限を変更せずにリダイレクトが行われることを意味します(シェルは後でsudoの実行を気にしないためです)。
簡単に実行できるsudoコマンドは、>> results.txt
これを確認せずに/ dev / stdoutに対して変更されたファイル記述子を取得します。
2つの可能性:
- あなた(user2)が書き込むことができるファイル/ディレクトリにリダイレクトされます。
- これを行うには、ラッパースクリプトを作成し、sudoを介してラッパースクリプトを呼び出します。