2012-08-09 5 views
4

루트 사용자로 실행중인 프로세스가 있습니다.Linux 파일 사용 권한

ps aux | grep ProcessX 
root  11565 0.0 0.7 82120 22976 ?  Ssl 14:57 0:02 ProcessX 

이제 ls -l /proc/11565/ (pid)은이 결과를 제공합니다.

total 0 
dr-xr-xr-x 2 root root 0 Aug 9 16:06 attr 
-rw-r--r-- 1 root root 0 Aug 9 16:06 autogroup 
-r-------- 1 root root 0 Aug 9 16:06 auxv 
-r--r--r-- 1 root root 0 Aug 9 16:06 cgroup 
--w------- 1 root root 0 Aug 9 16:06 clear_refs 
-r--r--r-- 1 root root 0 Aug 9 16:06 cmdline 
-rw-r--r-- 1 root root 0 Aug 9 16:06 coredump_filter 
-r--r--r-- 1 root root 0 Aug 9 16:06 cpuset 
lrwxrwxrwx 1 root root 0 Aug 9 16:06 cwd -> /usr/local/bin 
-r-------- 1 root root 0 Aug 9 16:06 environ 
lrwxrwxrwx 1 root root 0 Aug 9 16:06 exe -> /usr/local/bin/ProcessX 
dr-x------ 2 root root 0 Aug 9 16:06 fd 
dr-x------ 2 root root 0 Aug 9 16:06 fdinfo 
-r-------- 1 root root 0 Aug 9 16:06 io 
-rw------- 1 root root 0 Aug 9 16:06 limits 
-rw-r--r-- 1 root root 0 Aug 9 16:06 loginuid 
-r--r--r-- 1 root root 0 Aug 9 16:06 maps 
-rw------- 1 root root 0 Aug 9 16:06 mem 
-r--r--r-- 1 root root 0 Aug 9 16:06 mountinfo 
-r--r--r-- 1 root root 0 Aug 9 16:06 mounts 
-r-------- 1 root root 0 Aug 9 16:06 mountstats 
dr-xr-xr-x 6 root root 0 Aug 9 16:06 net 
-r--r--r-- 1 root root 0 Aug 9 16:06 numa_maps 
-rw-r--r-- 1 root root 0 Aug 9 16:06 oom_adj 
-r--r--r-- 1 root root 0 Aug 9 16:06 oom_score 
-rw-r--r-- 1 root root 0 Aug 9 16:06 oom_score_adj 
-r--r--r-- 1 root root 0 Aug 9 16:06 pagemap 
-r--r--r-- 1 root root 0 Aug 9 16:06 personality 
lrwxrwxrwx 1 root root 0 Aug 9 16:06 root ->/
-rw-r--r-- 1 root root 0 Aug 9 16:06 sched 
-r--r--r-- 1 root root 0 Aug 9 16:06 schedstat 
-r--r--r-- 1 root root 0 Aug 9 16:06 sessionid 
-r--r--r-- 1 root root 0 Aug 9 16:06 smaps 
-r--r--r-- 1 root root 0 Aug 9 16:06 stack 
-r--r--r-- 1 root root 0 Aug 9 16:06 stat 
-r--r--r-- 1 root root 0 Aug 9 16:06 statm 
-r--r--r-- 1 root root 0 Aug 9 16:06 status 
-r--r--r-- 1 root root 0 Aug 9 16:06 syscall 
dr-xr-xr-x 6 root root 0 Aug 9 16:06 task 
-r--r--r-- 1 root root 0 Aug 9 16:06 wchan 

이제 상태 및지도에 대한 파일 권한이 동일합니다 (-r--r--r--). 그러나 비 특권 (루트가 아닌) 사용자와 cat /proc/11565/maps을 발행하면 권한이 거부됩니다. 그러나 cat /proc/11565/status의 경우 예상대로 출력됩니다.

여기에 누락 된 것이 있습니까?

답변

8

파일 권한만으로는 사용자가 보호 할 수있는 유일한 보호 수단이 아니기 때문입니다.

파일 시스템에 그냥 평범한 텍스트 파일이 아닌, procfs는 프로세스 내부에 창이고 당신은 모두 파일 권한 과 기타 보호가 장소에 어떤 과거를 얻을해야합니다.

지도는 메모리 사용에 대한 잠재적 위험 정보를 표시하며 실행 코드는 프로세스 공간 내에 위치합니다. ASLR을 살펴보면 잠재적 인 공격자가 코드가로드 된 위치를 알 수 없도록 예방하는 방법임을 알 수 있으며 procfs에 코드를로드 할 수 있습니다.

이 보호 way back in 2007을 추가되었습니다

이 변경 사항은지도의 내용을 읽기 액세스를 허용하기 전에 "ptrace_may_attach"을 사용하여 검사를 구현합니다. 이 보호 기능을 제어하기 위해 새로운 노브/proc/sys/kernel/maps_protect가 추가되었으며 procfs 문서에 대한 해당 업데이트가 추가되었습니다. (실제로 호출하는 기능 중 하나 이내) ptrace_may_attach()

다음 코드 놓여 : 그래서

if (((current->uid != task->euid) || 
    (current->uid != task->suid) || 
    (current->uid != task->uid) || 
    (current->gid != task->egid) || 
    (current->gid != task->sgid) || 
    (current->gid != task->gid))  && !capable(CAP_SYS_PTRACE)) 
    return -EPERM; 

을 같은 실제 사용자/그룹 ID가 없다면, 저장된 사용자/그룹 ID 및 유효한 사용자/그룹 ID (예 : setuid 항목) 및 해당 프로세스를 소유 한 사용자/그룹 ID와 동일하므로 프로세스에 CAP_SYS_PTRACE 기능이없는 한 해당 "파일"을 볼 수 없습니다. 당연하지).

+0

감사합니다. 설명 : –