用户权限
在Linux系统中,一个用户对文件所能执行的权力称为用户权限
文件属性
权限位
rwx rwx rwx
从做到右,三个一组,分别定义了文件所有者,所属组,other对文件拥有的权限
权限
r: Readable 读
w: Writable 写
x: eXcutable 执行
对文件的权限意义:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
对目录的权限意义:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
用户访问文件得到的权限的判断过程
先看是不是所有者,如果是所有者,直接匹配权限,后面的就不看了,不是就往下看,一旦匹配,不往下走,匹配顺序:所有者,所属组,other
文件权限操作命令
chmod
chmod[OPTION]... OCTAL-MODE FILE...
-R: 递归修改权限
chmod[OPTION]... MODE[,MODE]... FILE...
MODE:
修改一类用户的所有权限:
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u-g+ g-o+ o-a+ a-+ -
chmod[OPTION]... --reference=RFILE FILE...
参考RFILE文件的权限,将FILE的修改为同RFILE
特殊权限
SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
SUID
suid 放在所有者权限的x位,表现为大S
只能作用在二进制的可执行的程序上才有意义,不能作用在非二进制可执行程序,所有用户在执行可执行二进制程序时继承所有者的权限
权限设定:
chmod u+s FILE...
chmod u-s FILE...
SGID
sgid 放在所属组权限的x位,表现为大S
同suid,所有用户在执行可执行二进制程序时继承所属组的权限
权限设定:
chmod g+s FILE...
chmod g-s FILE...
Sticky
Sticky (粘滞位) 放在other权限的x位,表现为大T(原本有执行权限表现为t,原本没有执行权限变现为T)
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR...
chmod o-t DIR...
大X
X(x权限特殊形式)
针对目录增加x权限
对文件
1 无执行的文件,不会增加x权限
2 任意三种人有执行权限,也会增加x权限
ACL
ACL:Access Control List
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7默认创建的xfs和ext4文件系统具有ACL功能
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人
为多用户或者组的文件和目录赋予访问权限rwx
•mount -o acl /directory
•getfacl file |directory
•setfacl -m u:wang:rwx file|directory
•setfacl -Rm g:sales:rwX directory
•setfacl -M file.acl file|directory
•setfacl -m g:salesgroup:rw file| directory
•setfacl -m d:u:wang:rx directory
•setfacl -x u:wang file |directory
•setfacl -X file.acl directory
ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl可看到特殊权限:flags
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
base ACL 不能删除
setfacl-k dir 删除默认ACL权限
setfacl–b file1清除所有ACL权限
getfaclfile1 | setfacl--set-file=-file2 复制file1的acl权限给file2
mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效setfacl-m mask::rxfile
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
示例:
setfacl --set u::rw,u:wang:rw,g::r,o::-file1
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1