SetUIDビットを使用して、ファイルの所有者のアクセス許可でスクリプトを実行させることができます。所有者をrootに変更し、SetUIDビットを設定することで、特定のファイルを常にrootとして実行できるようにすることができます。SetUIDビットを設定するには:
chmod 4755 <filename>
マスク:4000はSetUID、0700は所有者rwx、0050と0005はグループおよびワールドrxです。
所有者以外のユーザーがこのファイルを編集できないようにする必要があります。編集できる場合は、ユーザーとして任意のコマンドを実行できるため、セキュリティ上のリスクがあります。
必要に応じて効果を上げるには、ファイルの所有者をrootに設定する必要もあります。
sudo chown root <filename>
この場合、<filename>
実行するスクリプトは何でもかまいません。実行可能である必要があります。実行可能でない場合、つまりスタンドアロンで実行するように設定されていないPythonプログラムを実行しようとしている場合は、それを起動するラッパーを使用する必要があります。
詳細情報: http: //en.wikipedia.org/wiki/Setuid
SetUIDビットの使用に関連するセキュリティリスクがいくつかあることに注意してください。説明が必要な場合は、さらにコメントを投稿してください。
コメント提供者は、おそらくこれはシェルスクリプトでは機能しないと指摘しています。代わりに、CやC++などのコンパイル言語からプロセスを呼び出すラッパーを使用する必要があります。
/* setuid_wrapper.cpp */
#include <unistd.h>
int main(int c, char * v[])
{
// the program to execute
// replace this with the program you want to call.
const char * executable = "/bin/false";
// arguments to pass to program
// MUST be null terminated, MUST start with executable path
const char * arguments[] = {executable, "arg1", "arg2", "etc...", NULL};
execv(executable, arguments);
perror("execv: ");
return 1;
}
コンパイル:
g++ -o setuid_wrapper setuid_wrapper.cpp
前の指示に従って、所有者をrootに変更し、SetUIDビットを設定し、必要に応じてスクリプトの代わりにそれを実行するようにシステムを構成します。