首页 > 代码库 > linux文件权限管理与ACL访问控制列表
linux文件权限管理与ACL访问控制列表
一、文件属性
1.文件属性:
文件属性操作
chown : change owner ,设置文件所有者
chgrp : change group ,设置文件的属组
文件属主修改: chown
格式:chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUPNAME (同时修改属主、属组)
:GROUPNAME (默认属主,修改属组)
( 命令中的冒号可用.替换;)
chown –reference=RFILE FILE… 参照某文件权限设置权限
文件属组修改: chgrp
格式:chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]
-R 递归 递归设置目录中的文件、子目录权限)
2.文件权限:
1)权限定义对象:
文件的权限主要针对三类对象进行定义:
owner: 属主,文件拥有者, u
group: 属组, 文件拥有组,g
other: 其他, 除以上两类人以外的全部用户,o
每个文件针对每类访问者都定义了三种权限:
r: Readable ,读取
w: Writable ,写
x: eXcutable,执行
系统对于权限,是依次将用户权限与文件、文件夹的所有者、组、其他权限,依次匹配
注:只针对部分文件系统,fat格式的文件系统不支持权限修改(元数据分区中无此内容)
2)权限实际意义
文件权限的实际意义:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容,内容也可以被破坏,但是无法删除文件
x: 可以把此文件提请内核启动为一个进程,针对二进制程序、脚本而言
目录权限的实际意义:
r: 无法进入目录(cd)可以使用ls查看此目录中文件列表,但是无法查看文件属性—
w: 可在此目录中创建文件,也可删除此目录中的文件(但需要先有X权限)
+wx : 可以进入目录,创建、修改、删除文件、文件内容,但是无法获取文件列表
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
3)权限操作
权限赋值的八进制数字法:
— 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
权限修改:
命令格式: chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… MODE[,MODE]… FILE…
-R: 递归修改权限 (此操作有风险)
+ X (大写) 当递归+X时,如果目录内有子目录,则加执行权限, 如果遇到文件,若文件本身
无执行权限,则不加,若有则加x权限
eg : chmod a=rwX \目录
MODE:
修改一类用户的所有权限:
u= g= o= ug= a= (all,全部用户) u=, g=
修改一类用户某位或某些位权限
u+/- g+/- o +/- a+/-
八进制赋值
eg: chmod 666 file1
chmod [OPTION]… –reference=RFILE FILE…
参考RFILE文件的权限,将FILE的修改为同RFILE;
4)新文件、目录默认权限 umask值
umask作用:用于设置创建文件、目录时的默认权限
默认权限:
新建文件默认权限: 666-umask
(取值为666是处于安全考虑,使新建文件默认下均不含有执行权限)
如果所得结果某位存在执行(奇数)权限,则将其权限+1,得到最终权限
eg: umask=125 –> 666-125 =541 –>+1处理后为: 642 (5+1,1+1)
新建目录默认权限: 777 – umask
eg : umask=100 –> 777-100=677 (rw-rwx-rwx)
umask 操作:
umask 查看umask 值 (无需加参数)
(注:如论如何设定,新文件默认均无执行权限)
umask N : 设定umask = N
注: umask 每个位的最大值不超过7
umask -S 以模式方式显示umask
eg: u=rwx,g=rw,o=x
umask -p 输出umask值以供调用
eg: umask 0022
3特殊权限:SUID(s), SGID(s), Sticky(t)
linux安全上下文
(前提:进程有属主和属组;文件有属主和属组)
(1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
SUID
作用:可执行文件上SUID权限(作用于二进制程序)(u+s后)任何用户可启动此进程,且
视为以root用户启动,并且具备root权限
(对于各种命令,+s之后,任何用户使用它都可以获取root使用时的权限)
作用对象:SUID只对二进制可执行程序有效,SUID设置在目录上无意义
权限设定:
chmod u+s FILE…
chmod u-s FILE…
SGID
作用:
目录:当一个目录实行了sgid,在目录中任何新创建的文件,都继承本目录的属组
为自己的属组
文件:作用在文件上, 一旦一个文件被赋予SGID的权限, 无论当前的用户有无执
行权限,用户运行该程序,会自动继承该程序所属组的权限。
作用对象:目录、文件
权限设定:
chmod g+s FILE…
chmod g-s FILE..
Sticky 位 (粘滞位)
作用:具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
作用对象:仅作用于目录,sticky 设置在文件上无意义
权限设定:
chmod o+t DIR…
chmod o-t DIR…
例如:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
注:当文件夹、文件 SUID\SGID\STKCKET 显示为大写时,为错误状态
小写才是正常状态
chmod 777 /dir 未必可以除掉 s权限
应该改为: chmod 0777 /dir
特殊权限的数字法:
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
eg: chmod 4777 /tmp/a.txt
权限位映射:
SUID: user,占据属主的执行权限位
s: 属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S: group没有x权限
Sticky: other,占据other的执行权限位
t: other拥有x权限
T: other没有x权限
注意:修改时,应注意是否需要先赋予x权限,后再追加s权限
设定文件的特定属性:
chattr +i 不能删除,改名,更改
chattr +a 只能增加
lsattr 显示特定属性
二、访问控制列表ACL
1.ACL
ACL: Access Control List,实现灵活的权限管理
功能:除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
ACL生效顺序:所有者,自定义用户,自定义组,其他人
2. ACL安装:
CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。
需手动增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt
3. ACL 使用详解
命令:setfacl 设置ACL规则
getfacl file|dir 获取文件、目录ACL列表
setfacl 设定文件访问控制列表
用法: setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
-m, –modify=acl 更改文件的访问控制列表
u:username:rwx file/dir 用户
g:groupname:rwx file/dir 组
o:0 file/dir 其他
:0 指无任何权限
-M, –modify-file=file 从文件中读取访问控制列表条目来修改对应文件
-x, –remove=acl 根据文件中访问控制列表移除条目
-X, –remove-file=file 从文件读取访问控制列表条目并删除
-b, –remove-all 删除所有扩展访问控制列表条目
-k, –remove-default 移除默认访问控制列表
–set=acl 设定替换当前的文件访问控制列表
–set-file=file 从文件中读取访问控制列表条目设定
–mask 重新计算有效权限掩码
-n, –no-mask 不重新计算有效权限掩码
-d, –default 应用到默认访问控制列表的操作 (生效以后,目录中的任何新建文件也会赋予acl默认权限)
-R, –recursive 递归操作子目录
-L, –logical 依照系统逻辑,跟随符号链接
-P, –physical 依照自然逻辑,不跟随符号链接
–restore=file 恢复访问控制列表,和“getfacl -R”作用相反
–test 测试模式,并不真正修改访问控制列表属性
-v, –version 显示版本并退出
-h, –help 显示本帮助信息
使用示例:
mount -o acl /directory 挂载ACL,使指定目录的ACL临时生效,重启后失效
getfacl file |directory 查询ACL列表
setfacl -m u:wang:rwx file|directory 设定用户的指定权限
setfacl -Rm g:sales:rwX directory 递归设定组对目录以及其目录内文件的权限
setfacl -M file.acl file|directory 使用file.acl文件中的acl条目对file/dir进行acl修
改文件格式,参照getfacl得到的信息
setfacl -m g:salesgroup:rw file| directory 对指定组设定对某文件、目录的权限
setfacl -m d:u:wang:rx directory 对dir中的新建文件也赋予wang:rx权限
删除用户wang对file/dir的ACL条目
文件内容格式:u:username
g:groupname
o:
setfacl -X file.acl directory 删除dir上 file.acl 文件中对应的条目
4. ACL中的mask值
ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限) ,除了所有者、
others ,其他人(属组、ACL添加的其他用户)的权限均不会高于此权限,受此权限的影响而非传统的组权限
getfacl 可看到特殊权限: flags
默认ACL权限给了x,文件也不会继承x权限。
base ACL 不能删除
setfacl -k dir 删除默认ACL权限
setfacl -b file1清除所有ACL权限
getfacl file1 | setfacl –set-file=- file2 复制file1的acl权限给file2
5.备份和恢复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
#getfacl -R /tmp/dir1
linux文件权限管理与ACL访问控制列表