ルート以外のユーザーがシステムサービスを制御できるようにするにはどうすればよいですか?

ルート以外のユーザーがシステムサービスを制御できるようにするにはどうすればよいですか?

の場合、sysvinitsudoersのような項目で十分です。

%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

これを念頭に置いて、systemdroot以外のユーザーがサービスを制御できるようにする最善の方法は何ですか?その必要はありませんsudoers。ファイル権限を変更するだけで十分でしょうか?

答え1

必要なすべてのコマンドを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 

答え2

@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

答え3

アクセス可能なコマンドでコマンドエイリアスを作成します。次に、グループをコマンドエイリアスに割り当てます。

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/ファイル名を指定する必要があります。ほとんどの新しいディストリビューションはとにかくこれを行います。 sudoerに次の2行を入力すると、問題が解決します。

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

注:includeirの前の#はコメントではありません。残る必要があります。

答え4

RHEL8から:

httpd.service別のオプションは、Webチームのホームディレクトリにファイルを置き、~/.config/systemd/user自分で起動/停止/アクティブ化などを行うことができるようにすることです。

systemctl --user enable httpd.service
systemctl --user start httpd.service

ユーザーがサービスの開始権限を持っている間に上記のタスクが機能していることを確認してください。これは開発システムで役に立ち、開発者はdevops / opsで利用可能なすべての構成でタイマーとパイプラインを効率的に実行できます。

これを本番環境に移動し、組み込みのhttpdタスクを使用して実際のサーバー環境で完全な起動シーケンスをテストすることも有益であるように思われます。しかし、私はただここで考えて文を書いているだけです。

システムユーザー文書が広範囲ではないので、最高のオンライン参照:

https://wiki.archlinux.org/title/systemd/User

関連情報