web-dev-qa-db-ja.com

パスワードなしでSudoでファイルを実行する方法は?

可能性のある複製:
パスワードなしでSudoを使用してアプリケーションを実行する方法

定期的に実行するさまざまなシステムタスクを実行するスクリプトを作成しましたが、root特権コマンドを実行しているため、スクリプトを実行するにはSudoを使用する必要があります。 make Sudoを追加すると、実行するたびにパスワードを入力せずにこの1つのファイルを実行できますか?

パスワードなしでコマンドを実行することに関する質問があることは知っていますが、パスワードなしでファイルを実行することで質問を見つけることができませんでした。

セキュリティリスクは承知していますが、信頼できるコンピューターで自宅にいます。

john ALL = NOPASSWD: /home/john/.script/hibernate.sh/etc/sudoersに追加しましたが、コマンドSudo sh /home/john/.script/hibernate.shを実行しても、パスワードの入力を求められます...

2
codesmith

Sudoersファイルを編集するには、安全な編集環境にvisudoを使用します。このスクリプトはviのラッパーであり、ファイルを保存するときに構文チェックも行い、有効なsudoersファイルを無効なファイルで上書きすることはできません。

次のような行を追加します。

username ALL= NOPASSWD: /path/to/your/script

「ALL =」には詳細があり、問題のユーザーがローカル(コンソールまたは端末)またはリモート(sshなど)からログインしたときに許可が与えられることを指定します。

7
Sparr

完全を期すために、ファイルのパーミッションに setuid bitを設定することで同様の効果を達成できます。

少し注意が必要なのは、セキュリティ上の理由により、スクリプトのsetuidビットがカーネルによって無視されるため、Cで小さなラッパープログラムをコンパイルし、それを使用してスクリプトを呼び出す必要があることです。これをrunscript.cとして保存します:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}

それでコンパイルします

gcc runscript.c -o runscript

実行可能ファイルにsetuidビットを設定します。

Sudo chown root:root runscript
Sudo chmod 4755 runscript

スクリプトを変更できる人は誰でも任意のプログラムを実行できるため、スクリプトがrootによってのみ書き込み可能であることを確認することも重要です。

Sudo chown root:root /path/to/script.sh
Sudo chmod 0711 /path/to/script.sh

以下に、ラッパープログラムコードを入手した記事を示します。 シェルスクリプトのsetuid

セキュリティ面では、両方のアプローチ(Sudoを使用するアプローチとsetuidを使用するアプローチ)はかなり悪いですが、おそらくホームマシンでは問題ありません。違いは、システムのeveryユーザーは、setuidにいなくてもsudoersコマンドを実行できることです。ファイル。また、明らかに、コマンドの前にSudoを付ける必要はありません。

3
Sergey

「NOPASSWD」タグが必要です。

Visudoを使用して、ファイルの最後に次のように設定します。

ユーザー名ALL = NOPASSWD:/ bin/echo

ユーザー名をユーザー名に、/ bin/echoを実行するコマンドに置き換えます。

0
ed.

スクリプトではなく、sudoersファイルに実行しているプログラムへのフルパスを追加する必要があります。私はそれが午後休止だと仮定しているので:

john ALL=NOPASSWD: /usr/sbin/pm-hibernate
0
elkoraco