CentOS 8 で非特権ユーザーとして systemd サービスを実行できない

CentOS 8 で非特権ユーザーとして systemd サービスを実行できない

CentOS 7 と 8 の間には、systemd と selinux に関して (おそらく) 変更がありますが、これをどう処理すればよいかまだわかりません。

何らかの理由(ディストリビューション間の互換性)により、私たちはPostgreSQL 9.6を使用しています。エンタープライズDBインストーラーはCentOS 7で正常に動作しますCentOS 8ではもう使えませんインストーラーは、ユーザー postgres (私の場合は uid=1004) として実行される systemd サービスを作成します。

[Service]
Type=forking
TimeoutSec=120

User=postgres
Group=postgres
...

インストーラーの最後に、systemctl を使用してサービスが開始されます。これは CentOS 8 では失敗します。systemctl status を実行すると、次のメッセージが表示されます。

postgresql.service: Failed to execute command: Permission denied

ファイルシステムとユーザー権限に関しては、すべて正常です。

SELinux を無効にするとすぐに動作し始めます。

CentOS 7 では必要ありませんでした。インストーラーを呼び出して実行する前に、今何ができるか教えていただけますか?

補遺

問題の本当の原因がわかったかもしれません。ルート ファイル システムではなく、別のディスクにインストールしています。ルート ファイル システムにインストールすると、インストーラーが動作し始めます。systemd サービス ファイルの「ExecStart」ディレクティブを含む実行可能ファイルが別のディスク上にあると、動作しなくなります。これを許可するようにシステムに指示するにはどうすればいいでしょうか?

啓発してくださり本当にありがとうございます。

答え1

ファイル階層の別の部分にある別のディスクですか?

SElinux が強制的に導入されると、SElinux を理解し、ファイル コンテキスト変換を作成する方法を理解する必要があります。たとえば、ntpd の設定ファイルと ntp のログ ファイルを /services/ntpd/ntp.conf や /services/ntpd/ntp.log などの別の場所に変更するとどうなるか試してみてください。

答え2

ようやく 1 週間前に問題の解決策を見つけました。以前の質問ではそのことは触れていませんでした。問題にならないと思っていたからです。

私は新しい空の別のディスクにインストールしていました。ルート ファイルシステムではありません。ルート ファイルシステムにインストールすると機能することがわかりました。

私はその後

restorecon -r /新しいディスクのマウントポイント

そしてその後、それは機能し始めました!

CentOS 7ではこれを行う必要はなかったと思います

答え3

ルート (/) から下方向の階層を、現在マウントされているディスク (つまり、/tmp/tmp_mnt としてマウントされている) にコピーしましたか?

restorecon -r はファイルのコンテキストをリセットします... ls -Z が役に立ちます

postgres および postgres バイナリの systemd ユニット ファイルに対する ls -Z は興味深いものです。

centos7 と centos8 では SElinux ポリシーが異なる可能性があります。

関連情報