2012-08-09 163 views
4

有一個在root用戶下運行的進程。Linux文件權限

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

Now 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」允許訪問讀取地圖內容之前實現了檢查。爲了控制這種保護,已經添加了新的knob/proc/sys/kernel/maps_protect,並對proc文檔進行了相應的更新。

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

謝謝,它解釋:) – 2012-08-09 11:16:22