Linux文件系统权限详解

一、综述

在用户和组的管理中介绍了Linux系统是用户多任务的分时操作系统,这意味着同时可以有多人在同一台pc上进行不同的操作。为了能够保护每个用户的数据安全,针对不同的用户设置相应的权限是非常重要的。

Linux文件系统权限主要针对三类用户:

文件的所有者: owner,用u标识

文件的所有组:group,用g标识

其他人: other,用o标识。不包含在文件所有者和所有组内的系统其他用户。

二、文件权限及从属关系修改

       1、查看文件权限

       使用ls –l可以查看。以

blob.png

       1.1文件类型:

普通文件—f;目录文件—d;块设备文件—b;字符设备文件—c;软连接文件—l;套接字文件—s;管道文件—p

       1.2文件权限:

              读—r  readable

              写—w writeable

              执行—x。excutable(比如脚本、二进制文件、目录等文件具有此权限)

本文主要就文件权限进行解释以及对文件属组、属主、权限的修改做相关介绍。其他内容暂不做介绍。

    2、对于文件和目录来说,rwx代表的权限是不一样的。

rwx对文件来说:

       r: 代表可以使用文件查看类命令来查看文件内容,比如cat、less等。

       w:代表可以通过编辑器等修改文件内容。比如vim、nano、重定向等。

       x: 代表可以把此文件提交给内核启动为进程。

rwx对目录来说:

       说明下,目录也是一种文件,存放的是下属的文件与inode节点的对应关系。

       r: 可以通过ls查看文件内容

       w:可以在该目录下创建文件或删除文件

       x:可以通过cd命令进入该目录,以及通过ls –l查看目录下属文件的详细信息。 

3、文件权限的表示方法:

       文件的权限是3个字符一组的。分别对应所有者、所属组、其他人的权限

blob.png

权限、二进制、八进制表示如下表

blob.png

例如:/etc/passwd的权限rw-r–r–可以表示为: 644

4、文件权限的修改

       通过chmod命令修改。用法为:

              chmod  [OPTION]…  OCTAL-MODE  FILE…   

                     常用options有:

-R 表示递归修改,长用于包含多个文件或子目录的目录权限修改。

–reference=source_file 参考某文件的权限来修改

4.1修改权限的方式一:

       可以针对属主、属组、other单独修改: chmod  u=|g=|o=  file/dir

也可以组合修改: chmod  ug=|go=  file/dir

例:在某目录下有test.file文件,对其进行权限修改

blob.png

4.2 方法二:

使用八进制来修改。上图中文件的权限为664,将其修改为属主、属组、other都具有r、x权限。

blob.png

4.3 方法三:

参考某文件的权限进行修改。如:新建文件new.file,参考test.file将其权限修改与test.file一致。

blob.png

5、修改文件从属关系

5.1 修改属主、属组。chown命令

chown  [options] username:groupname  filename

       常用options:-R 递归,用于目录

chown  root  testfile :修改文件的属主

chown  root:admins  testfile:修改文件的属主和属组

chown  :admins  testfile:修改文件的属组

例:将test.file 属主、属组修改为hadoop,new.file属组修改问gentoo

blob.png

5.2 chgrp (change group的缩写,顾名思义,只能修改文件的属组)

chgrp  grouname  file

       常用参数:-R:递归,用于目录

三、umask介绍

       umask指在创建文件或目录时的默认权限。

              1、新建的文件默认权限:666-umask

                     一般来说,文件默认不允许包含x权限,如果所得结果某位存在执行(奇数)权限,则将其权限+1

              2、新建的目录默认权限:777-umask

查看umask:umask

       blob.png

设定umask:umask #

       blob.png

umask –p:输出可被调用

五、linux文件系统的特殊权限

       权限针对owner、group、other,特殊权限也分别针对这三类用户。

owner、group、other分别对应SUID、SGID、STICKY。

5.1 SUID介绍

       要了解SUID的应用,先来了解下安全上下文。

