在系统中每一个文件都有 UID 和 GID,通过文件的 UID 和 GID 将决定文件的访问权限
也就是如果一个进程来访问某个文件
如果进程的 UID 和文件的 UID 一致,则匹配到的文件的 UID 访问权限
如果进程的 GID 和文件的 GID 一致,则匹配到的文件的 GID 访问权限
如果进程 UID 和 GID 都无法匹配文件,则使用其他人身份访问该文件
如果文件没有权限控制,则任意的用户都可以访问文件,那么不管是 root 用户还是普通用户对于系统来说,文件就是透明的,因为所有人都可以使用文件;在业务场景下,如果业务的数据,可以被所有人查看和修改,那么对于系统而言是不安全的
文件权限存在的意义,是为了保证系统的访问更加安全,系统通过文件的权限来控制用户对系统的访问
每一个文件都有一个 UID 和 GID,那么文件的 UID 将其称为文件的拥有人(所有者)【user】;那么文件的 GID 将其称为拥有组【group】;文件还有一类访问权限,如果访问该文件的对象,无法匹配到文件的用有人或者是拥有组,则这一类对象被称为其他人【other】
在 Linux 系统中进程和程序也有 UID 和 GID,所以系统中是根据 UID 和 GID 来判断访问的权限,而不是根据用户名
如果一个进程去访问一个文件,访问路径是:
如果一个进程被用户运行,则该进程继承用户的 UID 和 GID
此时该进程去访问文件,将会以用户的 UID 和 GID 进行访问
如果 UID 匹配上了文件的 UID,则适用于 UID 的权限
如果 GID 匹配上了文件的 GID,则适用于 GID 的权限
如果 UID 和 GID 都没有匹配成功,则使用其他人权限
ls -l file.txt 查看文件的详细信息 包括文件的权限
-rw-r--r--. 1 root root 0 sep 4 23:41 file.txt
第一栏位:- 表示文件的类型,如果是 - 表示普通文件,如果是 d 表示目录,如果是 i 表示字符文件
第二栏位:rw- 表示的是拥有人的权限
第三栏位:r-- 表示的是拥有组的权限
第四栏位:r-- 表示的是其他人的权限
第五栏位:. 表示的是该文件受到 SELINUX 的保护
第六栏位:1 表示的是该文件的硬链接数
第七栏位:root 表示的是该文件的 UID 也就是文件的拥有人
第八栏位:root 表示的是该文件的 GID 也就是文件的拥有组
第九栏位:0 表示的是文件的大小
第十栏位:Sep 4 23:41 表示的是文件最后一次被修改的时间
第十一栏位:file.txt 表示的是文件名
ls -ld dir1 查看目录的详细信息包括目录的权限
不管是拥有人还是拥有组,还是其他人,对于文件的管理都有三类权限:
r w x -
读 写 执行 无权限
执行指的是可以将文件像命令一样来执行
类别 r w x
文件 可以查看文件的内容 可以修改文件的内容 文件可以被执行
目录 可以查看目录下的文件和子目录 可以修改目录的内容 可以进入到该目录
PS:注意到 Linux 中一个目录要有意义,至少需要有rx 权限
UID 简称 u
GID 简称 g
other 简称 o
直接赋权:
chmod u=rwx,g=rwx,o=rwx file / dir
chmod ugo=rwx file/dir
加减赋权:
u+g+o=all=a
chmod u+rw,g+r,o+x file / dir
chmod u-w,g-r.o-x file / dir
chmod ugo+w file / dir
chmod a+rwx file / dir
chmod +rw file / dir 给 ugo 加 rx 权限
chmod +w file / dir 仅给 u 加 w 权限
注意生产环境下,建议使用加减赋权,不要使用等于号赋权,因为,等于号赋权会发生权限覆盖,而加减权限是在原来的基础上进行赋权
数字表示:
r w x
4 2 1
二进制,在计算机世界中 0 表示没有权限 1 表示有权限
r w x 二进制转十进制
1 0 0 4
0 1 0 2
0 0 1 1
最大的权限 = 4+2+1 = 7
user:7
group:7
other:7
chmod 777 file / dir
递归批量修改文件的权限
chmod -R 777 /tmp/test 表示 test 目录权限设置为 777 且 test 目录下的子目录和文件也设置为 777 权限
chown zhangsan abc.txt 修改 abc.txt 文件的拥有人为 zhangsan
chgrp it abc.txt 修改 abc.txt 文件的拥有组为 it
chown lisi:itgroup abc.txt 直接指定拥有人和拥有组
chown :ctgroup abc.txt 直接修改拥有组
同时 chgrp 和 chown 都支持 -R 递归修改目录以及目录下的文件和子目录的拥有人和拥有组
文件的拥有人:文件的拥有人可以修改文件的权限
普通用户可以修改自己文件的权限(仅可以改权限),而 root 用户可以修改所有文件的权限
普通用户不能修改文件的拥有人,文件的拥有人只有两种来源,第一种是该文件是谁创建,那么谁就是拥有人,第二种是 root 用户指定文件的拥有人(也就是只有 root 才可以执行chown)
修改文件的拥有组,则该用户,必须是该组的成员, 组可以是附加组或者私有组;文件拥有组的来源,第一种是该文件创建用户的私有组,第二种是 root 指定