1、文件、目录的权限和归属

权限:r可读4、w可写2、x可执行1、-无权限0

归属:属主、属组(新创建的文件和目录的属主是当前用户,属组是当前用户的基本组)

1)查看文件和目录的权限

ls –l /etc/passwd

drwxr-xr-x  1  root  root  12288  05-12  04:03  /etc

第1字符表示文件类型,-普通文件、d目录、l链接文件、b块设备文件、c字符设备文件

第2-4字符表示文件的属主对该文件的权限

第5-7字符表示文件的属组内的用户对该文件的权限

第8-10字符表示其他用户对该文件的权限

注:第二列的含义,如果是文件则表示文件的硬链接数,如果是目录则表示包含的子目录数(默认.和..)

2)设置文件和目录的权限

语法:①chmod [ugoa] [+-=] [rwx] 文件或目录

②chmod nnn 文件或目录 (简便易用)

u 代表属主;g 代表属组;o 代表其他任何用户;a 代表所有用户(省略时也代表所有用户)

+ 表示添加权限;- 表示删除权限;= 表示仅设置对应的权限

r表示可读;w表示可写;x表示可执行;- 表示相应的权限没有被授予

rwx也可以用数字来代替:r 4;w 2;x 1;- 0

-R选项表示递归修改目录中所有子目录和文件的权限

注:①root是超级管理员,所有权限设置对root无效

    ②也可通过字母方式同时设置多个权限,如chmod u=rw,g=w,o=x install.log

    ③rwx是文件/目录权限的基本ACL规则

3)设置文件和目录的归属

语法:chown 属主[:属组] 文件或目录

-R选项表示递归修改目录中所有子目录和文件的归属

注:①只有root用户才能使用chown命令

②同时修改属主、属组时中间用冒号分隔,即使只设置属组,也要保留冒号

③chown可同时修改属主和属组,而chgrp只能修改属组,所以一般都使用chown

④默认只有root能修改属主和属组,其他任何用户都没权限,除非执行chmod u+s /bin/chown

⑤即使文件的所有者对文件没有写权限,也可以写入文件,保存时使用!强制保存即可

 

注:①用户宿主目录的所有者是其对应的用户,权限是700,即其他用户没有任何权限

    ②当为目录设置某用户具有可执行权限,但没有读取权限时,用户必须直接访问目录下的子目录或文件才行,用户不能使用ls命令浏览目录中的内容

2、umask权限掩码

新建目录默认权限:root用户新建目录的权限是755,普通用户新建目录的权限是775

新建文件默认权限:root用户新建文件的权限是644,普通用户新建文件的权限是664

1)概念

权限掩码用于设置用户新创建的文件或目录的默认权限

权限掩码由三位数字组成,用默认满权限减去权限掩码,就是创建文件或目录时的默认权限

注:默认满权限,即Linux内核级别新建目录或文件时的默认权限,分别为777(目录)和666(文件)

2)设置

语法:umask  权限掩码

#umask           --直接执行umask可查看当前用户权限掩码

#umask 0077     --设置root的umask为0077,使创建的文件或目录只对root有权限(700、600)

注:①默认root用户的umask值为022,普通用户的umask值为002

    ②将默认满权限减去权限掩码,得出root新建的目录权限应为755,新建的文件权限为644

    直接使用umask命令修改只是临时生效,重启后失效,可将命令写入~/.bashrc文件中永久生效

    ④使用umask命令显示权限掩码时为4位,千位的0表示SUID、SGID、Sticky属性

3、附加权限

1)SET位权限(SUID、SGID)

执行文件被设置了SUID、SGID权限后,任何用户在执行时都将获得文件属主、属组相对应的权限

SUID表示对属主用户增加SET位权限;SGID表示对属组内用户增加SET位权限

语法:chmod u+s myfile | chmod g+s myfile

SUID对应数字为4;GUID对应数字为2,其也可通过数字形式表示4775,2775,6775

设置SET位权限后对应位置的x将变为s

例: ls -l /usr/bin/passwd 查看权限

