码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 文件权限

时间:2018-07-21 21:29:04      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:权限   user   读取   col   创建文件   gid   灵活   一起   所有者   

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. 查看文件权限 

[root@localhost ~]# 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权限

                对于文件来说,内容为文件内容本身:r:可读取文件内容

                                                                w:可修改文件内容

                                                                x:可执行文件

                权限可以用数字表示:r: 4 

                                            w:2

                                            x: 1      例如   764  表示 rwxrw-r--

                          

                文件还有3种特殊权限 ,也可以用数字表示suid:4   s

                                                                      sgid:2   s

                                                                      sticky:1    t

                 suid:当对于一个可执行的二进制文件作用了suid之后,任何人在执行该文件时,临时拥有其所有人的权限,可设置改权限

[root@localhost ~]# vim cyn.txt (当执行这个脚本的时候该用户会临时有文件所有者的权限,由于过程比较繁杂,请自行测试,欢迎留言讨论)
#/bin/bash
echo hello,my name is cyn
[root@localhost ~]# chmod +x cyn.txt
[root@localhost ~]# ./cyn.txt 
hello,my name is cyn.
[root@localhost ~]# chmod u+s cyn.txt 
[root@localhost ~]# ll
total 4
-rwsr-xr-x. 1 root root 38 Jul 21 17:29 cyn.txt

                   sgid:-当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限,可设置改权限

[root@localhost ~]# chmod g+s cyn.txt
[root@localhost ~]# 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组,设                            置 方法与上面二进制文件一样

                      sticky:对于一个目录作用了sticky权限,该目录下的文件仅其所属人和目录的所属人及root可以删除,比如在一个共享组里任何人可以上传文件,万一有人误操作把其他的人文件                            删了,这个时候为了防止这种情况发生就可以设置sticky权限。

[root@localhost ~]# ls /tmp
drwxrwxrwt 6 root root 4096 Jul 21 17:29 /tmp

        c.用户组权限: 同所有者权限

        d.其他用户权限: 不是文件所有者,也不属于文件所属用户组的用户,称为其他用户,其他用户权限若为-,表示没有相应的权限

        e.特殊权限 :acl权限

[leonard@localhost ~]$ 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

[root@localhost ~]# mkdir -p /acltest/acl
[root@localhost ~]# cd /acltest/
[root@localhost acltest]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 21 20:03 acl

[root@localhost acltest]# setfacl -Rm g:shuguo:rwx /acltest/
[root@localhost 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
[root@localhost acltest]# ll
total 0
drwxrwxr-x+ 2 root root 6 Jul 21 20:03 acl

              删除ACL,可以逐条删除setfacl -x,也可以一起删除setfacl -b

[root@localhost acltest]# setfacl -x u:liubei /acltest/
[root@localhost 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
[root@localhost acltest]# setfacl -b /acltest/
[root@localhost 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显示。

[root@localhost acltest]# setfacl -Rm d:g:shuguo:rwx /acltest/
[root@localhost 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.所有者:一般为文件的创建者,谁创建了该文件,就成为该文件的所有者可以修改该权限:

[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common
[root@localhost ~]# chown liubei /app/house/common
[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 liubei root 6 Jul 21 15:17 common

        h.用户组:当某个用户创建了一个文件后,这个文件的所在用户组就是该用户所在的组可以修改该权限:

[guanyu@localhost ~]$ getent group shuguo
shuguo:x:1021:liubei,zhangfei,guanyu
[guanyu@localhost ~]$ mkdir guanyu
[guanyu@localhost ~]$ 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 file1  file2   将file1的owner设置给file2

                                    chown owner.group 或  owner:group  文件名  可以同时修改文件的owner和group  (仅root用户)

          b.修改文件的group:chgrp 

                 用法:chgrp 组名 文件/目录名         

                                     owner可以修改文件的属于组,但owner一定要属于目标组

                                    -R 递归同时修改目录下的子文件子目录

                                    --reference file1  file2   将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 file1  file2   将file1的owner设置给file2 




Linux 文件权限

标签:权限   user   读取   col   创建文件   gid   灵活   一起   所有者   

原文地址:http://blog.51cto.com/13805636/2148150

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!