安全上下文:任何一个可执行文件能不能启动为进程,起决于其发起者对程序文件是否有可执行权限。启动为进程后,进程的属主为发起者,进程的属组为发起者所属的组。进程访问文件时的权限,起决于进程的发起者:

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

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

3、 应用other的权限

应用场景:当一个用户要以程序文件的的属主身份发起进程,并且访问文件时。比如:passwd命令可以修改用户的密码,但是普通用户对/etc/passwd没有读权限,对/etc/shadow是没有任何权限的。但是普通用户又能成功修改密码,这是因为,passwd文件具有SUID权限。

blob.png

 

 设置和取消SUID权限。

 chmod  u+s  file  设置SUID

 chmod  u-s  file  取消SUID

blob.png

当文件的属主具有x权限是,SUID表现为s,当没有SUID权限时,表现为S。

需要注意的是。具有SUID的程序文件运行为进程访问文件是通过程序文件的属主来对比权限的,在给属主为root的文件设置SUID时应考虑到到对系统的破坏性,建议慎用。

5.2 SGID介绍

       当多个成员共同参与一个项目,该项目有专用的目录来存放项目文件,目录的属组为项目组。这时,项目成员在该目录下创建的目录分别为自己的基本组,对于项目组管理来说带来不便。

若为此目录设置设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组。这就是SGID的作用。

SGID的设置方法:

chmod g+s DIR…

chmod g-s DIR…     

5.3 STICKY介绍

       若一个用户对某目录具有rwx权限时,意味着他可以删除该目录下其他用户的文件,在项目协作的目录中,要使用户只能删除自己所有的文件,其他文件可以修改但是不可删除。这就需要设置STICKY权限。

权限设定:

chmod o+t DIR…

chmod o-t DIR…

5.4 权限位映射:

     SUID: user,占据属主的执行权限位

s: 属主拥有x权限

S:属主没有x权限

    SGID: group,占据属组的执行权限位

s: group拥有x权限

S: group没有x权限

   Sticky: other,占据other的执行权限位

t: other拥有x权限

T: other没有x权限

六、访问控制列表

       ACL(Access Control List)

除了文件的所有者,所属组和其它人,可以对更多的用户设置权限,实现灵活的权限管理。

6.1 设置ACL

setfacl  –m  u|g:username|groupname:mode  file:为某用户或组设置acl。

setfacl  -M  acl_file  file:使用acl_file里面的配置来设置文件的acl

setfacl  -x  user  file:删除指定文件指定用户的acl

setfacl  -X  acl_file  file:参考cal_file删除指定文件的acl配置

mask的权限也可通过修改属组的权限来修改,属组的权限和mask权限同步

setfacl  -m  mask::mode file

setfacl  -m  d:u:username:mode  dirname:对一个目录设置defaults权限,在目录先新建的文件将继承此权限

setfacl  -k  file/dir:删除默认的acl权限

mask:除了所有者和other,其他用户的权限不能高于mask定义的权限;

setfacl  -b f ile/dir:删除所有的acl权限(包括属组的权限,通过setfacl新增的用户、组的权限等)

setfacl  acl.txt | setfacl  -M-  newacl.txt:参考文件1的acl来设置文件2的acl

 

例:设置/gramdir /programfile1的权限,使hadoop用户不具有写、执行权限,program组具有读写权限,使新建文件自动具有acl权限:gentoo用户具有rw权限;sysadmins组具有r权限。

 blob.png

查看:getfacl  filename

blob.png

 blob.png

6.2 acl的备份和恢复

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

#getfacl -R /tmp/dir1 > acl.txt

#setfacl -R -b /tmp/dir1

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

#getfacl -R /tmp/dir

例:备份gramdir目录中所有文件的ACL,清除gramdir的所有ACL权限,并利用备份还原

blob.png

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/28347

评论列表(1条)

  • rex
    rex 2016-08-04 23:00

    对命令的常见用法总结的很好,SUID,SGID,Sticky的应用场景给出一些示例来,能让读者更清晰哦。