/etc/passwd文件,普通用户虽无法直接修改文件,但可通过passwd命令修改自己的密码

2)粘滞位Sticky

用于对目录设置的附加权限,设置粘滞位后只有文件目录的所有者或root用户可以删除对应文件

语法:chmod u+t myfile | chmod g+t myfile

对应数字为1和0,1表示添加粘滞位;0表示移除粘滞位

设置粘滞位后其他用户的x将变为t

例:ls –ld  /tmp  或 ls –ld /var/tmp

注:①SET位权限只对可执行文件有效,为普通文件设置无效,设置后标记字符将变为大写字母“S”

②粘滞位只对目录有效,为普通文件设置无效,设置后标记字符将变为大写字母“T”

4、ACL访问控制列表

1)概述

  ACL是Linux文件系统的一种文件访问控制机制,可以设置特定用户或者组对于一个文件的操作权限

setfacl是用来设定文件的ACL

getfacl命令是用来读取文件的ACL

2)开启ACL功能

#setfacl --version                               //查看setfacl版本

#tune2fs -l /dev/sdb1                            //查看文件系统是否支持acl权限控制

#tune2fs -o acl /dev/sdb1                        //开启acl功能,永久生效

#mount -o remount,acl  /dev/sdb1                 //重新挂载,开启acl功能,临时生效

#vi /etc/fstab                                   //使分区永久支持acl功能

  /dev/sdb1 /mnt/acltest ext4 defaults,acl 0 0

注:①默认只有在安装系统时建立的分区才支持ACL功能,后建立的分区默认都不支持ACL功能

    ②开启acl功能,既可以通过tune2fs命令,也可以通过修改/etc/fstab文件

3)设置权限

语法:setfacl 选项 文件|目录

-m修改权限、-x删除指定权限、-b删除全部权限、-d设置默认权限、-k删除默认权限、-R递归操作

(1)配置用户权限

#setfacl -m u:tom:rw  a.txt

#setfacl -m u:tom:r,u:jack:rw a.txt

#ls -l

#getfacl a.txt

注:①权限可以使用字母或数字,多条acl规则间以逗号相隔

    ②当为文件设置acl规则后,使用ls查看时文件权限后会出现+号,表示此文件被设置了acl规则

    ③当为文件设置acl规则后,使用getfacl来查看其权限,以此为准,不要再使用ls -l查看权限

(2)配置组权限

#setfacl -m g:manager:rw a.txt

(3)配置默认权限DEFAULT ACL

默认权限是指对于一个目录进行Default ACL设置,并且在此目录下建立的文件都将继承此目录的ACL

例:创建目录software,并希望在此目录下建立的文件都可以被tom读写

#mkdir  software

# setfacl -d -m u:tom:rw ./software/

或#setfacl -m d:u:tom:rw ./software/     ---此两种方式都可以设置默认ACL属性

#getfacl ./software/       ---查看

#touch ./software/b.txt

#getfacl ./software/b.txt    ---验证

注:只能为目录指定default ACL属性,不能针对文件设置

(4)删除acl规则

   #setfacl -x g:manager a.txt   ----取消某项权限

#setfacl -k a.txt                  ----删除默认acl规则,如果没有默认规则,则不会提示

#setfacl -b a.txt                  ----删除所有扩展的acl规则,基本的acl规则被保留

#chacl -B       ----彻底删除文件或者目录ACL属性(包括Default ACL),ls –l查看不再显示+号

(5)配置有效权限(Effective permission),可用于限制最大权限

#setfacl -m m:r a.txt

注:①设置有效权限后,以“#effective:”后的权限为准,但最大权限设置并不影响基本的acl规则

    ②设置有效权限后,通过ls看到的属组权限其实不再是属组的权限,而ACL的最大权限,所以要查看准备的权限应使用getfacl命令

 

注:①默认文件目录仅包含3个基本的acl规则(属主、属组、其他)

    ②用cp复制文件时候加上-p选项保留文件的ACL属性,mv命令将会默认地移动文件的ACL属性

    ③setfacl和chmod设置的权限可以相互覆盖