文件的权限和访问控制列表

  在linux管理中,为了使不同的用户对文件有不同的操作权限。我们需要正确的修改文件的权限,一方面是为安全着想,

另一方面则是防止自己辛辛苦苦码出的东西被其它用户给误删。

1.如何修改文件的属主和属主:

  前面用户和组管理的内容中,我们已经对文件的属主、属组问题做了说明。有时候我们需要对一些文件的属组和属组进行修改,

这里会用到两个命令:chgrp和chown命令。

 (1)修改文件的属组:chgrp

    chgrp [OPTION]… GROUP FILE..

    chgrp [OPTION]… –reference=RFILE FILE…

        -R 递归修改文件夹及其下的文件的属组

 (2)修改文件的属主和属组:chown

    chown [OPTION]…[owner][:[GROUP]] FILE…

    用法:

        owner

        owerner:group

        :group

        命令中的冒号可用.替换;

        -R:递归

        chown [OPTION]… –reference=RFILE FILE…

2.文件的权限:

    文件的权限是文件属主,属组及其它用户拥有对文件的操作权限的显示。

 (1)文件:

     r:可使用文件查看类工具获取其内容

     w:可修改其内容

     x可以把此文件提请内核启动为一个进程

 (2)目录:

     r:可以使用ls 查看此目录中文件列表

     w:可在此目录中创建文件,也可删除此目录中的文件

     x:可以使用ls -l查看此目录中文件列表,可以cd进入目录

     X:只给目录x权限,不给文件x权限(在其下创建的目录都有x权限,而文件没有)

 (3)文件权限数字表示:

    r(读):100:4; w(写):010:2; x(执行):001:1;

 (4)修改文件的权限

    chmod命令:

    使用方法:

       chmod [OPTION]… OCTAL-MODE FILE…

    -R:递归修改权限

      chmod [OPTION]… MODE[,MODE]… FILE…

    MODE:

    修改一类用户的所有权限

    u= g= ug= a= u=,g=

    修改一类用户某位或某些位权限

    u+ u- g+ g- o+ o- a+ a- + –

    chmod [OPTION]… –reference=RFILE FILE…

    参考RFLE文件权限、,将FILE的修改为同RFILE;

 (5)umask:

     umask是用来设定新建文件和目录的默认权限

     新建FILE权限:666-umask;如果结果中哪一位存在权限位为奇数情况,则把它的权限+1

     新建DIR权限:777-umask

     在linux中系统给我们默认的root的umask是022,非root的umask是002

     umask命令不加参数可以用来查看系统umask值。umask #:临时自定义umask的值。永久生效需写进配置文件

     umask -S 模式方式显示umask,umask -p 输出可被调用,如:umask -p > /etc/bashrc

     全局设置写入:/etc/bashrc:用户个人设置则在:~/.bashrc中修改

    

 (6)文件权限相关的课堂练习:

     1)当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?

     用户小明不能进入/testdir,不能删除,不能创建。使用ll能看到有哪些文件,但是看不到具体信息

     2)当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作?

     不能查看文件夹内部有哪些文件,如果知道文件夹内有哪些,则可以删除,也可以在里面创建

     3)当用户wangcai 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

     不能删除,对目录无写权限,说明不能删除目录中包含的file1的文件名和inode的对用关系

     因为文件只读,所以也不会有修改权限

     如果wangcai对目录有写权限,则能够删除文件,但是还是不能修改文件

    4)复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限

            ]# cp /etc/fstab /var/tmp/            
            
            ]# groupadd sysadmins
            ]# chmod 660 fstab
            ]# ll
            total 4
            -rw-rw---- 1 ci sysadmins 921 Aug  4 20:52 fstab

3.linux文件系统上的特殊权限:

 (1)安全上下文

    前提:进程有属主和属组;文件有属主和属组

     1)任何一个可执行程序能不能启动为进程:取决于发起者对程序文件是否拥有执行权限

     2)启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组

     3)进程访问文件的权限,取决于进程的发起者

         进程的发起者,同文件的属主:则应用文件属主权限

          进程的发起者,属于文件属组;则用用文件属组权限

          应用文件‘其它’权限

 (2)可执行文件上SUID权限

     1)任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限

     2)启动为进程之后,其进程的属主为原程序文件的属主

     3)SUID只对二进制可执行程序有效

     4)SUID设置在目录上无意义

     5)权限设置:

        chmod u+/-s FILE…

 (3)可执行文件上的SGID权限

    1)任何一个可执行文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限

    2)启动为进程之后,其进程的属主为原程序文件的属组

    3)权限设置:

        chmod g+/-s FILE…

 (4)目录上的SGID权限

     1)默认情况下,用户创建文件时,其属组为此用户所属的主组

     2)一旦某目录被设置了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

     3)通常用于创建协作目录

    4)权限设定:

        chmod g+/- DIR…

 (5)Sticky位

     1)具有写权限的目录通常用户可以删除该目录中的任何文件,无论该问及爱你的权限或拥有权

     2)在目录设置Sticky位,只有文件的所有者或root可以删除该文件

     3)Sticky设置在文件上无意义

     4)权限设置:

chmod o+/-t DIR…

 (6)特殊权限数字法:

     SUID:4; SGID:2;Sticky:1;

     chmod 4777 /tmp/a.txt

     特殊权限中的SUID占据属主的执行权限位,属主有执行权限则为s,属主无执行权限则是S

     SGID在属组的执行权限位,也是用s字母表示。属组有执行权限则为s,属组无执行权限则是S

     Sticky在other的执行位:other有执行权限则是t,other无执行权限则是T

3.设定文件特殊属性:

     命令chattr:设置文件的特殊属性,对文件的修改做更严格的限制

     chattr +i 不能删除,改名,更改

     chattr +A 不修改文件的访问时间(atime不变)

     chattr +a 只能增加

     lsattr 显示特定属性

取消则是把+改为-

4.访问控制列表:

 (1)ACL:Access Control List,实现灵活的权限管理

 (2)除了文件的所有者,所属组和其它人,可以对特定的用户设置权限

 (3)CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。

 (4)CentOS7.x之前的版本,默认手工创建的ext4文件系统无acl功能,需要手动添加

    tune2fs -o acl /dev/sdb1

    mount -o acl /dev/sdb1 /mnt

 (5)ACL生效顺序:所有者,自定义用户,自定义组,其它人

 (6)为多用户或者组文件和目录赋予访问权限rwx

     mount -o acl /DIR 使挂载在该目录下的文件系统拥有acl功能

     getfacl file|DIR 查看文件或目录的acl信息

     setfacl -m u:wang:rwx file|dir 设置文件或目录的对wang用户的权限位读写执行

     setfacl -Rm g:sales:rwX DIR 递归设置组对目录的访问权限

     setfacl -M file.acl file|dir 以文件的形式批量修改文件或目录对多个用户的访问权限

     setfacl -m g:salesgroup:rw file|dir 设置salegroup组对文件或目录的访问权限

     setfacl -m d:wang:rw dir  设置默认的acl权限,只针对新文件

     setfacl -x u:wang file|dir 删除文件或目录的acl设置

     setfacl -X file.acl dir 批量删除acl设置

 (7)ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限

 (8)默认ACL权限给了x,文件也不会继承x权限,base ACL不能删除

 (9)setfacl -k dir 删除默认ACL权限,setfacl -b file1 清除所有ACL权限

 (10)getfacl file1|setfacl –set-file=- file2 复制file1的acl权限给file2

 (11)mask只影响所有者和other之外的人和组的最大权限,MASK需要和用户的权限进行逻辑与运算后

    才能编程有限的权限(Effective Permission)

    用户或组的设置必须存在与mask权限设定范围内才能生效

        setfacl -m mask::rw file

    –set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的位置,和-m选项添加ACL有一定区别

        setfacl –set u::rw,u:wang:rw,g::r,o::- file1

 (12)访问列表的备份和还原:

     主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数,但是tar等常见的备份工具是不会保留目录

     和文件的ACL信息

     getfacl -R /tmp/dir1 > acl.txt 备份dir1目录下 文件的ACL信息到acl.txt中

     setfacl -R -b /tmp/dir1 删除dir1目录下文件的acl列表

     setfacl -R –set-file=acl.txt /tmp/dir1 恢复dir下的acl列表

     getfacl -R /tmp/dir1 递归显示dir1下文件的acl列表

    

问题:在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。

    ]# mkdir -p /data/testdir
	]# groupadd g1; groupadd g2; groupadd g3
	]# useradd alice;useradd tom
	以上为创建目录、用户、组的初始化准备工作
	]# gpasswd -a alice g2;gpasswd -a tom g3
	]# setfacl -m d:alice:rw  ../testdir #
	]# setfacl -m d:tom:r  ../testdir
	]# setfacl -m d:o:0  ../testdir
	]# getfacl ../testdir
	# file: ../testdir
	# owner: root
	# group: root
	user::rwx
	group::r-x
	other::r-x
	default:user::rwx
	default:user:alice:rw-
	default:user:tom:r--
	default:group::r-x
	default:mask::rwx
	default:other::---
	]# touch f1
	]# getfacl f1
	# file: f1
	# owner: root
	# group: root
	user::rw-
	user:alice:rw-
	user:tom:r--
	group::r-x                      #effective:r--
	mask::rw-
	other::---

	[root@CentOS6 testdir]#

原创文章,作者:提着酱油瓶打醋,如若转载,请注明出处:http://www.178linux.com/29243

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-07 23:42

    对命令的总结很详细,如果有一些应用场景模拟会让你对各个权限理解会更深刻哦