ユーザーに現在のディレクトリ(またはルートディレクトリ)に対する権限がない場合でも、そのディレクトリにアクセスできますか?

ユーザーに現在のディレクトリ(またはルートディレクトリ)に対する権限がない場合でも、そのディレクトリにアクセスできますか?

プログラムは開かれたファイル記述子を継承または渡すことができます。そうしないと、ファイルを読み書きできません。たとえば、

(sudo -u nobody echo "hello world") > ~/test-file
(sudo -u nobody cat) < ~/test-file

Q:ユーザーがアクセスできない現在のディレクトリ(またはルートディレクトリ)を継承した場合は、そのディレクトリにアクセスできますか?

ベストアンサー1

ファイル記述子との比較は非常に間違っています。プロセスの現在のディレクトリとルートディレクトリは、ファイル記述子または「開いたファイル記述」(a)へのポインタではなく、ディレクトリエントリへのポインタにすぎませんstruct filestruct dentry

カーネルは、現在のディレクトリまたはルートディレクトリが指すディレクトリinodeを参照するオープンファイルの説明を保持せず、子プロセスは任意の種類のハンドルを介してディレクトリinodeを継承できます。

どの方法でも使用するには、他のファイルと同様に、パスを介して現在のディレクトリとルートディレクトリを開く必要があり、すべての標準チェックが適用されます。

ファイルを開くと、O_PATH不透明なハンドルが返され、成功します。どのファイルパスにアクセスできる場合、読み取りまたは書き込みのためにファイルを正常に開くことはできません。

$ perl -e 'sysopen my $fh, "/root", 0, 0 or die "$!"'
Permission denied at -e line 1.
$ perl -e 'sysopen my $fh, "/root", 010000000, 0 or die "$!"' # 010000000 is O_PATH
$

openat(fd, "", AT_EMPTY_PATH|O_RDWR)特権プロセスの場合でも、これらの不透明fdは通常のfdとして使用できません。幸いなことに、これをdup()通常のファイル記述子に変換する方法はありません ;-)

ところで、muslライブラリは定義 O_SEARCHO_PATHから2012年

おすすめ記事