実行可能なマッピングを確認するコードを書いています。 Linux は、/proc/$PID/map_files を介したメモリマッピングをサポートするファイルへのシンボリックリンクを提供します。
私のコードは、これらのシンボリックリンクの1つ(メインの実行可能ファイルに相当)で "stat()"を呼び出し、残念ながら "権限の拒否"を取得します。
一般的なコマンドラインツールを使用してそれを再現できます。
thomasdullien@debian-laptop:~$ stat /proc/1518/map_files/400000-514000
File: /proc/1518/map_files/400000-514000 -> /tmp/go-build362981811/b001/hashcache.test
Size: 64 Blocks: 0 IO Block: 1024 symbolic link
Device: 4h/4d Inode: 4248433 Links: 1
Access: (0400/lr--------) Uid: ( 1000/thomasdullien) Gid: ( 1000/thomasdullien)
Access: 2020-05-23 10:03:58.510445910 +0200
Modify: 2020-05-23 10:03:58.510445910 +0200
Change: 2020-05-23 10:03:58.510445910 +0200
Birth: -
thomasdullien@debian-laptop:~$ stat -L /proc/1518/map_files/400000-514000
stat: cannot stat '/proc/1518/map_files/400000-514000': Operation not permitted
thomasdullien@debian-laptop:~$ stat /tmp/go-build362981811/b001/hashcache.test
File: /tmp/go-build362981811/b001/hashcache.test
Size: 2543616 Blocks: 4968 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 41425437 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/thomasdullien) Gid: ( 1000/thomasdullien)
Access: 2020-05-23 10:03:58.482452052 +0200
Modify: 2020-05-23 10:03:58.478452928 +0200
Change: 2020-05-23 10:03:58.478452928 +0200
Birth: -
したがって、ソースシンボリックリンクをlstatしてターゲットファイルを統計できますが、シンボリックリンクの一般統計は失敗します。問題は、マニュアルページの次の部分に関連しているようです。
No permissions are required on the file itself, but—in the case of stat(),
fstatat(), and lstat()—execute (search) permission is required on all of the
directories in pathname that lead to the file.
/proc/$PID/map_files/それ自体が+ xではないように見えるので、プロセスはこれらのシンボリックリンクを計算する権限を持っていませんか?
そうですか?権限がなぜこのように設定されたのかを説明できる人はいますか?
プロセスでこれらのシンボリックリンクをroot以外のユーザーに設定する方法はありますか?