ユニットにはさまざまなオプション(サービスなど)があります。システム。そのうち3つはReadWriteDirectories
、ReadOnlyDirectories
と呼ばれますInaccessibleDirectories
。私は仮想マシンでDebian 8.5を使用しています。一部 (最新?) バージョンの systemd ではReadWritePaths
、ReadOnlyPaths
と呼ばれますInaccessiblePaths
。このオプションを使用してアクセスできるディレクトリをホワイトリストに追加できますか?
特定のディレクトリにのみアクセスできることが知られているアプリケーションがあります。このディレクトリへのアクセスを制限したいと思います。しかし、このディレクトリを指定するために使用すると、ReadWritePaths
何の効果もないようです。これマンページ説明する
ReadWriteDirectories =にリストされているディレクトリは、名前空間内でアクセスでき、外部と同じアクセス権を持ちます。
ただし、このオプションに指定されていないディレクトリは同じ方法でアクセスできるようです。指定されていないすべてのコンテンツへのアクセスを拒否する方法は?それとも私のシステムが動作しないのでしょうか?新しいバージョンのマンページを除くすべての項目をブラックリストに追加することが可能であると考えることもできますInaccessibleDirectories=/
(オプションが呼び出されます)InaccessiblePaths
。
InaccessiblePaths =にリストされている項目は名前空間内のプロセスにアクセスできず、ReadWritePaths =またはReadOnlyPaths =で指定された項目を含む他のマウントポイントは計算されない可能性があります。
ReadWriteDirectories
それでは、ディレクトリホワイトリストを使用してReadOnlyDirectories
設定することは可能ですか?可能でなければ、ReadWriteDirectories
何もしないように見えながらもなぜ存在するのでしょうか?
答え1
ReadWritePaths
その類似は、次のオプションと組み合わせて使用する場合にのみ本当に便利です。ブラックリスト特定のパス。アプリケーションが特定のパスにのみアクセスできる必要があることがわかっている場合は、以下を組み合わせて実行できます。
ProtectSystem=strict
特定のディレクトリを設定し、使用のためにホワイトリストに追加しますReadWritePaths
。ReadOnlyPaths
特定のディレクトリを設定してホワイトリストに追加しますReadWritePaths
。を使用してこれを行うと、/
実行するタスクの親セットが実行されますProtectSystem
(おそらく望ましくない/ dev、/ proc、および/ sysも制限します)。PrivateDevices
、ProtectKernelTunables
およびを使用してProtectControlGroups
これらのディレクトリを保護することもできます。
答え2
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)