$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
のみが閲覧できます。