发表于 2019-2-18 06:06:40

Linux 文件权限

  Linux 文件权限

  Linux系统中有句话叫做“everything is files”,这当然不是戏称了,windows系统里的mp3、avi、txt、exe、word等等格式的文件在Linux系统里都是以文件形式存在,当然有人会说那Linux系统的文件不也是以 .mp3、 .txt结尾吗?不是的,Linux系统里这样写是为了的系统操作人员方便辨认,把后面的 .mp3、 .txt删了,也不影响文件本质(当然前提是编码格式不变)。在Linux系统里的文件权限分为有r、w、x、s、t。
      1. 查看文件权限
# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common   文件类型所有者权限用户组权限其他用户权限特殊权限连接数所有者用户组大小 修改日期      文件名
d            rwx         rwx         ---                .            2         root    root   6    Jul 21 15:17   common

        a.文件类型:Linux文件一共有七种类型,分别是:- 普通文件、d 目录文件、b 块设备、c 字符设备、l 符号链接文件、p 管道文件pipe、s 套接字文件sock
        b.所有者权限: 对于目录来说,内容为文件夹中的文件名列表 :r:可读取文件名列表
                                                                                         w:可新建,删除,重命名文件名
                                                                                         x:有进入文件夹的权限,若要执行文件夹的w权限,必须要先有进入文件夹的权限,所以要使用w权限,必须要有x权限
                  I.对于文件来说,内容为文件内容本身:r:可读取文件内容
                                                                  w:可修改文件内容
                                                                  x:可执行文件
                  II.权限可以用数字表示:r: 4
                                            w:2

                                            x: 1      例如   764表示 rwxrw-r--
                          
                III.文件还有3种特殊权限 ,也可以用数字表示suid:4   s
                                                                      sgid:2   s
                                                                      sticky:1    t
               IV.suid:当对于一个可执行的二进制文件作用了suid之后,任何人在执行该文件时,临时拥有其所有人的权限,可设置改权限
# vim cyn.txt (当执行这个脚本的时候该用户会临时有文件所有者的权限,由于过程比较繁杂,请自行测试,欢迎留言讨论)
#/bin/bash
echo hello,my name is cyn
# chmod +x cyn.txt
# ./cyn.txt
hello,my name is cyn.
# chmod u+s cyn.txt
# ll
total 4
-rwsr-xr-x. 1 root root 38 Jul 21 17:29 cyn.txt                   V.sgid:-当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限,可设置改权限
# chmod g+s cyn.txt
# ll
total 4
-rwsr-sr-x. 1 root root 38 Jul 21 17:29 cyn.txt(当执行该脚本的时候,会临时有该文件所属组的权限,可以自行测试,欢迎留言讨论)                   -当对于一个目录作用了sgid权限之后,任何人在该目录下所创建的文件的所属组,均与该目录的所属组相同。比如A用户要创建一个文件,这个文件会属于A用户所在的         A组,但是A用户想把这个文件创建之后使其所属组继承与B目录的所属组,这个时侯B目录(所属组B组)设置 sgid权限的话,A用户在B目录下面创建文件,文件会自动属于B组,设置 方法与上面二进制文件一样
                      VI.sticky:对于一个目录作用了sticky权限,该目录下的文件仅其所属人和目录的所属人及root可以删除,比如在一个共享组里任何人可以上传文件,万一有人误操作把其他的人文件       删了,这个时候为了防止这种情况发生就可以设置sticky权限。
# ls /tmp
drwxrwxrwt 6 root root 4096 Jul 21 17:29 /tmp        c.用户组权限: 同所有者权限

        d.其他用户权限: 不是文件所有者,也不属于文件所属用户组的用户,称为其他用户,其他用户权限若为-,表示没有相应的权限
        e.特殊权限 :acl权限
