ディレクトリを見ていますが、/proc
ユーザーが所有者とマークされていても、ユーザーとしてディレクトリを一覧表示できません。
なぜそしてどのようにこれが起こるのですか?
たとえば、とされていls -l /proc/2323/map_files
ますls: reading directory '.': Permission denied
。しかし、所有者は明らかにユーザーです。ユーザーはディレクトリにCDを挿入できますが、ls
rootではできません。
後ろの話を追加:
現在、プロセスは大文字を削除して名前空間を分離するためにfirejail(setuidバイナリ)を使用しています。 Firejailがなければ、すべてが期待どおりに機能します。つまり、ユーザーはできますが、Firejailでは、ユーザーはls map_files
map_filesディレクトリを使用できません。ディレクトリはユーザーが読み取ることができ、.soファイルへのシンボリックリンクであるファイルにもu + rが表示されるため、これは権限の問題ではありません。ls
cd
ベストアンサー1
自分が所有するファイルから読み取り権限を削除すると、そのファイルを読み取ることができなくなります。
$ echo hello >foo
$ chmod u=w,go+r foo
$ ls -l foo
--w-rw-r-- 1 gilles gilles 6 Oct 20 15:13 foo
$ cat foo
cat: foo: Permission denied
所有者はいつでもファイルの権限を変更できるため、これはセキュリティ上ほとんど役に立ちません。これは権限がどのように機能するかの結果です。
ただし、これはに表示される内容を説明しません/proc
。/proc
やや特別なファイルシステムです。 「一般」ファイルシステムの場合、プロセスがファイルを開くとき(またはディレクトリを一覧表示したりシンボリックリンクの宛先を読み取ったりするとき)、カーネルはプロセスの資格情報(実行中のユーザーなど)、権限を確認します。ファイルを読み、資格情報がファイルへのアクセスを許可していることを確認します。しかし、/proc
それはうまくいく方法ではありません。カーネルは/proc
。
具体的には、プロセスが昇格された資格情報で実行中または実行されている場合(通常setuid または setgid、一部の情報には/proc
ユーザーがアクセスできなくなり、ルートのみアクセスできます。これは権限に反映されません。たとえば、setgidを実行するプロセスを考えてみましょう。このプロセスは予想されるユーザーが所有するすべてのファイルを所有し、/proc
権限は権限のないプロセスと同じです。ただし、プロセスは追加のグループ権限を持つ間に機密情報にアクセスできるため、カーネルはユーザーがこの情報を除外できるようにすることはできません。たとえば、/proc/$pid/cwd
プロセスが通常、ユーザーがアクセスできないディレクトリに変更された場合、ユーザーはプロセスが指しているものを見ることができません。ユーザーはプロセスのメモリをダンプできません/proc/$pid/mem
。ユーザーは/proc/$pid/map*
機密情報を反映している場合、プロセスのメモリマップを見ることはできません。ASLR効果的な)。など。