linux文件基本权限、默认权限、隐藏权限和ACL权限

基本权限

   文件属性rwx

    每个文件当用ls -l查看时,都会显示文件的详细属性信息,其中在排在首位的共有10位字符信息

    例如 -rw-r–rw-. 1 root root ……..

共有10位,第一位代表的是文件的类型,后边9位表示的是文件的权限属性,没3个字符为一组,从左到右,依次表示owner,group,others的权限,其中每组3个字符中又对应三种状态,分别是rwx。后边的依次是连接数,所有者,所属组,

    1、权限对文件意义

    r  read,表示可读取文件的实际内容

    w  write,可以编辑、新增或者修改文件的内容,但是不包括删除该文件

    x  eXecute,表示该文件具有被系统执行的权限。在linux中,我们的文件能否被执行,是有x这个权限来决定的,而跟文件名没有绝对的关系

    notice:当我们对一个文件有w权限是,我没只能对文件内容进行改动,而对文件本身是不具备删除权限的。对于文件的rwx来说,主要都是针对的文件内容,与文件名的存在有否没有关系。

   2、权限对目录的意义

    文件是存放实际数据的所在,目录的主要内容是记录文件名列表,文件名与目录有强烈的关联

    r: read content in directory

        表示具有读出目录结构列表的权限,所以当对一个目录具有r的权限的时候,表示我们可以查询该目录下的文件名的数据,所以可以使用ls命令将目录的内容列表显示出来

    w:modify contents of directory 表示具有更改目录结构列表的权限

    x:access directory

    目录的x权限代表的是用户能否进入到该目录成为工作目录的用途。如果对一个目录不具备x权限,那么就无法切换到该目录下,也就无法执行该目录下的任何命令

     要开放目录的权限给别人时,应该至少要给r和x的权限,但是w的权限不能随便给,因为给予w权限,就具备了对目录中文件和目录的一系列的删除、新建、重命名等操作。

文件普通权限与属性的修改

    chown   change owner 改变所有者

    chgrp   change group 改变所属组

    chmod   change mode 改变文件的权限

  chown [-R] [owner][:[group]] File

    用法 owner  或者 owner:  相当于 owner:owner  或者:group 

    -R 表示递归,连同子目录下的所有文件和目录

     chown [-R] –reference=file1 file2

    将file2的权限修改成与file1的相同 

 chgrp [-R] [group] file 

    chgrp [-R] –reference=file1 file2

    将file2的用户组改成与file1相同

 chmod 更改文件的权限

     更改文件的权限有两种方法    

    1、数字类型改变文件权限

   r对应数值4,w对应2,x对应1,-对应0,相应的权限位置有则计算,没有计为0,没三个相加,得到数字就是最后的权限数,例如某个文件的权限:-rwxrw-r–,对应的数字就是421420400,最后的数字就是764

    chmod 764 file

    2、符号类型修改文件权限

   修改一类用户的所有权限:u=[rwx] g=[rwx] o=[rwx] ug=[rwx] a=[rwx] u=,g=

   修改用户的某些权限或某一位权限:u+  u-g+  g-o+  o-a+  a- + –

 chmod [-R] –reference=file1 file2   参考file1的文件权限,将file2修改为与file1相同

新建文件和目录的默认权限

   当我们新创建一个目录或者文件时都是有权限的,那他的默认权限是怎么来的?这就与umask有关了,umask是用户在新建文件或目录时的权限默认值。系统默认的umask=0022,其中,一般用户在创建时取用后三位022,系统用户在创建时取用前三位002,并且umask的值是可以查看和设定的,直接输入umask 即为查看,输入umask #即为设定,并且可以用 umask -S 来以模式的方式产看,umask -p 显示的umask值可以被调用

   新建文件的权限=最高权限-umask,新建文件的最高权限为666,新建目录的最高权限为777。

   由于umask的值可以在新建文件时重新设定,所以当得到的文件权限存在可执行(奇数)位时,就在对应的权限数值上+1,例如 umask=035,得到的文件权限为631,则最后的权限应该是642

   umask值其实就是在新建文件或目录时从做大权限中拿掉的权限。

 

文件系统的特殊权限SUID、SGID、Stick

进程有属主和属组;文件有属主和属组

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

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

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

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

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

    (c) 应用文件“其它”权限

SUID

   任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限,启动为进进程之后,其进程的属主为源文件的属主。SUID就是让普通用户拥有可以执行“只有root权限才能执行”的特殊权限

   SUID的限制与功能

  1、SUID权限仅对二进制(binary program)程序有效,设置在目录上无意义

  2、执行者需要对于该程序有x的可执行权限

  3、本权限只在执行改程序的过程中有效

  4、执行者将具有该程序所有者的权限

   权限设定  chmod u+s file…   chmod u-s file…

SGID

   可执行(具有x权限)文件上的SGID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限。启动为进程之后,其进程的属主为原程序文件的属组

   权限设定:chmod g+s file…   chmod g-s file…

  可执行目录上的SGID权限

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

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

    通常用于创建一个协作的目录

    权限设定:chmod g+s dir…   chmod g-s dir…

Sticky位(粘滞位)

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

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

   sticky设置在文件上没有意义

   权限设定:chmod o+t dir…  chmod o-t dir…

