linux目录权限为rws,Linux-文件权限

序言

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

linux的文件权限

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

image.png

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

-rw-r--r--.代表权限

1 对于文件,代表文件链接数,对于目录代表同一级的目录数字

root 代表当前用户

root 代表当前用户组

64文件大小

Jul 10 22:55 是文件创建时间

device.map代表文件名

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

image.png

一共分为四部分:

第一个字符,代表类型,其中'-'代表普通文件, ‘d'代表目录文件,'b'代表块特殊文件,’c'代表字符特殊文件,‘l'代表符号链接,’f‘代表管道文件,’s‘代表套接字文件

第二部分的 rwx代表文件所属用户具有读写执行的权限

r-x代表用户组权限,当一个用户,不是文件所属用户,但是和文件所属用户具有相同的用户组时,就可以有和用户组相同的权限,即使该用户不具备读写可执行权限。

r-x,最后桑格字符代表其它用户具有的权限。

对于目录来说:

x代表可进入目录

rx代表可进入目录,显示目录下的文件名

-wx代表可进入目录,修改目录内的文件名

修改用户权限

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会被设置成为文件所属用户,这样就做到了可以对该文件进行修改。

小结

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

你可能感兴趣的:(linux目录权限为rws)