%20NOPASSWD%3A%20%2Fpath%2Fto%2Fshell.sh%20%E3%81%8C%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93.png)
Web インターフェイスの IPtables 管理を試行しています。
ファイルを作成しましたテスト
$output = shell_exec('sudo bash /usr/bin/iptables.sh 2>&1');
echo $output;
/usr/bin/iptables.sh に NOPASSWD を指定して、パスワードを使用せずに Apache 経由で sudo を使用してファイルを実行できるようにします。
sudo iptables -L
sudoers ファイル:
apache ALL=(root) NOPASSWD: /usr/bin/iptables.sh
しかし、まだエラーが発生しています
ローカル システム管理者からいつもの講義を受けていると思います。通常は次の 3 つに要約されます。#1) 他人のプライバシーを尊重する。#2) 入力する前に考える。#3) 大いなる力には大いなる責任が伴う。sudo: パスワードを読み取るにはターミナルが必要です。-S オプションを使用して標準入力から読み取るか、askpass ヘルパーを設定します{"mode":"full","isActive":false}
しかし、私が
apache ALL=(root) NOPASSWD: ALL
すべて正常に動作しています。
ディレクトリを再確認し、正確なパスを使用しました
[root@CentOS bin]# readlink -f iptables.sh
/usr/bin/iptables.sh
まったく無知なので、誰か道順を教えてもらえませんか? :'(
答え1
呼び出すコマンドはファイルsudo
内の内容と一致する必要がありますsudoers
が、あなたの場合は一致しません。
を実行しようとしましたbash /usr/bin/iptables.sh
が、sudoers
の実行のみが許可されます/usr/bin/iptables.sh
。
答え2
/usr/bin/iptables.sh
ルートのルートを参照するので、sudo を試してください。
$output = shell_exec("sudo -u root sh -c 'bash /usr/bin/iptables.sh 2>&1'");
echo $output;