当设定对应的SUID SGID和Sticky时,如果对应的属主、属组和other没有相应的x权限,那么特殊权限会由s s t变成,S S T

   特殊权限的数字发设定

    SUID=4,SGID=2,Sticky=1,将含有对应权限累加,得到数值后,放到普通权限三个数值的前面,即可用chmod命令设定

文件的隐藏属性chattr lsattr

   文件除了上边介绍的属性之外还具有隐藏的属性,用命令chattr来修改,用lsattr来查看

    chattr [+-=][ASacdistu] 文件或目录名称

选项   -R  递归,将目录中的内容依次改变

参数

    +  增加某一个特殊参数,其他参数不改变

    –  删除某一个特殊参数,其他参数不改变

    =  设定为后边的参数

    A  当设置了A后,当访问这个文件时,文件的atime不会改变,对于I/O较慢的机器可以避免过度访问磁盘

    a  当设置a属性之后,这个文件将只能增加数据,不能修改和删除数据,只有root能设置这个属性

    c  文件设置c属性之后,将会自动将此文件压缩,读取时自动解压缩;进行存储的时候,会先进行压缩在存储

    i  设置i属性之后,这个文件将不能被删除、改名,设置连接也无法写入或添加数据,只有root能够设置

    s  当设置s属性后,文件被删除之后,将会完全从磁盘被删除,包括文件的具体数据

    u  与s属性相对应的,当文件设置u属性之后,如果文件被删除,将只会删除文件的文件名,内部的具体数据依旧会存在磁盘上,可以恢复

 

lsattr  查看文件的隐藏属性

    lsattr [-adR] 文件或目录

选项与参数:

    -a :将隐藏文件的属性也秀出来;

    -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;

    -R :连同子目录的数据也一并列出来!

主机的具体权限规划:ACL

   ACl是access control list的缩写,主要目的是提供传统的owner、group、others的r、w、x权限之外的具体权限设置。ACl可针对单一用户、单一文件或目录来进行rwx的权限设置,对于需要特殊权限的使用状况非常有帮助

    CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:

            tune2fs –o acl/dev/sdb1

            mount –o acl/dev/sdb1 /mnt

ACL的生效顺序:所有者,自定义用户,自定义组,其他人

    设置文件的ACL权限  使用setfacl命令

  选项:

   m 设置文件的acl参数,不能与-x混用

     -x 删除文件的acl参数,不能与-m混用

    -b 清空文件所有的acl参数

    -k 移除『预设的』 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;

    -R 递归设定 acl ,亦即包括次目录都会被设定起来

    -d 设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值

    -M 调用设置好的ACL权限设置文件  setfacl -M file.acl file|directory

  设置方式   setfacl -m[R] u[g]:username[groupname]:[rwx权限] file[dir]

  取消方式  setfacl -x[-R] u[g]:username[groupname] file[dir] 

    这种取消方式可能不彻底,可以使用-b选项全部取消

    setfacl -m d:u:wang:rx dir   d 是default,意思是将来目录下新建的文件自动有次权限,只对新文件有效,对于旧文件无效

    setfacl -X file.acl directory  删除文件中的权限

  用命令getfacl可以查看文件的ACL权限   getfacl file

    在看到的选项中有一项是mask值,是自定义用户,自定义组的最大权限,既ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限。mask只影响所有者和other的之外的人和组的最大权限。mask需要与用户的权限进行逻辑运算后,才能变成有限的权限(effective permission),用户和组的设置必须存在与mask权限设定范围内才会生效。

mask值的设置 setfacl -m mask::[权限] file





   

原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/27526

(0)
black_fishblack_fish
上一篇 2016-08-04
下一篇 2016-08-04

相关推荐

  • 8.9作业

    删除/etc/grub2.conf文件中所有以空白开头的行,行首的空白字符 [root@English6 ~]# sed "s@^[[:space:]]\+@@" /etc/grub.conf  # grub.conf generated by an…

    Linux干货 2016-08-11
  • Linux 入门基础 及一些常见命令(下)

    date:                    显示日期时间:date [OPTION]… [+FORMAT]        &nbsp…

    Linux干货 2016-09-17
  • scp和rsync的使用

    通过一些简单需求了解scp和rsync的使用

    2017-09-18
  • 文本三剑客—sed 基础

    文本三剑客—sed 基础        sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式的插入、删除或者替换数据中的文本。流编辑器则会自爱编辑器处理数据之前基于预习提供的一组…

    Linux干货 2017-05-15
  • nginx服务

      Nginx 提供web服务,也是工作在应用层的负载均衡器,拥有强大的缓存能力。 本章主要学习,web server、web reverse proxy(http)和cache 缓存服务器使用较多的是varnish+squid: 任何缓存都是反向代理,但是varnish反向代理能力还是与nginx有很大差距。所以,varnish还是做缓存服务,而…

    Linux干货 2016-11-01
  • Python入门之迭代,列表解析,生成器及文件操作

    迭代器是访问集合元素的一种方式,迭代器包含了__iter__()(返回迭代器对象本身)next()(返回迭代器的下一个元素)迭代器只能往前不会退后 以下类型支持迭代 序列类型:list,str,tuple 非序列类型:dict,file 自定义类 通过内建的函数iter()或对象自带方法__iter__可以获取迭代器对象 l1=range(5) iter1=…

    Linux干货 2015-12-13