/proc/self/map_files シンボリックリンクを計算できません。権限が拒否されましたか?

/proc/self/map_files シンボリックリンクを計算できません。権限が拒否されましたか?

実行可能なマッピングを確認するコードを書いています。 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以外のユーザーに設定する方法はありますか?

関連情報