【问题标题】:Linux file permissionLinux文件权限
【发布时间】:2012-08-06 13:55:02
【问题描述】:

有一个进程在 root 用户下运行。

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--)。但是,当我向非特权(非 root)用户发出 cat /proc/11565/maps 时,它给了我一个被拒绝的权限。但是对于cat /proc/11565/status,它按预期输出。

我在这里缺少什么吗?

【问题讨论】:

    标签: linux file-permissions permission-denied


    【解决方案1】:

    这是因为文件权限不是您遇到的唯一保护。

    这些不仅仅是文件系统上的常规文本文件,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 功能)。

    【讨论】:

      【解决方案2】:

      进程uid必须匹配smaps uid,进程gid必须匹配smaps gid。

      $ ls -l /proc/15889/smaps /proc/16139/smaps
      -r--r--r--. 1 oracle dba      0 Feb 10 16:42 /proc/15889/smaps
      -r--r--r--. 1 oracle asmadmin 0 Feb 10 16:42 /proc/16139/smaps
      $ wc /proc/15889/smaps /proc/16139/smaps
      6851 23498 224275 /proc/15889/smaps
      wc: /proc/16139/smaps: Permission denied
      6851 23498 224275 total
      $ id
      uid=400(oracle) gid=400(dba) groups=400(dba),522(asmadmin),etc.
      

      对于 environ、io 和所有内存映射都相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-25
        • 2014-10-01
        • 2011-05-27
        • 2010-09-18
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        相关资源
        最近更新 更多