1.权限的查看及读取
(1)权限的查看
# ls -l file : 查看文件的权限
# ls -ld dir :查看目录权限
(2)权限的读取
文件的属性叫做文件的元数据。
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。"一种元数据用1个byte来记录内容",则以下文件元数据共占用8个字节(byte)。
# 文件权限信息
- | rw-rw-r-- | . | 1 | westos | westos | 0 | May 29 10:22 | westosfile
[1] [2] [3] [4] [5] [6] [7] [8] [9]
# 对于每一位的详细解释
[1] : 文件类型
# - : 普通文件 # d :目录 # l :软连接 # b : 快设备 # c :字符设备 # s : socket套接字 # p 管道 |
[2] : 用户权限
# rw- : 读,写,执行
[3] : 系统的selinux开启,安全上下文
# ls -Z file : 查看安全上下文
[4] : # 对于目录:目录中子目录的个数
#对于文件: :文件内容被系统记录的次数(硬链接个数)
每一个文件都有一个硬链接数,它表示有多少个文件指向它。当一个文件创建时,它的硬链接数被设置为1。当一个新的硬链接被创建时,它的硬链接数就会增加1。
# ln file file1 : 创建硬链接 (ps: 硬连接建立的文件与原文件是同一个文件,节点号相同)
[5] : 文件拥有者
[6] : 文件拥有组
[7] : # 对于文件 : 文件内容大小
# 对于目录:目录中子文件/子目录的元数据(属性)大小
[8 ]# 对于目录 : 目录中子目录/子文件属性修改的时间,文件内容修改也改变。
# 对于文件: 文件内容被修改的时间(文件属性修改时间不变)
[9] : 文件名
2.文件中用户和组的修改
# 实验环境设置:在/mnt下新建文件并建立监控
(1)修改文件的所有人所有组
# chown 用户名 文件名:修改文件的所有人
# chgrp 组名 文件名 :修改文件的所有组
# chown 用户名 . 组名 文件名 :同时修改文件的所有人和所有组
# chown 用户名 :组名 文件名 :同时修改文件的所有人和所有组
(2)修改目录的所有人所有组
# chown 用户名 目录 :修改目录的所有人
# chgrp 组名 目录 :修改目录的所有组
# chown 用户名 . 组名 目录 :同时修改目录的所有人和所有组
# chown 用户名 :组名 目录 :同时修改目录的所有人和所有组
ps: 注意以上只要修改了目录的所有人所有组,并未修改目录下文件的所有人所人组
# chown -R 用户名 目录 :修改目录及目录下文件的所有人
# chgrp -R 组名 目录 :修改目录及目录下文件的所有组
# chown -R 用户名 . 组名 目录 :同时修改目录及目录下文件的所有人和所有组
# chown -R 用户名 :组名 目录 :同时修改目录及目录下文件的所有人和所有组
3.普通权限的类型
(1)用户对文件的身份
# u : 文件的拥有者
# g : 文件的拥有组
# o : 既不是拥有者也不是拥有组成员的其他用户的通称
(2)权限类型
# r :可读 # 对于文件:可以读取文件内容 #对于目录:可以ls列出目录中的文件
# w : 可写 # 对于文件:可以更改文件内容 #对于目录 : 可以在目录中新建或删除文件
# x : 可执行 # 对于文件 :可以用文件名称调用文件内记录的程序 #对于目录 :可以进入目录中
4. 文件权限管理
# chmod 设定文件权限
(1)复制文件权限
# chmod --reference=/mnt/westosdir /mnt/westosfile1 复制/mnt/westosdir目录的权限到文件/mnt/westosfile1上
#chmod -R --reference=/mnt/westosfile1 /mnt/westosdir 复制/mnt/westosfile1文件的权限到/mnt/westosdir及#目录中的子文件上 -R 代表第归操作
(2)利用字符设定权限
# chmod < a | u | g | o >< + | - | = >< r | w | x > file : 利用字符设定权限
实验:
# chmod a+x /mnt/westosfile2 : 所有权限增加可执行权限
# chmod ug-r /mnt/westosfile1 : 所有人所有组减去可读权限
# chmod u-w,g+wx,o=rwx /mnt/westosfile3
(3)利用数字设定权限
权限转换为八进制数字为:
- - - : 000
- - x : 001 = 1
- w - : 010 = 2
- w x : 011 = 3
r - - : 100 = 4
r - x : 101 = 5
r w - : 110 = 6
r w x : 111 = 7
5.系统默认权限设定
当建立文件或目录时,系统默认分配的权限并不是777
# umask表示系统保留权力
文件默认权限 = 777-umask-111
目录默认权限 = 777-umask
# umask 查看保留权力
系统本身存在的意义共享资源
#从安全角度讲系统共享的资源越少,开放的权力越小系统安全性越高
#既要保证系统安全,又要系统创造价值,于是把应该开放的权力默认开放,把不安全的权力默认保留
(1)临时设定系统保留权力
# umask 权限 : 临时设定系统预留权力
ps:后三位是设定的权限,第一位是特殊权限位,umask值越大系统安全性越高
重新打开一个shell,查看保留权力发现还是022,因为刚刚只是临时设定!
(2)永久设定系统保留权力
要想永久修改系统保留权力,需要编辑两个文件:/etc/bashrc (shell系统配置文件 )和 /etc/profile(系统环境配置文件)且 立即生效!
#vim /etc/bashrc (75行左右)
# vim /etc/profile (60行左右)
两个文件编辑完成后,查看系统保留权力,发现还是没有变化!
此时利用source 使文件立即生效
# source /etc/bashrc
# source /etc/profile
此时系统保留权力已立即更改!
6.特殊权限
(1)粘滞位(stickybit)---- SBIT(o的x位置上使用一个t)
粘滞位(stickybit),又称黏着位,是Linux文件系统权限的一个特殊权限。默认情况下,如果一个目录o上有w和x权限,则任何人可以在此目录中建立与删除文件。一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。其他用户则不能。
实验如下:
root用户建立一个新目录,修改目录权限为777。
两个普通用户(westos , lee)进入该目录建立文件,
用户lee可以删除westos建立的文件,这显然不符合常理!
因此必须设置粘滞位,只有目录内文件的所有者或者root才可以删除或移动文件
设置粘滞位的方法:
# chmod o+t /mnt/pub/
# chmod 1XXX /mnt/pub :XXX为目录原权限
ps: chmod o-t /mnt/pub:恢复原权限
注意:当目录没有执行权限时,设置粘滞位,最后一位会变成T。
此时无法进入目录。
(2)强制位(set gid) -- SGID(在g的x位置上使用一个s)
针对目录:目录中新建的文件自动归属到目录的所属组中,默认情况下,用户建立的文件夹属于用户当前所在的组,但是设置了SGID后,表示在此目录中,任何人建立的文件,都会属于目录所属的组,但是用户还是属于创建的用户。
设定方法:
# chmod 2XXX /mnt/pub
# chmod g+s /mnt/pub
ps : chmod g-s /mnt/oub : 恢复原权限
针对二进制的可执行文件(c程序):当运行二进制可执行文件时都是用文件拥有者身份运行,和执行用户无关
实验:
# watch -n 1 "ps ax -o comm,user,group | grep cat "watch : 设置监控cat程序
/bin/cat 程序本身所有组是root用户,但当westos用户执行/bin/cat时,进程显示所有组是westos.
#当运行二进制可执行文件时都是用执行用户身份运行
设置强制位,可以保证#当运行二进制可执行文件时都是用文件拥有者身份运行,和执行用户无关
(3)冒险位(set uid) --- SUID(在u的x位置上使用一个s)
Suid是让执行者临时拥有属主的权限,仅对二进制文件(命令)生效。
对文件作用:
默认情况下,用户执行一个指令,会以该用户的身份来运行进程。当一个文件设置了SUID后,所有用户执行这个文件时都是以这个文件的所有者的权限来执行。即可以让对此文件没有执行权限的用户执行此文件。
设定方法:
# chmod u+s /bin/cat
# chmod 4XXX /bin/cat :XXX是文件的原权限
ps: chmod u-s /bin/cat : 恢复原权限
7.ACL访问控制列表
访问控制列表(Access Control Lists,ACL)可以对文件的权限进行细分。
(1)ACL的基本使用方法
1) ACL列表的开启与关闭
# setfacl -m o::r /mnt/pub/ (随意输入一条acl设定命令)
权限后出现“ + ”号表示acl列表成功开启!
# setfacl -b /mnt/pub : 关闭acl列表
2)ACL列表权限读取
# getfacl 目录/文件:当ACL列表权限开启后,可以通过此命令显示文件的列表权限。
显示内容分析:
# file: mnt/pub :文件名
# owner: root :所有人
# group: root : 所有组
# flags: -s- :特殊权限(这里开启了强制位)
user::r-- :所有人的权限
user:lee:rw- : 特殊指定用户权限
group::rw- :所有组的权限
group:westos:--- :特殊指定组权限
mask::rw- : 能够赋予特殊用户和特殊用户组的最大权限阀值
other::--- :其他的权限
3)ACL权限设定
# setfacl -m u:lee:rx /mnt/pub/ :指定用户lee的权限为rx
# setfacl -m g:lee:rx /mnt/pub/ :特殊指定组lee的权限为rx
# setfacl -m u::r /mnt/pub/ :设定文件所有人的权限
# setfacl -m g::rw /mnt/pub/ : 设定文件所有组的权限
# setfacl -m o::0 /mnt/pub/ :设定其他人的权限
# setfacl -x u:lee /mnt/pub/ : 删除lee用户
setfacl -x g:westos /mnt/pub/ :删除westos这个组
Ps: 注意只能删除特殊指定的用户或组,不能删除所有人,所有组!
(2)ACL的优先级匹配
拥有者 > 特殊指定用户 > 权限多的组 >权限少的组 > 其他
实验:
1)拥有者 > 特殊指定用户
在/mnt下建立westosfile文件-->所有者改为westos---->acl设定特殊用户westos权限为0------>
查看acl列表------>用户westos在westosfile文件里写东西------> 成功写入------>拥有者权限>特殊指定用户
2)特殊指定用户>特殊指定组
特殊指定用户lee权限改为rw------>设定lee用户所属的wheel组的权限为0-----> 用户lee在westosfile文件里写东西------> 写入成功------>特殊指定用户>特殊指定组
3)权限多的组>权限少的组
建立用户linux,设置附加组为westos -----> 设定所有组权限为0------>设定westos为特殊指定组,权限为rw------->用户linux在文件写东西----->写入成功!
设定所有组权限为rw------>设定westos为特殊指定组,权限为0------->用户linux在文件写东西----->写入成功!
因此总结:权限多的组>权限少的组
(3)Mask权限
mask是能够赋予指定用户或组权限的最大阀值,它将用户或群组所设定的 ACL 权限限制在 mask 规定的范围内,超出部分直接失效。
设定mask方法:
# setfacl -m m:权限 文件
(4)默认权限列表
设定用户lee对目录/mnt/westodir的权限为rwx
1)针对已存在的文件生效
# setfacl -m u:lee:rwx /mnt/westosdir/ : 只对于/mnt/westosdir目录本身生效
# setfacl -Rm u:lee:rwx /mnt/westosdir/ :对于/mnt/westosdir目录和目录中已经存在的内容生效
此时在目录中新建westosfile4 ,设定的权限不会生效!因此,此命令只针对已存在的文件!
2)针对新建文件生效
# setfacl -m d:u:lee:rwx /mnt/westosdir/ :针对新建的文件生效,已存在的文件没用!
8.attr权限
attr权限限制所有用户,包括超级用户!
# lsattr -d dir/ :查看目录本身的attr权限
# chattr +a dir/ :设定attr权限,a表示只能添加不能删除
ps: chattr -a dir :关闭该权限
# chattr +i dir/ :设定attr权限,i 表示不能做任何修改
ps: chattr -i dir/ :关闭该权限