2012-08-09 213 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