mod_perlを介してWebブラウザで実行されている他のスクリプトから分岐したPerlスクリプトがあります。sudo service X stop
バックアップリカバリプロセスの一部として分岐したスクリプト(最終的にはApacheとして実行されます)が必要です。 Xサービスは回復に依存します。 Windowsではうまくいきましたが、CentOSに移植するとタイトルにエラーが表示されます。
設定:
- sudoersファイルがコメントアウトされました。
# Defaults requiretty
- sudoersファイルには
apache_usr localhost=(root) NOPASSWD: /sbin/service X stop
(visudo -c
チェックによって)他の行はapache_usr
ありません。
私が試したこと:
sudo /sbin/service
sudo service
フォークされたプロセスだけでなく- 注釈付きまたはなしのsudoersファイル
Defaults !visiblepw
- sudoersファイルで上記のNOPASSWD行を
(ALL)
使用してください。(root)
また何を試すことができますか?
答え1
簡単に言えば、これはsudoが設計された方法です。ねえ。
ネットワーク接続/高速DNSサーバーが存在しない場合の遅延を避けるために、ホストの検索は少し異なります。
コンピュータ名が「salt」の場合、正しいsudoers行は次のようになります。
apache_usr salt=(root) NOPASSWD: /sbin/service X stop
つまり、localhostはsudoerの有効なホスト名ではありません。
答え2
「sudoersファイルがコメントアウトされました」と言われました# Defaults requiretty
。
requiretty
あなたのsudoバージョンがデフォルトでsudoを有効にした場合(私のバージョンはそうです)、何の影響もありません。関連ユーザーにターゲットの基本仕様を使用します。
Defaults:apache_usr !requiretty
答え3
私が書いたときにALL=(root)
効果がありました。スクリプトが停止しようとしているサービスと同じサーバー上で実行されていても同じです。デフォルトのIP以外のIPからブラウザにアクセスしましたが、それでも得られたping -c 1 localhost
結果を実行してみると、127.0.0.1
この変更がなぜ必要なのか本当に気になります。