一般ユーザーとしてsystemdサービスでrootになりたいプロセスを実行する方法は?

一般ユーザーとしてsystemdサービスでrootになりたいプロセスを実行する方法は?

systemdを使用してサービスを開始しました。サービスユーザーとグループを権限のないユーザーに変更します。

[Service]
...
User=regular_user
Group=regular_user
...

ある時点で、サービスはルートになると予想される別のプロセスを開始する必要があります。他のプロセスには 's' ビットが設定され、setuid()ルートになるために使用されます。

プロセスを開始すると正常に実行されます。ただし、サービスが開始しようとすると、関数setuid()はエラーとともに返されます。

操作は許可されていません。

setuid()機能のいくつかのオプションが表示されますが、サービス機能を維持するために必要かどうかは不明です。私はいくつか試してみましたが、これまでは役に立ちませんでした。

たとえば、次のように試しました。

AmbientCapabilities=CAP_SETGID CAP_SETUID
SecureBits=keep-caps

プロセスはもはやエラーを生成しないように見えますが、まだやるべきことをしていません。 (言い換えれば、コンソールでプロセスを実行すると正常に動作します!)

ベストアンサー1

私は実際に見つけた新しい権限なし =私のプロセスは、サブプロセスがsetuid()

彼らが言うように、これは確かに軽く受け入れるべき選択ではありません。ただし、デフォルト設定はこのsetuid()機能を許可しません。 (その言葉は≪権限上昇≫.)

私に役立つのは次のとおりです。

NoNewPrivileges=false

このドキュメントでは、Ubuntu 16.04では、このオプションのデフォルト値がtrueであることを明示的に示していません。これはオペレーティングシステムによって異なります。

おすすめ記事