一、访问控制列表
1.ACL的作用
访问控制列表(ACL,Access Control List),在基本的文件的权限管理之上,实现了灵活的权限管理。一个文件设置了ACL,那么除了文件的所有者,所属组和其他人,可以为更多的用户设置ACL权限,使之可以对文件进行或者不进行权限的操作。
Centos7默认创建的xfs和ext4文件系统具有ACL功能,Centos7之前版本,默认手工穿件的ext4文件系统无ACL,需要手动增加
tune2fs -o acl /dev/sdb1
mount -o acl .dev/sdb1 /mnt/test
ACL的内容格式为(可用getfacl FILENAME查看ACL):
# file: FILENAME
# owner:
# group:
user::权限
group::权限
other::权限
ACL的设置格式:setfacl -m [d [efault]:] [u [ser]:] uid [:perms] FILENAME
从格式可以看出,ACL可以为多个用户或组设置文件和目录的访问权限rwx
2.ACL中的umask
ACL中有一个umask值,通常它是添加的ACL权限中权限最多的值,它限制着添加的ACL的权限,由于这个值可以修改,因此在某些ACL中可以看到某一条的ACL条目后会加上注释用以说明其有效权限。比如对某个文件添加一个权限比umask大的ACL,此时使用-n选项让系统不更新umask的值,那么添加进去的ACL将会有注释它的有效权限。也就是说这ACL的有效权限只有在umask存在的权限,例外ACL是不会给某条ACL添加上ACL没有而umask有的权限。
3.默认ACL权限
默认的ACL权限用于目录,在该目录下创建的文件都有默认的ACL权限,但是给目录默认x权限,目录内文件不会继承x权限。
4.ACL的备份和恢复
cp和mv都支持ACL,cp命令需要加上-p参数,tar等参见的备份工具不会保留目录和文件的ACL信息
基本格式 getfacl -R /tmp/dir1 >acl.txt
Setfacl -R –set-file=acl.txt /tmp/dir1
二、文件权限的字母法和数字法
1. 文件权限的字母法
·文件的权限一般有读、写、执行三种,分别用r、w、x表示。文件所有者、文件所属组用户、其他用户都可以使用rwx三个权限。Linux中用a表示文件所有者、文件所属组用户、其他用户,u表示文件所有者,g表示文件所属组用户,o表示其他用户修改文件的权限命令为chmod,为某个文件修改权限的格式为:
chmod [a|u|g|o][+|-][r|w|x] FILENAME
使用字母法可以很清晰的指明文件修改哪些权限
2. 文件权限的数字法
文件的权限可以按照字母设置对应的数字,即— 000 –x 001 -w- 010 r–100,这样就可以将某个用户的权限加起来用数字表示,例如rw==100+010==4+2=6;rx==100+001==4+1=5;
所以设置格式可以为
chmod xxx(计算好的权限) FILENAME
在linux中有一个用于新建文件和目录的默认权限的umask值,一般情况下非特权用户的umask是002,root的umask是022,在命令行界面也可以输出入umask来查看这个值,一般情况下,新建的文件权限为666-umask,新建DIR权限为777-umask,如果因为修改umask值二导致文件权限计算出来的结果存在执行(奇数)权限,则将其权限加1
三、重定向和管道
1. 重定向
Linux提供给程序三种I/O设备,分别是:
标准输入(stdin)默认接受来自键盘的输入,数字上用0表示
标准输出(stdout)默认输出到终端窗口,数字上用1表示
标准错误(stderr)默认输出到终端窗口,数字上用2表示
将这三种发I/O设备改变默认位置,称之为重定向,三种I/O设备的操作符号:
>把stdout重定向到文件,此时文件若有内容则会被覆盖,可使用set -C 禁止覆盖文件,但是可以追加,使用>|可以强制覆盖,>>可用于向文件追加内容,<<XX ……..<<XX用于多行重定向
2>把stderr重定向到文件,文件内容会被覆盖,使用2>>可以追加
&>把所有输出重定向到文件,文件内容会被覆盖,使用&>>可以追加
使用小括号()可以将多个程序的输出合并
2. 管道
管道用于连接命令,管道将前一个程序的标准输出作为后一个程序的标准输入(在程序前加xargs,可逐条传递前一个命令的标准输出)。
Stderr默认不能通过管道转发,可以使用2>&1或者|&实现,即将标准错误转换成正确再用管道。
tee用于将前一条命令的stdout作为后一条命令的stdin,并且输出到标准输出流,类似于一个T型
附:几个小命令的学习
chown: 设置文件的所有者
chown [OPTION]… [OWNER][:[GROUP]] FILE…
or: chown [OPTION]… –reference=RFILE FILE…
-c:更改所有者完成后,给出提示信息,在命令没有错误并且执行后时会提示更改了所有者
-f:屏蔽大部分命令的错误信息,更改的所有者不存在的错误不能屏蔽,文件不存在的错误可以屏蔽
-v:为每个处理的文件输出一个诊断信息
-h:只更改软链接(符号链接)的所有者,而不会影响链接所指向文件的所有者,也就是说不使用这个选项修改软链接的所有者,那么只会更改对应的文件的所有者,而不会改变软链接的所有者
-R:递归的操作文件或文件和目录,修改某个目录的所有者时,该目录下的所有的文件的所有者都会被递归修改
–reference:将后一个文件file的所有者修改成前一个文件rfile的所有者
chgrp: 设置文件的所属组
chogrp [OPTION]… GROUP FILE…
or: chgrp [OPTION]… –reference=RFILE FILE…
-c:更改所属组完成后,给出提示信息,在命令没有错误并且执行后时会提示更改了所属组
-f:屏蔽大部分命令的错误信息,更改的所属组不存在的错误不能屏蔽,文件不存在的错误可以屏蔽
-v:为每个处理的文件输出一个诊断信息
-h:只更改软链接(符号链接)的所属组,而不会影响链接所指向文件的所属组,也就是说不使用这个选项修改软链接的所属组,那么只会更改对应的文件的所属组,而不会改变软链接的所属组
-R:递归的操作文件或文件和目录,修改某个目录的所属组时,该目录下的所有的文件的所属组都会被递归修改
–reference:将后一个文件file的所属组修改成前一个文件rfile的所属组
chmod: 修改文件权限,修改软链接的权限时修改的是软链接指向的文件的权限
chmod [OPTION]… MODE[,MODE]… FILE…
or: chmod [OPTION]… OCTAL-MODE FILE…
or: chmod [OPTION]… –reference=RFILE FILE…
-c:更改权限完成后,给出提示信息,在命令没有错误并且执行后时会提示更改成什么样的权限
-f:屏蔽大部分命令的错误信息,更改的权限错误不能屏蔽,文件不存在的错误可以屏蔽
-v:为每个处理的文件输出一个诊断信息
-R:递归的操作文件或文件和目录,修改某个目录的权限时,该目录下的所有的文件的权限都会被递归修改
–reference:将后一个文件file的权限修改成前一个文件rfile的权限
umask: 显示或设置文件模式掩码,创建的文件或目录的权限与之相关
-p:输出可被调用,可以用于输入
-S:以模式的形式显示,即“u=rwx,g=rx,o=rx”形式
chattr: 字母“aAcCdDeijsStTu”选择文件的新属性:仅追加(a),没有 一次更新(A),压缩(c),(C)没有拷贝,没有转储(d), 同步目录更新(D),范围格式(e),不可变(i)(j),安全 删除(s),同步 – 没有更新(S),没有尾部合并(T),顶部目录层次结构(T),和不可取消(u)
lsatrr: 显示通过chatrr加的特定的属性
setfacl:设置文件访问控制列表
ACL条目
[d [efault]:] [u [ser]:] uid [:perms]
指定用户的权限,如果uid为空,则拥有文件所有者的权限
[d [efault]:] g [group]:gid [:perms]
指定组的权限,如果gid为空,则拥有组的权限
[d[efault]:] m[ask][:] [:perms]
有效的权限掩码
[d[efault]:]o[ther] [:] [:perms]
他人的权限
-m:设置文件的ACL规则
-M:将某个文件中设置好ACL条目设置为指定文件的ACL
-x:移除某个文件中的某条ACL,不会移除mask
-X:从指定文件中移除存放ACL条目的文件中的ACL
-b:移除所有的ACL条目,包括mask
-k:移除默认的ACL条目,默认的ACL只能对目录使用,使用后新建的文件都会有默认的ACL条目,删除目录的默认ACL条目后,目录下的文件的ACL条目不会改变
-n:设置ACL条目时不更新mask,即以前的mask不会应为ACL新加的文件原来没有的权限而修改mask
-d:设置文件的默认ACL条目仅对目录有效
-R:将对目录设置ACL条目递归到子目录中,包括目录和文件
-L:会为只有符号链接在目录下的文件设置ACL,与R连用
-P:遵循物理路径,与R连用,如果一个文件的真实文件不在目录下而是一个符号链接,那么在为这个目录设置ACL时会跳过这种符号链接,即不会为符号链接指向的文件设置目录的ACL条目
getfacl:查看文件的ACL
-a:仅显示文件的ACL条目
-d:仅显示默认的ACL,即ACL条目最上面的那几条注释
-c:仅显示文件的ACL,会显示ACL后effective注释,ACL条目最上面的默认ACL的注释不会显示
-e:打印所有的有效权限
-E:不打印有效权限
-s:跳过只有基本条目的文件
-R:递归查看子目的ACL,可用于备份ACL
-L:可以查看符号链接指向的文件的ACL,与R连用
-P:不会查看只有符号链接在目录下的文件或目录的ACL
-n:使用表格输出格式
-p:查看文件ACL时不删除前导的“/”
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89393