systemdで単位ディレクトリをホワイトリストに追加する方法

systemdで単位ディレクトリをホワイトリストに追加する方法

ユニットにはさまざまなオプション(サービスなど)があります。システム。そのうち3つはReadWriteDirectoriesReadOnlyDirectoriesと呼ばれますInaccessibleDirectories。私は仮想マシンでDebian 8.5を使用しています。一部 (最新?) バージョンの systemd ではReadWritePathsReadOnlyPathsと呼ばれますInaccessiblePaths。このオプションを使用してアクセスできるディレクトリをホワイトリストに追加できますか?

特定のディレクトリにのみアクセスできることが知られているアプリケーションがあります。このディレクトリへのアクセスを制限したいと思います。しかし、このディレクトリを指定するために使用すると、ReadWritePaths何の効果もないようです。これマンページ説明する

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

ただし、このオプションに指定されていないディレクトリは同じ方法でアクセスできるようです。指定されていないすべてのコンテンツへのアクセスを拒否する方法は?それとも私のシステムが動作しないのでしょうか?新しいバージョンのマンページを除くすべての項目をブラックリストに追加することが可能であると考えることもできますInaccessibleDirectories=/(オプションが呼び出されます)InaccessiblePaths

InaccessiblePaths =にリストされている項目は名前空間内のプロセスにアクセスできず、ReadWritePaths =またはReadOnlyPaths =で指定された項目を含む他のマウントポイントは計算されない可能性があります。

ReadWriteDirectoriesそれでは、ディレクトリホワイトリストを使用してReadOnlyDirectories設定することは可能ですか?可能でなければ、ReadWriteDirectories何もしないように見えながらもなぜ存在するのでしょうか?

答え1

ReadWritePathsその類似は、次のオプションと組み合わせて使用​​する場合にのみ本当に便利です。ブラックリスト特定のパス。アプリケーションが特定のパスにのみアクセスできる必要があることがわかっている場合は、以下を組み合わせて実行できます。

  • ProtectSystem=strict特定のディレクトリを設定し、使用のためにホワイトリストに追加しますReadWritePaths
  • ReadOnlyPaths特定のディレクトリを設定してホワイトリストに追加しますReadWritePaths。を使用してこれを行うと、/実行するタスクの親セットが実行されますProtectSystem(おそらく望ましくない/ dev、/ proc、および/ sysも制限します)。PrivateDevicesProtectKernelTunablesおよびを使用してProtectControlGroupsこれらのディレクトリを保護することもできます。

答え2

最近の文書によると(リンク1リンク2)、2018年以降:

InaccessiblePaths=ファイルシステム階層内の名前空間内のプロセスとその下のすべてのプロセスは、にリストされているパスにアクセスできません。ReadWritePaths=またはその中に入れ子にすることはできないためReadOnlyPaths=BindPaths=これは予想よりも制限的です。BindReadOnlyPaths=より柔軟なオプションについてはをご覧くださいTemporaryFileSystem=

[ TemporaryFileSystem=]は、デバイスが呼び出すプロセスとは無関係のファイルまたはディレクトリを隠すために使用でき、必要なファイルまたはディレクトリには、および/または組み合わせてBindPaths=アクセスし続けることができますBindReadOnlyPaths=

したがって、所望の動作を得ることができる。

[Service]
TemporaryFileSystem=/
BindPaths=/var/readwrite
BindReadOnlyPaths=/var/readonly

答え3

具体的にお問い合わせいただきましたので読み取り権限ホワイトリスト:

以下を使用してこれを達成できますInaccessiblePaths

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

バラよりシステムの実行(5)

関連情報