最新の Linux システムでは、 /proc/1/fdinfo/0
を使用できるはずです (id 1 (init
) のプロセスのファイル記述子 1 (stdout) の情報 root
として実行されているルート pid 名前空間で )).
(通常のユーザーとして) リストを見つけることができます:
sudo find /etc /dev /sys /proc -type f -print0 |
perl -l -0ne 'print unless lstat'
(-type f
を削除 通常のファイルに制限したくない場合)。
/var/cache/ldconfig/aux-cache
Ubuntu システムのみを検討する必要がある場合は、もう 1 つの潜在的な候補です。 /var/cache/ldconfig
として、ほとんどの GNU システムで動作するはずです。 ldconfig
によってのみルートに対して読み取り+書き込み+検索可能に作成されます コマンドは GNU libc に付属しています。
lstat(2) の man ページを見ると、ENOENT (ファイルが存在しない) 以外のエラーで失敗する可能性があるケースについてヒントを得ることができます。
最も明白なものは次のとおりです:
<ブロック引用>EACCES path のパス プレフィックスのディレクトリの 1 つに対する検索権限が拒否されました .
そのため、検索できないディレクトリが必要です。
はい、システムに既にあるものを探すことができます (おそらく /var/lib/private
存在する場合は?) しかし、同等のものを自分で作成することもできます:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
ここで、lstat(2) 操作は EACCES で失敗します。 (ディレクトリからすべての権限を削除すると、それが保証されます。おそらく、それほど多くは必要なく、 chmod -x
ディレクトリの下のファイルにアクセスするには、ディレクトリに対する実行権限が必要なので、実行権限を削除するだけで十分です。)
lstat(2) を失敗させる別の独創的な方法があり、man ページを参照してください:
<ブロック引用>ENOTDIR path のパス プレフィックスのコンポーネント ディレクトリではありません。
/etc/passwd/nonexistent
のようなファイルにアクセスしようとしています。 これも ENOENT (「そのようなファイルまたはディレクトリはありません」) とは異なり、ニーズに合っている可能性があります。
もう 1 つは:
<ブロック引用>エナメトゥーロン パス は長すぎます。
ただし、これには非常に長い名前が必要になる場合があります (一般的な制限は 4,096 バイトだと思いますが、システム/ファイルシステムにはもっと長い名前があるかもしれません)。
最後に、これらのいずれかが実際になるかどうかを判断するのは困難です あなたに役立ちます。 「ファイルが存在しない」シナリオをトリガーしないものが欲しいと言います。通常、これは ENOENT エラーを意味しますが、実際には、多くの高レベルのチェックは、lstat(2) からのエラーを単純に「存在しない」と解釈します。例:test -e
または同等の [ -e ...]
特に、別のエラーメッセージを返す良い方法がなく、エラーを返さないとファイルが存在することを意味するため、上記のすべてを単に「存在しない」と解釈するだけかもしれません。
find
できます
/etc
の使用 -- 開始点としての構成ファイル ディレクトリ:
sudo find /etc -type f -perm 0400 -user root
私のシステムでは、これは何も返しません。
制限を緩和して、グループ root
を許可できます (ユーザー root
のみ グループ root
のメンバーである必要があります )、および 440
の許可に注意してください :
sudo find /etc -perm 0440 -user root -group root
私のシステムでは、これが返されます:
/etc/sudoers.d/README
/etc/sudoers
編集:
あなたの編集に基づいて、呼び出し元のユーザーがディレクトリのリストを防ぐのに十分な権限を持っていないディレクトリを探しています:
sudo find / -perm o-rwx -type d -user root -group root
ここでディレクトリを探しています (-type d
) 他のもの (o-rwx
) の read-write-execute perm ビットを欠いている ) であり、root:root
が所有しています .
技術的には、実行がないだけです (x
) ビットは、ディレクトリの一覧表示を妨げます (lstat(2)
) ディレクトリに
出力で /run/systemd/inaccessible/
を見つけました Systemd init ベースのシステムで。
/proc
のファイルについて 、 /sys
、 /dev
:
-
これらのファイルシステムは仮想 FS です。つまり、ディスクではなくメモリ上に存在します
-
/proc
に依存する場合 、/proc/1/
を使用 つまり、後の PID (プロセス) が存在することが保証されていないため、後の PID ではなく、PID 1 の下にあるものに依存して信頼性/一貫性を確保します。