パスワードなしでシェルスクリプトを実行する

パスワードなしでシェルスクリプトを実行する

複数のコマンドを含むシェルスクリプトがあり、そのうちの1つにはルートが必要です。スクリプトの実行前または実行中にパスワードを入力せずにスクリプトを実行したいと思います。どうすればいいですか?

答え1

sudoは、特定のユーザーに権限を付与する一般的な方法です。

複数のコマンドを使用する簡単な例:ユーザーnagiosに特定のコマンドを使用して情報をダンプさせるようにしたいと思います。

nagios ALL=(root) NOPASSWD: /usr/bin/dmidecode, /bin/netstat -ntp

別の例として、複数のサーバーを管理し、同じサーバーを展開したいとします。 Sudoersそれぞれのファイル。そして、このルールは1つのサーバーでのみ有効です。

nagios srvpeug1208 =(root) NOPASSWD: /usr/bin/dmidecode, /bin/netstat -ntp

これでnagiosが起動します。srvpeu1208いくつかのコマンドを実行します。

答え2

他の人が述べたように、スクリプトに必要な鍵は、パスワードプロンプトなしでroot権限を必要とするコマンドをrootとして実行できることです。
これは通常、root権限を必要とする特定のコマンドを実行する必要がありますが、通常はそのユーザーにroot権限を付与したくない場合に* nixで一般的に発生する問題です。

Unixには、これに対する普遍的なソリューションであるsetuidビットがあります。バイナリでsetuidビットが設定/有効になると、バイナリは常にファイル所有者として実行されます(したがって、実行可能ファイルの所有者がルートの場合はルートとして実行されます)。
この権限を設定するには、root権限が必要なバイナリがroot所有であることを確認し、setuidビットを含めるように権限を設定します。

sudo chown root /path-to-binary
sudo chmod 4755 /path-to-binary

これで、呼び出し側のユーザーがパスワードを入力しなくても、バイナリが root として実行されます。バイナリの代わりにシェルスクリプトがある場合は、ここで説明されている回避策を使用する必要があります。setuidが機能しないのはなぜですか?

これはユーザーがファイルにアクセスするかどうかに関係なく機能します。この機能を特定のユーザーに制限するには、他のユーザーが提案したようにsudoers設定を変更できます。

答え3

いくつかのオプション:

  • これを読んでman sudoersスクリプトを実行するためにパスワードが必要ないので、sudoを使用してスクリプトを登録してください。 visudoの内容(そしてロックされない方法)を注意深く読んでください。そうしないと、sudoが機能しないときにここに戻り、ファイルの編集方法を尋ねられます。
  • golangsetuidビットを書き換えて使用してください。

関連情報