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

  在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

(0)
上一篇 2016-08-04 22:14
下一篇 2016-08-05 10:17

相关推荐

  • 远程使用sshd连接不上服务器解决方案

    前些天在学习linux的时候CRT怎么也连接不上我的linux服务器了,整了半天,请教了一些高人才把这个问题解决,现在整理一下我的解决方案。 大家可以看到配置都正确但就是连不上。 通过查看得出原来是22端口拒绝~! 那么我就去查看22端口有没有开启 大家可以看到我的22端口也就是sshd服务并没有开启。 我去开启我的sshd服务器,但是又出现了问题~! 随后…

    Linux干货 2016-03-28
  • 第二十周作业

    1、用Keepalived实现nginx与lvs的高可用集群; lvs+keepalived: 1)后端两台rs上安装web服务并创建探测页面 ~]# yum install nginx -y ~]# systemctl start nginx.service ~]# vim /usr/share/nginx/html/index.html <h1&g…

    2017-07-03
  • haproxy实现discuz论坛的动静分离和负载均衡

    一、在cs2、cs3、cs4上安装httpd [root@cs2 ~]# yum install httpd [root@cs3 ~]# yum install httpd [root@cs4 ~]# yum install httpd 二…

    Linux干货 2016-06-05
  • 不忘初心,砥砺前行!

    这是本人第一次书写博客,难免有些小心翼翼,手足无措,但每个人都有这样的经历,转念一想也就释怀了。时光飞速,我们已不再年轻,从大学毕业的那天起,我们就再也不是小孩子了。 7月的天气总是那么折磨人,高温让我们步履维艰,在7月只想找一片月淡风轻的乐土,度过一个难熬的夏天,或找一间空调房,调大音量,享受午后时光。但这样的日却离我们很远,这个夏天我们背起行囊,远离故土…

    2017-07-11
  • 学习宣言

    娶媳妇!娶媳妇!娶媳妇有木有!!! 请享受无法回避的痛苦!!!!!!!

    Linux干货 2016-12-27
  • Linux 的硬链接与软链接的区别

       链接是指在电子计算机程序的各模块之间传递参数和控制命令,并把它们组成一个可执行的整体的过程。通俗一点无非是把文件名和计算机文件系统使用的节点号链接起来。   linux中链接有硬链接和软连接之分,首先我们来介绍硬链接,硬链接相当于创建了文件的第二个名字,增加了额外的记录项用来引用文件,还是隶属与同一文件系统上,是同一个物理…

    Linux干货 2016-10-20

评论列表(1条)

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

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