第八章 Linux 文件基本属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
权限
针对文件 针对目录
读 r cat 查看文件内容 ls 查看目录中存在的文件名称
写 w vim 更改文件内容 杀出目录中的子文件 或新建文件
执行 x 执行可执行的程序 表示是否可以进入到目录cd
一般给目录读权限的时候 默认会给其执行权限
普通权限管理
ls 查看文件属性
ls -l ll 使用ll命令查看文件权限
-代表普通文件
d代表目录
r 4可读
w 2可写
x 1可执行
设置文件或目录权限
chmod
增加或减少文件的权限 不能改变所有者 只能改变所有者现有的权限
要给文件或目录设置权限 操作者要么是root要么是文件或目录的所有者
-
chmod u+x 1 给一个文件的属主增加执行权限
-
chmod g+x,o+x 2给一个文件同时增加属组其他权限
-
chmod o-x 2 <--(文件名) 减少其他人的执行权限
-
chmod u=rwx,g=rwx,o=rwx 2 给文件所有人赋予所有权限
-
chmod a=rwx 1 赋予所有人所有权限
权限设置考虑的因素
给谁设置
u 属主
g 属组
o 其他
ugo 所有
a 所有
怎么设置
+添加权限
-减少权限
=赋予权限
增加减少赋予什么权限
r 读
w 写
x 执行
注意
同时设置多个身份权限的时候 每个身份权限用英文逗号隔开
chmod g+x,o+x
在设置权限的时候如果有两个部分权限一样 我们可以:
chmod u=rwx,g=rwx
等价于 chmod ug=rwx
数字形式
0 不能读 不能写 不能执行
1 不能读 不能写 执行
2 不能读 写 不能执行
3 不能读 写 能执行
4 读 不能写 不能执行
5 读 不能写 执行
6 读 写 不能执行
7 读 写 执行
-
chmod 765 3 以数字形式 赋予文件属主所有权限 属组读写 其他 读执行
chmod 731 a
7 4+2+1
3 2+1 不合理 要写必须先具备读 单独出现2 和3不合理
1
另外,生产环境下Linux不允许出现777
属主与属组设置
属主:文件的所有者 是一个账户 一个人
属组:所属的用户组 一个组
ls -l ll
chown
修改文件的属主 属组
用法1:将文件的属主修改为其他用户
chown zhangsan 1.txt 将文件1.txt属主 修改为 zhangsan
用法2:同时修改文件的属主 属组
chown zhangsan:zhangsan 2.txt
chgrp 修改文件的属组
用法:chgrp zhangsan 1.txt
在使用chgrp修改一个目录文件时,会递归将目录文件里的文件修改属组。
一般来说 chown命令 只有root用户才可以使用 普通用户没有权限修改别人的文件所有者 也没有权限将自己文件的所有者修改为别人。
特殊权限
设置位s
让一般使用者 临时拥有文件的属主/属组权限
/usr/bin/passwd 在执行时 需要修改/etc/passwd /etc/shadow 等文件,这些文件除了root 其他用户都只有读权限,为了让普通用户修改密码 临时让他们拥有root权限,找个s权限 就是帮我们来完成这个任务的,s权限 只能应用在二进制的可执行文件上。
去除s权限
which 查看二进制可执行文件所在的位置
通过chmod命令修改s权限
chmod u-s/u+s /usr/bin/passwd
0755 最前面的0表示不使用任何特殊权限 用数字来代表特殊权限 可以使用 4表示s位
那么现在我们就把s权限去了,然后再用普通用户测试一下能否成功修改密码
我们可以看到现在已经不能修改了,
沾滞位 t
chmod
作用:只允许文件的创建者或root删除文件
chmod o+t/o-t 文件名
那么加不加t有什么区别呢
如果没有设置粘滞位,目录中的文件可以被目录的拥有者或超级用户删除,同时也可以被有写权限的其他用户删除,这可能会导致误删或恶意删除。而设置粘滞位后,目录中的文件只能被拥有相应权限的用户或超级用户删除,而其他用户无法删除这些文件。
更具体地说,当在一个具有粘滞位的目录中创建一个新文件或子目录时,该文件或子目录的拥有者是创建者本身,但是只有文件或目录的拥有者和超级用户才能删除该文件或目录。这意味着即使其他用户有写权限,他们也无法删除该文件或目录,因为他们不是该文件或目录的拥有者。
ACL访问控制权限
ACL(Access Control List)是一种访问控制列表,用于控制文件和目录的访问权限。ACL权限是指ACL中定义的授权规则,用于控制特定用户或组对文件或目录的读、写和执行权限。
在ACL权限模型中,每个文件或目录都有一个ACL,ACL包含了一组授权规则。每个授权规则包含一个用户或组,以及对该用户或组的访问权限。当一个用户或组尝试访问文件或目录时,系统会检查ACL中的授权规则,根据规则来决定是否允许访问。
ACL权限模型相比传统的基于用户和组的权限模型更加灵活,可以更精确地控制对文件和目录的访问。例如,在传统的权限模型中,一个文件只能被一个用户或组拥有,而在ACL权限模型中,一个文件可以被多个用户或组拥有,并且每个用户或组可以被授予不同的访问权限。
ACL可实现对单一用户设定访问文件的权限、
那么我们来了解一下acl的基本命令、
getfacl 查看文件的acl策略及权限 getfacl 文件名
setfacl 给文件针对某个用户 设置acl权限
-m 修改acl策略
-x 去掉某个用户或者某个组的权限
-b 删除所有acl策略
-R 递归 通常用于目录中
mask 定义除other以及所有者外最大的权限
给单个用户单独增加权限 setfacl -m u:user:rwx file
给单个组单独增加权限 setfacl -m g:groupname:rwx file
去掉某个用户的权限:setfacl -x u:user file
去掉某个组的权限:setfacl -x g:groupname file
删除所有acl策略:setfacl -b file
umask
表示创建文件的默认权限
文件 666
目录 777
对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。
root umask值
对于root用户,他的umask值是022。
当root用户创建目录时,默认的权限就是用最大权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w权限,对于其他用户也要去掉w权限,所以目录的默认权限就是755。
当root用户创建文件时,默认的权限则是用最大权限666去掉相应位置的umask值,即文件的默认权限是644。
如果将umask值设为0003,那么此时创建的目录或文件的默认权限是多少?
正确的结果应该是:目录的默认权限是774,文件的默认权限是664。
在计算默认权限时,不应用最大权限直接减去umask值,而是将umask值所对应的相应位置的权限去掉,这样才能得到正确的结果。
而普通用户的umask值为002,则对于其他用户去掉w权限
root用户创建的文件
目录 | 文件 | |
最大默认权限 | 777 | 666 |
umask值 | 022 | 022 |
初始权限 | 755 | 644 |
普通用户
目录 | 文件 | |
最大默认权限 | 777 | 666 |
umask值 | 002 | 002 |
初始权限 | 775 | 664 |
当umask 011 创建文件默认权限应该是 655 实际运行时会变成666
666 —> rw-rw-rw-
011 —> -----x--x
相减得
666 —> rw-rw-rw-
这个特殊情况只出现于文件
修改umask值
临时修改:umask umask值 umask 044
永久修改