私はDebian(カーネル2.6.32-5-686)でSambaを制御するための小さなWebインターフェースを書いています。私は、ユーザーの追加、フォルダの作成などの簡単なスクリプトを書くことから始めました。 rootで実行するとうまくいきます。ただし、ネットワーク(apache + php)を介して実行される一部の機能を使用する場合はphp: shell_exec()
機能しません。それらは次のとおりです。
#!/bin/sh
#archive the userprofile
cp /home/samba/profile/$1 /home/samba/archive/$1
smbpasswd -LU $1 -x
userdel $1
exit 0
sudoを使ってスクリプトを実行してみましたが、うまくいかないようです。次の行を追加しました。 (jupiterはサーバー名です。)
%sudo jupiter=(ALL)NOPASSWD:/bin/<script>
/etc/sudoers ファイルに移動し、www-data ユーザー sudo グループに何も指定しないでください。
それから私が読むべき場所chmod 4755
と台本を読んだ。chown
まだ役に立たない。
この時点で私は問題が何であるか疑問に思ってSTDERRをファイルにリダイレクトしました。ユーザーを削除し、彼の共有を保持するために、cp
およびを呼び出す小さなスクリプトを実行しました。すべての通貨は終了コード1を返します。smbpasswd
userdel
何問題が発生しました。 STDERRが私にヒントを与えました。
userdel: cannot lock /etc/passwd; try again later.
これは*.lockファイルによって引き起こされたようですが、/ etc /フォルダにはそのファイルはありません。
この時点で私は少しイライラして、www-dataをルートグループに追加してより多くのroot権限を与えようとしました。まだ状況が進展していません。
これまでの進捗のため、次に何をすべきかわかりません。私の質問は次のとおりですwww-dataユーザーが実行するにはroot権限を必要とする簡単なスクリプトをどのように取得できますか?私はこれが/ etc / passwdファイルに問題がある可能性があると思います。ルートだけがファイルを変更する権限を持っていると想像できるからです。
ベストアンサー1
私の答えはその行にのみ関連しています
sudo jupiter=(ALL)NOPASSWD:/bin/<script>
sudo
この行により、ユーザーは認証なしでホスト上のすべてのユーザーとして実行できます。私の考えでは、これをしたくないと思います。/bin/<script>
juptier
私が正しく理解したら、ユーザーはrootとしてwww-data
実行されることを望みます/bin/<script>
。この場合、適切な行は次のようになります。
www-data jupiter=(root) NOPASSWD:/bin/<script>
これで、以下を呼び出して特権/bin/<script>
モードでwww-data
実行できます。root
www-data:~ $ sudo /bin/<script>
またはshell_exec("sudo /bin/<script>")
PHPスクリプトを介して(セキュリティの問題について心配してください)。
詳しくはman sudoers
オンライン版をご覧ください。sudoers.man。迅速な理解のために、このセクションを確認することをお勧めしますEXAMPLES
。