루트가 아닌 사용자로 실행할 때 사용하려고 하면readlink(2)
/proc/<pid>/exe
나에게 속하지 않은 프로세스 에 대한 권한 오류가 발생합니다. 그렇다면 setuid root 이외의 옵션을 사용하여 다양한 사용자 프로세스의 실행 파일을 확인하는 방법은 무엇입니까 ps
?-f
답변1
이 -f
옵션은 실행 파일의 전체 경로를 표시하지 않고 대신 실행 파일을 호출하는 데 사용되는 명령줄을 표시합니다. 이 정보는 프로세스를 실행하는 사용자만 읽을 수 있는 실행 파일 경로와 달리 누구나 읽을 수 있으며 해당 경로에서 가져옵니다./proc/PID/cmdline
/proc/PID/exe
ps
시스템 호출을 관찰하여 어떤 데이터를 읽고 있는지 확인할 수 있습니다 .strace ps -ef -p 1 | less
:
…
stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/1/stat", O_RDONLY) = 6
read(6, "1 (init) S 0 1 1 0 -1 4202752 78"..., 1024) = 191
read(6, "", 833) = 0
close(6) = 0
open("/proc/1/status", O_RDONLY) = 6
read(6, "Name:\tinit\nState:\tS (sleeping)\nT"..., 1024) = 752
read(6, "", 272) = 0
close(6) = 0
…
open("/proc/1/cmdline", O_RDONLY) = 6
read(6, "/sbin/init", 2047) = 10
close(6) = 0
…
이 c
옵션을 전달 하면 ps
의 명령 이름이 보고되며 이 이름도 누구나 읽을 수 있습니다. 이는 16자로 잘린 실행 파일의 기본 이름(경로 정보 없음)입니다./proc/PID/stat
ps
.NET 파일에 있는 실행 파일의 경로를 보고하는 옵션이 없다고 생각합니다 . 당신은 그것을 사용할 수 있습니다 (/proc/PID/exe
lsof
txt
이는 "파일 설명자"라고 하며 /proc/1/exe (readlink: Permission denied)
다른 사용자의 프로세스에 대한 정보를 인쇄하라는 요청을 받으면 예상대로 불평합니다.
참고: 내 대답은 Linux에 관한 것입니다. 다른 사용자 프로세스에 대해 보고할 수 있는 정보와 작동 방식에 대한 세부 사항은 Unix 변형에 따라 크게 다릅니다.