Linux运维之路基础学习四

当文件的权限不能满足某个用户时,ACL是一个好办法

一、访问控制列表

1.ACL的作用

访问控制列表(ACLAccess Control List),在基本的文件的权限管理之上,实现了灵活的权限管理。一个文件设置了ACL,那么除了文件的所有者,所属组和其他人,可以为更多的用户设置ACL权限,使之可以对文件进行或者不进行权限的操作。

Centos7默认创建的xfsext4文件系统具有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的备份和恢复

       cpmv都支持ACLcp命令需要加上-p参数,tar等参见的备份工具不会保留目录和文件的ACL信息

基本格式 getfacl -R /tmp/dir1 >acl.txt

              Setfacl -R –set-file=acl.txt /tmp/dir1

 

二、文件权限的字母法和数字法

1.     文件权限的字母法

·文件的权限一般有读、写、执行三种,分别用rwx表示。文件所有者、文件所属组用户、其他用户都可以使用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=6rx==100+001==4+1=5;

所以设置格式可以为

chmod xxx(计算好的权限) FILENAME

linux中有一个用于新建文件和目录的默认权限的umask值,一般情况下非特权用户的umask002rootumask022,在命令行界面也可以输出入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,会显示ACLeffective注释,ACL条目最上面的默认ACL的注释不会显示

       -e:打印所有的有效权限

       -E:不打印有效权限

       -s:跳过只有基本条目的文件

       -R:递归查看子目的ACL,可用于备份ACL

       -L:可以查看符号链接指向的文件的ACL,与R连用

       -P:不会查看只有符号链接在目录下的文件或目录的ACL

       -n:使用表格输出格式

       -p:查看文件ACL时不删除前导的“/”

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89393

(0)
上一篇 2017-12-03 13:29
下一篇 2017-12-03 15:00

相关推荐

  • 马哥教育网络第21期-第五周课程练习

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@6 ~]# grep '^[[:space:]]\+' /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白…

    Linux干货 2016-08-15
  • RPM包管理功能全解。【第三周】

    CentOS系统上rpm命令管理程序包: 安装、升级、卸载、查询、校验、数据库维护 rpm命令:rpm [OPTIONS] [PACKAGE_FILE]     安装:-i, –install     升级:-U, –update,&n…

    Linux干货 2016-11-26
  • 以水浒为例解释文件权限

    关于文件权限的内容学起来比较绕,稍不注意就会把自己绕晕,这时候不如找一个例子来记忆,这样记起来比较容易而且还会记忆深刻,接下来就以水浒为例解释下关于文件权限方面的内容 桃园三结义,兄弟三人组成一个组,选刘备当大哥,兄弟三人都在这个组里 兄弟三人还是居无定所的,要给刘关张兄弟三人造个房子,给兄弟三人一个容身之所,而且给兄弟三人一人一个房间   但建好…

    2017-07-30
  • yum与rpm生产中最频繁使用

    yum 命令 使用方法: yum [选项] [包名称] 常用选项: install #安装软件,后面跟包名称,例如:yum install wget 安装wget软件包list #列出所有软件,一般和grep一起使用,例如:yum list | grep java ,查看所有java安装包,一般情况下不使用search,grep可以更大范围搜索包,例如只记得…

    Linux干货 2017-04-18
  • RAID and LVM

    RAID          Redundant Arrays of  inexpensive(Independent)Disks,RAID:容错式廉价磁盘阵列,容错式独立磁盘阵列,简称RAID,由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988…

    Linux干货 2016-09-02