sysvinit
では、次のようなsudoers
エントリで十分です。
%webteam cms051=/sbin/service httpd *
これにより、次のようなコマンドが可能になります。
Sudo service httpd status
Sudo service httpd restart
systemd
では、サービス名が最後の引数になります。つまり、サービスの再起動は次のように行われます。
systemctl restart httpd.service
当然、コマンドをsystemctl * httpd.service
として定義しても機能すると考えていましたが、systemctl restart puppet.service httpd.service
のようなものは許可されますが、これは望ましい効果ではありません。
それが考慮されている場合、非rootユーザーがsystem.d
サービスを制御できるようにするための最良の方法は何でしょうか?これはsudoers
である必要はありません。おそらくファイル許可の変更で十分でしょうか?
必要なコマンドをすべてsudoers
に個別に追加するだけです。
%webteam cms051=/usr/bin/systemctl restart httpd.service
%webteam cms051=/usr/bin/systemctl stop httpd.service
%webteam cms051=/usr/bin/systemctl start httpd.service
%webteam cms051=/usr/bin/systemctl status httpd.service
@jofelの答えは、私が実際に機能するために必要なものでした。この質問に出くわした誰かのためにこれを置く。ローカルマシンから展開した後、capistrano
を再起動する方法が必要でしたRubyアプリケーション。つまり、systemd
サービスを再起動するにはパスワードなしのアクセスが必要でした。これは私が持っているものとそれは素晴らしい働きをします!
注:ユーザーとグループはdeployer
と呼ばれます
ここにカスタムファイルにコードを入力します:/etc/sudoers.d/deployer
コード:
%deployer ALL= NOPASSWD: /bin/systemctl start my_app
%deployer ALL= NOPASSWD: /bin/systemctl stop my_app
%deployer ALL= NOPASSWD: /bin/systemctl restart my_app
アクセスを許可するコマンドを含むコマンドエイリアスを作成します。次に、グループをそのコマンドエイリアスに割り当てます。
Cmnd_Alias Apache-SVC = /usr/bin/systemctl stop httpd, /usr/bin/systemctl start httpd, /usr/bin/systemctl restart httpd
%webteam ALL=Apache-SVC
また、sudoersファイルを直接編集するのではなく、/ etc/sudoers.d/filenameに編集を加えることをお勧めします。 sudoersで.d/filenameをポイントするようにしてください。ほとんどの新しいディストリビューションはとにかくこれを行います。これらの2行をsudoersに配置すると、うまくいくはずです。
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
注:includeirの前の#はコメントではありません。それは残っている必要があります。
jofel が示唆するように、それらを箇条書きするのが最も安全です。
コマンドの機能の限られたサブセットを誰かが使用できるようにしたい場合、sudoers行のワイルドカードは信頼できません。言語がシェルグロブより表現力豊かだったとしても、追跡しきれないほどのコーナーケースがあります。
"service httpd *
"行は比較的安全です(これを確認してください:) service
には1つの有用なフラグ(--status-all
)しかありません。特に機密性の高い処理は行わないでください(これも確認してください)。/etc/init.d/httpd
は、許可するコマンドラインのみを受け入れます。
多くの組み合わせがあり、それらをリストするのが厄介になる場合は、おそらく何をしているのか疑問に思われるはずです。しかし、(/etc/init.d/http
のように)コマンドを実行する慎重に記述されたヘルパースクリプトへのアクセスを許可することができます。この場合でも、許可されるコマンドとオプションを正確にリストするためにできるだけ正確かつ明示的である必要があり、ユーザー入力をターゲットコマンドに直接渡さないでください。