$ ls -l
-rw-rw---- 1 cyn root 6 Jul 21 17:29 test.txt  在这里说明了对于test.txt这个文件cyn用户拥有rw-权限。所有属于root组的用户拥有rw-权限. 其他任何用户对于文件没有任何的权限,如果我们现在希望john这个用户也可以对                test.txt    文件进行读写操作.,我自己大概会想到以下几种办法:

              1). 给文件的other类别增加读和写的权限,这样由于john会被归为other类别,那么他也将拥有读写的权限。
            2). 将john加入到root组。那么john会被归为group类别,那么他将拥有读写的权限。
            3). 设置sudo, 使john能够以cyn的身份对test.txt进行操作,从而获得读写权限。
              第一种做法的问题在于所有用户都将对test.txt拥有读写操作,显然这种做法不可取。
            第二种做法的问题在于john被赋予了过多的权限.所有属于admin组的文件,john都可以拥有其等同的权限了。
            第三种做法虽然可以达到只限定john拥有对test.txt文件的读写权限.但是需要对sudoers文件进行严格的格式控制. 而且当文件数量和用户很多的时候,这种方法就相当地不灵活了。
            看来好像都没有一个很好的解决方案. 其实问题就出在Linux 文件权限里面,对于other的定义过于广泛,以至于很难把权限限定于一个不属于file owner和group的用户身上. 那                        么 Access Control List (ACL)就是用来帮助我们解决这个问题的。
              简单地来说ACL权限就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限。ACl权限判断顺序 owner > acl user > group > other
                 可以设置用户acl,也可以设置组acl权限。设置ACL   setfacl,查看ACL   getfacl

# mkdir -p /acltest/acl
# cd /acltest/
# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 21 20:03 acl
# setfacl -Rm g:shuguo:rwx /acltest/
# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
user:liubei:r--
group::r-x
group:shuguo:rwx
mask::rwx
other::r-x
# ll
total 0
drwxrwxr-x+ 2 root root 6 Jul 21 20:03 acl              删除ACL,可以逐条删除setfacl -x,也可以一起删除setfacl -b

# setfacl -x u:liubei /acltest/
# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
group:shuguo:rwx
mask::rwx
other::r-x
# setfacl -b /acltest/
# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x              设置未来文件的权限 ,所谓未来就是你下一个将要创建的文件的ACL权限,查看的时候会以default显示。

# setfacl -Rm d:g:shuguo:rwx /acltest/
# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:shuguo:rwx
default:mask::rwx
default:other::r-x            f.连接数:目录的连接数最少为2,本身和 . ,若还有n个子目录,则连接数为2+n,文件的连接数最少为1,如果连接数为0,则文件或者目录不存在
        g.所有者:一般为文件的创建者,谁创建了该文件,就成为该文件的所有者,可以修改该权限:
# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common
# chown liubei /app/house/common
# ll /app/house
total 0
drwxrwx---. 2 liubei root 6 Jul 21 15:17 common         h.用户组:当某个用户创建了一个文件后,这个文件的所在用户组就是该用户所在的组,可以修改该权限:

$ getent group shuguo
shuguo:x:1021:liubei,zhangfei,guanyu
$ mkdir guanyu
$ ll
total 0
drwxr-xr-x. 2 guanyu shuguo 6 Jul 21 16:37 guanyu        i.文件容量:单位为B
        j.修改日期:创建这个文件的时间
        k.文件名:文件的文件名
  2.文件属性操作

  a.修改文件的属主:chown  

                  用法:chown 用户名 文件/目录名   
                                      -R 递归同时修改目录下的子文件子目录

                                      --reference file1file2   将file1的owner设置给file2
                                      chown owner.group 或owner:group文件名可以同时修改文件的owner和group(仅root用户)
            b.修改文件的group:chgrp
                 用法:chgrp 组名 文件/目录名         
                                       owner可以修改文件的属于组,但owner一定要属于目标组
                                      -R 递归同时修改目录下的子文件子目录
                                      --reference file1file2   将file1的owner设置给file2               

     3.文件权限操作
        a.改变文件或目录的权限:chmod

                  用法:chmod 权限 文件/目录名
                                       -R 递归同时修改目录下的子文件子目录
                                      修改一类用户的所有权限: 如u=g= o= ug=a= u=,g= (a=ugo 或=左边省略)
                                      修改一类用户某位或某些位权限 u+u- g+ g- o+ o- a+ a- + (+ 加入- 除去   + 设置)
  
                               --reference file1file2   将file1的owner设置给file2




  



页: [1]
查看完整版本: Linux 文件权限