ディレクトリファイル記述子dfdの場合、openat(dfd、 ".."、...)などのアップナビゲーションを防ぐことはできますか?

ディレクトリファイル記述子dfdの場合、openat(dfd、

$serviceディレクトリを持つユーザーがいます/srv/$service/subdir/srv/$serviceモードは0700で、これを介してのみアクセスできることを意味します$service。このユーザーは、…/subdir次のコマンドを使用してディレクトリファイル記述子またはその下のすべてのディレクトリを開くことができます。

int fd = open("…/subdir", O_RDONLY | O_CLOEXEC | O_DIRECTORY, 0);

Unixドメインソケットを使用すると、フォルダにアクセスできない他の有効なユーザーIDで実行されている他のプロセスとファイル記述子を共有できます。今まではそんなに良くなった。

しかし:ホームディレクトリから開くには、別のプロセスを呼び出すことができますopenat(fd, "../somefile", …)。他のプロセスではこれを行わないと信じる必要があります。somefile$service

どのようにこれが起こらないようにすることはできますか?open()ディレクトリナビゲーションを防ぐ最初の呼び出しでいくつかのフラグを見逃しましたか?fcntl(fd, …)いくつかの呼び出しを使用してこれを実行できますか?それとも別の方法がありますか?

ベストアンサー1

しかし:別のプロセス[他のユーザーとして実行]オープンホームディレクトリopenat(fd, "../somefile", …)内のファイルを呼び出す機能。$service

いいえ、そうではありません。これを行うには、fd親ディレクトリに対する実行権限が必要ですが、親ディレクトリモードでは所有者0700のみが閲覧できます。

おすすめ記事