
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であることを明示的に示していません。これはオペレーティングシステムによって異なります。