실행 가능한 매핑을 확인하는 코드를 작성 중입니다. Linux는 /proc/$PID/map_files를 통해 메모리 매핑을 지원하는 파일에 대한 심볼릭 링크를 제공합니다.
내 코드는 이러한 심볼릭 링크 중 하나(주 실행 파일에 해당)에서 "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가 아닌 것 같아서 프로세스에 이러한 심볼릭 링크를 계산할 권한이 없습니까?
그렇습니까? 권한이 왜 이렇게 설정되었는지 설명할 수 있는 사람이 있나요?
프로세스에서 이러한 심볼릭 링크를 루트가 아닌 사용자로 설정하는 방법이 있습니까?