Linux-文件权限

2019-10-30  本文已影响0人  Wu杰语

序言

linux的文件权限是linux的安全管理机制中的一个环节,我们从使用了解下文件权限,然后再了解一下内核实现。

linux的文件权限

用ls命令查看/boot/grub2的文件权限


image.png

我们看到每个文件相关的信息,其中第一行的字段意义:

紧接着,我们需要看权限的含义了,一共十个字符:


image.png

一共分为四部分:

对于目录来说:

修改用户权限

chmod修改文件目录权限
chown修改文件的属主或者属组权限


image.png

通过帮助我们可以看到,有两种方式修改权限,一种MODE,一其中MODE的定义在最后一行

特殊权限

image.png

注意到属主的权限是rws,s表示任何一个用户都可以有可修改的权限,在这里每个用户可以自己修改自己的密码。

image.png

这个文件夹下的用户创建的文件仅仅用户和root可以创建和删除。这样,当用户在tmp下创建文件时,就可以避免被另外一个用户删除掉。

内核中的文件权限

文件创建的时候就会设置好权限,这些权限怎么工作的呢?
在进程描述符中相关的代码

struct task_struct {
.........
        /* Tracer's credentials at attach: */
    const struct cred __rcu     *ptracer_cred;

    /* Objective and real subjective task credentials (COW): */
    const struct cred __rcu     *real_cred;

    /* Effective (overridable) subjective task credentials (COW): */
    const struct cred __rcu     *cred;
........
}
struct cred {
  .........
    kuid_t      fsuid;      /* UID for VFS ops */
    kgid_t      fsgid;      /* GID for VFS ops */
    unsigned    securebits; /* SUID-less security management */
    kernel_cap_t    cap_inheritable; /* caps our children can inherit */
    kernel_cap_t    cap_permitted;  /* caps we're permitted */
    kernel_cap_t    cap_effective;  /* caps we can actually use */
    kernel_cap_t    cap_bset;   /* capability bounding set */
    kernel_cap_t    cap_ambient;    /* Ambient capability set */
  ......
} __randomize_layout;

一个进程,设置了fsuid和fsgid后,在执行碰到文件的时候,就看文件的uid和gid和进程之间比较,如果进程满足条件,就可以按照文件设置的权限对文件进行操作访问,否则就不行。

对于上述所讲的特殊权限s,怎么实现的呢,就是进程被创建的时候,虽然不是文件所属用户创建,但是此时进程的fsuid会被设置成为文件所属用户,这样就做到了可以对该文件进行修改。

小结

这篇小文章复习了一下用户权限,特别是特殊权限,同时,我们针对这块深入到源码中,看了一下源码是如何实现的,通过使用和源码比对,对于知识的掌握程度更加深入,感觉更加通透了。

上一篇 下一篇

猜你喜欢

热点阅读