web-dev-qa-db-ja.com

systemdでユニットのディレクトリをホワイトリストに登録する方法

systemdには、ユニット(サービスなど)で使用できるオプションが多数あります。それらの3つはReadWriteDirectoriesReadOnlyDirectoriesおよびInaccessibleDirectoriesと呼ばれます。仮想マシンでDebian 8.5を使用しています。 systemdの一部の(新しい?)バージョンでは、ReadWritePathsReadOnlyPathsおよびInaccessiblePathsと呼ばれます。このオプションを使用して、アクセス可能なディレクトリをホワイトリストに登録できますか?

一部のディレクトリのみにアクセスすることがわかっているアプリケーションがあります。このディレクトリへのアクセスを制限したいと思います。しかし、ReadWritePathsを使用してこのディレクトリを指定しても効果がないようです。 manpageは言う

ReadWriteDirectories =にリストされているディレクトリには、名前空間内から外部と同じアクセス権でアクセスできます。

しかし、このオプションで指定されていないディレクトリは、同じ方法でアクセスできるようです。指定されていないものすべてへのアクセスを拒否するにはどうすればよいですか?それとも機能しないのは私のシステム次第ですか?誰かがInaccessibleDirectories=/は、オプションがInaccessiblePathsと呼ばれる、新しいバージョンのマンページ以外のすべてをブラックリストに追加することを示しています。

InaccessiblePaths =にリストされているエントリは、ネームスペース内のプロセスからアクセスできなくなり、ReadWritePaths =またはReadOnlyPaths =で指定されたものを含め、他のマウントポイントに含まれない場合があります。

さて、ReadWriteDirectoriesReadOnlyDirectoriesを使用してディレクトリのホワイトリストをセットアップする可能性はありますか?それが不可能な場合、なぜReadWriteDirectoriesが存在しないのに、何もしないように見えるのですか?

7
JojOatXGME

ReadWritePathsとそのilkは、ブラックリスト特定のパスであるオプションと一緒に使用した場合にのみ非常に役立ちます。アプリケーションが特定のパスにのみアクセスできる必要があるという事実がわかっている場合は、次のいくつかの組み合わせを実行できます。

  • ProtectSystem=strictを設定し、ReadWritePathsで書き込むために特定のディレクトリをホワイトリストに登録します。
  • ReadOnlyPathsを設定し、ReadWritePathsを使用して特定のディレクトリをホワイトリストに登録します。 /を使用してこれを行うと、ProtectSystemの機能のスーパーセットが実行されます(/ dev、/ proc、および/ sysも制限されます)。 PrivateDevicesProtectKernelTunables、およびProtectControlGroupsを使用して、これらのディレクトリを保護することもできます。
4
Chris Down

ホワイトリストの読み取りアクセスについて具体的に尋ねていたので:

次のように、InaccessiblePathsでこれを実現できる場合があります。

[Service]
...
InaccessiblePaths=/
ReadOnlyPaths=/etc/myapp.conf

systemd.exec(5) を参照してください

0
JacksGT