文件的权限管理
1.权限管理:
1.1文件权限
-
文件属性:
权限 引用计数(连接数) 所用者 所属组 大小 创建时间 文件名
-
文件属性操作:
chown 设置文件的所有者
chgrp 设置文件的属组信息
1.2 修改文件的属主和属组
- 修改文件的属主:chown
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法说明:
OWNER
OWNER:GROUP
:GROUP,冒号也可用 . 替换
-R: 递归
chown [OPTION]… --reference=RFILE FILE… - 修改文件的属组:chgrp
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… --reference=RFILE FILE…
-R 递归
1.3 文件的权限主要针对三类对象进行定义:
owner: 属主, u
group: 属组, g
other: 其他, o
1.4 每个文件针对每类访问者都定义了三种权限:
r: Readable 4 w: Writable 2 x: eXcutable 1 文件: r: 可使用文件查看类工具获取其内容; w: 可修改其内容; x: 可以把此文件提请内核启动为一个进程; 目录: r: 可以使用ls查看此目录中文件列表; w: 可在此目录中创建文件,也可删除此目录中的文件; x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录; --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如: 640: rw-r----- rwxr-xr-x: 755
1.5 修改文件权限: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=refile file…
参考refile文件的权限,将file的修改为同refile
方法一:mode法 chmod who opt per file who: u g o opt: + - = per:r w x X chmod u +x,g-w,o= file chmod o= f1 方法二:数字法 rwx rw- r-- 111 110 100 chmod 764 file chmod -R a+x f1 赋予f1下所有的文件 chmod -R +X dir2 chown -R wamg /*
1.6 修改文件的属主和属组:
仅root可用; 修改文件的属主:chown chown [OPTION]... [OWNER][:[GROUP]] FILE... 用法: OWNER OWNER:GROUP :GROUP Note: 命令中的冒号可用.替换; -R: 递归 chown [OPTION]... --reference=RFILE FILE... 修改文件的属组:chgrp chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... -R
1.7 新建文件和目录的默认权限
-
umask值,可以用来保留在创建文件权限
-
新建file权限:666-umask
对于结果,奇数+1,偶数不变 -
建dir权限:777-umask
-
非特权用户umask是002
-
root的umask是022
-
umask:查看
-
umask #:设定
umask 022
-
umask -S 模式方式显示
-
umask -P 输出可被调用
-
全局设置:/etc/bashrc 用户设置: ~/.bashrc
总结: 对于目录 default5=777-umask- 对于文件 default权限=666=umask;对于结果,奇数+1,偶数不变 umask 026 临时生效 cat .bashrc 永久生效写文件中 umask u=rwx, g=r, o=
2.特殊权限
2.1Linux文件系统上的特殊权限
-
SUID,SGID,Sticky
suid:继承二进制程序所有者的权限
sgid:继承二进制程序所有组的权限
作用在目录,此目录新建的目录继承目录的所属组
sticky:作用于目录,此目录的文件只能被所有者删除 -
三种常用权限:r,w,x user,group,other
-
安全上下文
-
前提:进程有属主和属组;文件有属主和属组
(1)任何一个可执行程序能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
(2)启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3)进程访问文件时的权限,取决于进程的发起者
进程的发起者,同文件的属性:则应用文件属性权限
进程的发起者,属于文件的属主;则应用文件属组权限
应用文件“其他”权限
eg: chmod u+s dir1 chmod g+s dir1 chmod o+t file
2.1 可执行文件上suid权限
- 任何一个可执行程序能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属性为原程序文件的属主
- suid只对二进制可执行程序有效
- suid设置在目录上无意义
- 权限设定:
chmod u+s file…
chmod u-s file…
2.2 可执行文件上sgid权限
- 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属组为原程序文件的属组
- 权限设定
chmod g+s file…
chmod g-s file…
2.3 目录上的sgid权限
- 默认情况下,用户创建文件时,其属组为此用户所属的主组
- 一旦某目录被设定了sgid,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
- 通常用于创建一个协作目录
- 权限设定“
chmod g+s dir…
chmod g-s dir…
2.4 Sticky位 粘滞位
- 具有写权限的目录通常用户可以删除改目录中哪个的任何文件,无论该文件的权限或拥有者
- 在目录设置sticky位,只用文件的所有者或root可以删除该文件
- sticky设置在文件上无意义
- 权限设定:
chmod o+t dir…
chmod o-t dir…
2.5 权限位映射
- SUID: user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限 - SGID:group,占据属组的执行权限位
s:group拥有x权限
S:group没有x权限 - Sticky:other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
2.6设定文件特定属性
- chattr +i 不能删除,改名,更改
- chattr +a 只能追加内容
- lsattr 显示特定属性
2.7ACL访问控制列表
- 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
gentfacl file | directory
setfacl -m u:wang:rwx file | directory
setfacl -Rm g:sales:rwX directory
setfacl -M fie.acl file | directory
setfacl -m g:salesgroup:rw file | direcotry
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file | directory
setfacl -x file.acl directory - ACL文件上的group权限是mask值(自定义用户,主定义组,拥有组的最大权限),而非传统的组权限
- getfacl 可看到特殊权限:flags
- 9)通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
- base ACL 不能删除
- setfacl -k dir 删除默认ACL权限
- setfacl -b file1 清除所有ACL权限
- getfacl file1 |setfacl --set-file= - file2 复制file1的ACL权限给file2
- mask只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(effective permission)
用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask::rx file - –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 -R -b /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
setfacl -m u:wang:0 file
setfacl -m u:mage:rw file
getfacl f1
用acl group=mask
setfacl -x g:g2 file 删除
setfacl -m mask::r f1 限高
setfacl -b f1 清空所用acl权限