可能性のある複製:
パスワードなしでSudoを使用してアプリケーションを実行する方法
定期的に実行するさまざまなシステムタスクを実行するスクリプトを作成しましたが、root特権コマンドを実行しているため、スクリプトを実行するにはSudoを使用する必要があります。 make Sudoを追加すると、実行するたびにパスワードを入力せずにこの1つのファイルを実行できますか?
パスワードなしでコマンドを実行することに関する質問があることは知っていますが、パスワードなしでファイルを実行することで質問を見つけることができませんでした。
セキュリティリスクは承知していますが、信頼できるコンピューターで自宅にいます。
john ALL = NOPASSWD: /home/john/.script/hibernate.sh
を/etc/sudoers
に追加しましたが、コマンドSudo sh /home/john/.script/hibernate.sh
を実行しても、パスワードの入力を求められます...
Sudoersファイルを編集するには、安全な編集環境にvisudo
を使用します。このスクリプトはvi
のラッパーであり、ファイルを保存するときに構文チェックも行い、有効なsudoersファイルを無効なファイルで上書きすることはできません。
次のような行を追加します。
username ALL= NOPASSWD: /path/to/your/script
「ALL =」には詳細があり、問題のユーザーがローカル(コンソールまたは端末)またはリモート(sshなど)からログインしたときに許可が与えられることを指定します。
完全を期すために、ファイルのパーミッションに 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
を付ける必要はありません。
「NOPASSWD」タグが必要です。
Visudoを使用して、ファイルの最後に次のように設定します。
ユーザー名ALL = NOPASSWD:/ bin/echo
ユーザー名をユーザー名に、/ bin/echoを実行するコマンドに置き換えます。
スクリプトではなく、sudoersファイルに実行しているプログラムへのフルパスを追加する必要があります。私はそれが午後休止だと仮定しているので:
john ALL=NOPASSWD: /usr/sbin/pm-hibernate