sudo:ttyが存在せず、Askpassプログラムが指定されていません。

sudo:ttyが存在せず、Askpassプログラムが指定されていません。

mod_perlを介してWebブラウザで実行されている他のスクリプトから分岐したPerlスクリプトがあります。sudo service X stopバックアップリカバリプロセスの一部として分岐したスクリプト(最終的にはApacheとして実行されます)が必要です。 Xサービスは回復に依存します。 Windowsではうまくいきましたが、CentOSに移植するとタイトルにエラーが表示されます。

設定:

  1. sudoersファイルがコメントアウトされました。# Defaults requiretty
  2. sudoersファイルにはapache_usr localhost=(root) NOPASSWD: /sbin/service X stopvisudo -cチェックによって)他の行はapache_usrありません。

私が試したこと:

  1. sudo /sbin/servicesudo serviceフォークされたプロセスだけでなく
  2. 注釈付きまたはなしのsudoersファイルDefaults !visiblepw
  3. 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この変更がなぜ必要なのか本当に気になります。

関連情報