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 globを使用することは最終的に安全ではありません。
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
実際に許可
$ sudo systemctl start database@awsesomeapp unrelatedservice
使用しても問題が解決しないようですsudo
(私が間違っていることを願っています)。 root以外のユーザーがsystemd
サービスを制御できるようにする他の方法はありますか?
とにかく、CentOS 7システムでこれを行う必要があり、将来はRHEL7システムでも実行する必要があります。私はArch Linux用のソリューションにも興味があります。
ベストアンサー1
少なくとも私の考えでは、Sudoersファイルはそのように動作しません。 Sudoersファイルは、そのコマンドで使用できるパラメータを指定するのではなく、コマンドへの特定のアクセスを提供するように設計されています。
ルートとして実行するスクリプトを作成し、次のコマンドを実行します。
/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