status
2つの特定のファイル、つまり、以下のsmaps_rollup
すべてのプロセスを読み取ろうとします/proc
。すべてのプロセスディレクトリにはdr-xr-xr-x
権限があり、これらの各ディレクトリに移動できます。
すべてのプロセスに対して両方のファイルに対する権限は-r--r--r--
。
これは奇妙な行動です。 PID 1で2つのファイルを読み取ろうとしましょう。status
ファイルを読み取ることができますが、smaps_rollup
以下を参照してください。
$ cd /proc/1
$ ls -l status smaps_rollup
-r--r--r-- 1 root root 0 Apr 5 18:34 smaps_rollup
-r--r--r-- 1 root root 0 Mar 21 12:18 status
$ grep "Swap:" status
VmSwap: 1072 kB
$ grep "Swap:" smaps_rollup
grep: smaps_rollup: Permission denied
$ cat smaps_rollup
cat: smaps_rollup: Permission denied
関連する質問を見つけましたが、そのいくつかが見つかりました[1][2][3][4]。それらのどれも同じ問題はありません。これらの他の問題に対する解決策は、ディレクトリから欠落している実行権限を変更する必要があります。ここではそうではありません。
proc のマウント情報は次のとおりです。
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
私はArch Linuxが提供するカーネル6.2.7-arch1-1を使用してArch Linuxを実行しています。
私はこの奇妙な行動の正確な説明を探しています。回避策としてsudoを使用することに加えて、この問題を解決する他の方法はありますか?
答え1
これは明示的に文書化されていないようです。man 5 proc
、文書を通して/proc/[pid]/maps
:
ptrace
このファイルへのアクセスはアクセスモードの確認によって制御されますPTRACE_MODE_READ_FSCREDS
。ptrace(2)
。
文書smaps
によると
これらの行の最初の行には、のマッピングと同じ情報が表示されます
/proc/[pid]/maps
。
後者だから鋭い、同様の方法で保護されています。smaps_rollup
あまり敏感ではありません開くことができるしかし、私が知っている限り、後者のパッチでは何の進展もありませんでした。
この問題を解決するには、関数を使用することが可能でなければなりませんが、まだ試していません。
多くのファイル、ディレクトリ、およびリンクは、/proc
特にその権限が表すほどアクセスできるわけではありません。多くのファイルにはmaps
、とsmaps
同じ権限が必要ですPTRACE_MODE_READ_FSCREDS
。これらの要件については、後で詳しく説明します。man 5 proc
。つまり、可視権限は権限の上限と見なす必要があり、特に/proc
アイテムを表示するよりもカーネル設定(書き込み可能)を更新するために使用されるかどうかを判断するのに役立ちます。