dba
グループのユーザーがdatabase@
サービスを制御できるようにする必要があります。 この関連する質問 への答えは、systemctl
ファイルで許可したいすべてのsudoers
"動詞"をリストすることですが、これは私のこれは、システムにどのデータベースが存在する可能性があるのかが事前にわからないためです。たとえば、
%dba = /usr/bin/systemctl start database@awsesomeapp
%dba = /usr/bin/systemctl start database@anotherawsesomeapp
%dba = /usr/bin/systemctl start database@yetanotherawsesomeapp
%dba = /usr/bin/systemctl start database@wowyetanotherawsesomeapp
# ... other "verbs" omitted for brevity
将来存在する可能性のあるインスタンスは対象外であり、dbaは
$ Sudo systemctl start database@omgwowyetanotherawsesomeapp
とにかく、私は特定のシステムをいじるよりも、パッケージの点でもっと考えています。
この 別の関連する質問へのすばらしい答え に示されているように、これにSudoグロブを使用することは最終的に安全ではないことに注意してください。
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
許可します
$ Sudo systemctl start database@awsesomeapp unrelatedservice
Sudo
を使用しても問題は解決しないと思います(間違いはあると思いますが)。非rootユーザーがsystemd
サービスを制御できるようにする他の方法はありますか?
それが価値があることについて、私はこれをCentOS 7システムで、そして将来的にはRHEL7システムで行う必要があります。 Arch Linuxで機能するソリューションにも興味があります。
Sudoersファイルはそのように機能しないか、または私には思えます。 Sudoersファイルは、特定のコマンドにアクセスできるようにするためのものであり、そのコマンドに使用できる引数を指定するためのものではありません。
Rootとして実行し、これを実行するスクリプトを作成します。
/usr/bin/systemctl start database@
スクリプトに、anotherawesomeappなどの引数を指定して、次のように実行します。
スクリプトの実行:/ usr/bin/systemctl start database @ anotherawsesomeapp
/ etc/sudoersを使用してscript.shファイルを実行する権限をユーザーに付与します。
scriptuser ALL=(ALL) NOPASSWD: /path/to/script.sh
ユーザーは次のように実行できます。
sh script.sh anotherawsesomeapp
例:
AppName=$1
/usr/bin/systemctl start database@$AppName;
if [ $? != "0" ]
then;
echo "$AppName could not be started. Are you using the right application name?";
fi
SUID
に基づいて提案されたソリューション
Sudoでsystemctlを呼び出す上記のスクリプトを作成できます。スクリプトをrootが所有するようにします。 rootにSUID
権限を付与し、データベース管理者のグループ(dba)に読み取りと実行の権限を付与します。
グループまたは他の人に書き込み権限を与えないように注意してください。そうすると、スクリプトが変更され、Sudoで始まるものをすべて実行できるようになります。また、スクリプトが入力に関して防弾仕様であることを確認してください。
$ cat >> start_database.sh sudo/usr/bin/systemctl start database @ $ 1 (Ctrl + D)
このスクリプトは、引数が実際に提供されているかどうかを確認し、そうでない場合はUsage:メッセージを出力することで改善できます。また、SUID
を含むスクリプトなので、確認するのが適切です。引数に続く他のコマンドの挿入を避けるため。または、あなたが言及したアプリ関連の文字列の1つだけを入力として許可するようにしてください!
次に、スクリプトの権限が厳密に以下であることを確認する必要があります。
$ Sudo chown root:dba start_database.sh $ Sudo chmod ux、gw、o-rwx start_database.sh $ Sudo chmod u + s、g + rx start_database.sh
次に、正しい権限を確認します。
$ ls -la 。 。 。 -rwSr-x --- 1 root dba 35 Aug 2 19:11 start_database。 sh 。 。 。
要約すると、
1。 owner of the script is root
2。ファイル can be read and executed by the dba group members
3。 no-one else will be able to even read
それ。
4。 SUID
は、スクリプトが実行されている限り、スクリプトを実行するユーザーがrootになるになるようにします。
5。したがって、Sudoはパスワードを求めて停止しません。
どのような場合でも、複数のユーザーがいるシステムでは、許可が乱用される余地があるため、SUID
を非常に注意にしてください。