文件权限

浅谈文件权限

Linux系统中的每个文件和目录都有访问许可权限,用他来确定谁能通过何种方式对文件和目录进行访问和操作。 

文件权限:

文件或目录的访问权限分为只读,只写和可执行三种。

 文件的权限主要针对三类对象进行定义:
          owner: 属主, u
          group: 属组, g
          other: 其他, o
        每个文件针对每类访问者都定义了三种权限:
          r: Readable 可读
         w: Writable  可写
         x: eXcutable  可执行

        ls -l 查看文件属性:

[xiaoshui@localhost data]$ ls -l
total 16
-rw-rw-r--  1 xiaoshui   root        4 Aug  4 16:25 f1

    可以看出文件属性信息一共被空格分为7个字段,第一个字段就是文件的类型和权限

    QQ截图20160804195929.jpg

    如上图所示,第一个-为文件的类型,如果为-,则表示为普通文件,后面以三个为一组,前三个为文件所有者的权限,中间三个为文件所属组用户的权限,后面三个对应其他用户的权限。

可读可写可执行对目录和文件有什么作用

文件:
            r: 可使用文件查看类工具获取其内容
            w: 可修改其内容
            x: 可以把此文件提请内核启动为一个进程
目录:
            r: 可以使用ls查看此目录中文件列表
            w: 可在此目录中创建文件,也可删除此目录中的文件
            x: 可以使用ls -l查看此目录中文件列表,可以cd进入此

权限匹配:

(1)判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限;否则进入第2步;

(2)判断进程的属主,是否属于被访问的文件属主;如果是,则应用属组的权限;否则进入第3步;

(3)应用other的权限;

chmod:

    chmod[OPTION]… OCTAL-MODE FILE…
        -R: 递归修改权限
    chmod[OPTION]… MODE[,MODE]… FILE…
        MODE:
        修改一类用户的所有权限:
            u= g= o= ug= a= u=,g=
        修改一类用户某位或某些位权限
            u+ u-g+ g-o+ o-a+ a-+ –
    chmod[OPTION]… –reference=RFILE FILE…
            参考RFILE文件的权限,将FILE的修改为同RFILE;

    

        r=读取属性  //值=4

        w=写入属性  //值=2

        x=执行属性  //值=1

[root@localhost testdir]# chmod u+x,g+w file     //为文件file属主加上x,属组加上w
[root@localhost testdir]# chmod u=rwx,g=rw,o=r file //设置文件属主权限rwx,组权限rw,其他人r
[root@localhost testdir]# chmod 764 file    //为文件设置属主rwx,组权限rw,其他人r
[root@localhost testdir]# chmod a+x file    //为文件属主属组和其他人全都加上x

        注意:X:只给目录x权限,不给文件x权限,如果使用-R递归,目录中的目录则会附加x权限,目录中的文件有x权限,则会生效,如果没有,则保持不变。

[root@localhost test2]# ll
total 0
-rwxrw-rw- 1 root root 0 Aug  5 08:34 f1
-rw-rw-rw- 1 root root 0 Aug  5 08:35 f2
-rw-rw-rw- 1 root root 0 Aug  5 08:35 f3
[root@localhost data]# chmod -R g=rwX test2
[root@localhost data]# cd test2
[root@localhost test2]# ll
total 0
-rwxrwxrw- 1 root root 0 Aug  5 08:34 f1
-rw-rw-rw- 1 root root 0 Aug  5 08:35 f2
-rw-rw-rw- 1 root root 0 Aug  5 08:35 f3

权限练习:

    当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?

drwxr-xrw-   16 root root  4096 Aug  4 09:18 testdir
drwxrwxrwt.  27 root root  4096 Aug  4 19:20 tmp
drwxr-xr-x.  13 root root  4096 Jul 25 20:07 usr
drwxr-xr-x.  21 root root  4096 Aug  4 16:45 var
[xiaoming@localhost /]$ 
[xiaoming@localhost /]$ cd testdir/
-bash: cd: testdir/: Permission denied
[xiaoming@localhost /]$ ls testdir/
ls: cannot access testdir/dir1: Permission denied
ls: cannot access testdir/dir2: Permission denied
ls: cannot access testdir/dir3: Permission denied
ls: cannot access testdir/dir4: Permission denied
ls: cannot access testdir/dir5: Permission denied
ls: cannot access testdir/user4: Permission denied
ls: cannot access testdir/user5: Permission denied
ls: cannot access testdir/user6: Permission denied
ls: cannot access testdir/user7: Permission denied
ls: cannot access testdir/user8: Permission denied
ls: cannot access testdir/user9: Permission denied
ls: cannot access testdir/user10: Permission denied
ls: cannot access testdir/mytest: Permission denied
ls: cannot access testdir/hello: Permission denied
dir1  dir3  dir5   mytest  user4  user6  user8
dir2  dir4  hello  user10  user5  user7  user9

         因为xiaoming不属于root组,所以匹配other,对testdir目录有rw权限,但是没有x权限,可以看出不可cd至此目录,可ls查看文件列表,但不可ls -l 查看文件属性。

    当用户xiaoming对/testdir 目录无读权限时,意味着无法做哪些操作?

drwxr-x-wx   16 root root  4096 Aug  4 09:18 testdir
drwxrwxrwt.  27 root root  4096 Aug  4 19:29 tmp
drwxr-xr-x.  13 root root  4096 Jul 25 20:07 usr
drwxr-xr-x.  21 root root  4096 Aug  4 16:45 var
[xiaoming@localhost /]$
[xiaoming@localhost /]$ cd testdir/
[xiaoming@localhost testdir]$ ls
ls: cannot open directory .: Permission denied
[xiaoming@localhost testdir]$ ls -l
ls: cannot open directory .: Permission denied
[xiaoming@localhost testdir]$ touch file1
[xiaoming@localhost testdir]$ touch file2
[xiaoming@localhost testdir]$ rmdir file1
[root@localhost testdir]# ls
dir1  dir3  dir5   hello   user10  user5  user7  user9
dir2  dir4  file2  mytest  user4   user6  user8

        可以看出当xiaoming对testdir拥有wx,无r时,可cd至此目录,不可查看目录内的文件列表与文件属性,可创建和删除文件,可查看文件的内容。

    当用户xiaoming对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

drwxr-xr-x   16 root root  4096 Aug  4 19:31 testdir
drwxrwxrwt.  27 root root  4096 Aug  4 19:36 tmp
drwxr-xr-x.  13 root root  4096 Jul 25 20:07 usr
drwxr-xr-x.  21 root root  4096 Aug  4 16:45 var
[xiaoming@localhost /]$ 
[xiaoming@localhost testdir]$ ll
total 8
drwxrwxr-x+ 4 root   root     22 Jul 28 14:27 dir1
drwxrwxr-x+ 4 root   root     22 Jul 28 14:28 dir2
drwxrwxr-x+ 2 root   root      6 Jul 28 14:29 dir3
drwxrwxr-x+ 2 root   root      6 Jul 28 14:29 dir4
drwxrwxr-x+ 4 root   root     28 Jul 28 14:29 dir5
-rw-r--r--  1 root   root      0 Aug  4 19:41 file
[xiaoming@localhost testdir]$ rm file 
rm: remove write-protected regular empty file ‘file’? y
rm: cannot remove ‘file’: Permission denied
[root@localhost testdir]# echo hello > file 
[xiaoming@localhost testdir]$ cat file 
hello
[xiaoming@localhost testdir]$ echo 1 > file
-bash: file: Permission denied

        可以看出,因为xiaoming对testdir无w权限,所以不能删除file, 因为拥有可读权限,所以可以查看文件内容,没有w权限,所以不可修改文件内容。

 Linux文件系统上的特殊权限

    SUID:

        默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行;

        SUID的功用:用户运行程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不再是发起者,而是程序文件本身的属主;

        管理文件的SUID权限:

            chmod u+|-s file…

            展示位置:属主的执行权限位

                如果属主原本有执行权限,显示为小写s

                否则,显示为大写S;    

[root@localhost data]# chmod u+s /usr/bin/nano
[root@localhost data]# ll /usr/bin/nano
-rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
[xiaoming@localhost testdir]$ nano /etc/shadow
user1:$5$JHmiPG4G$yolBfbwVY1RGXI2fJUzXoBgZupX1H9.hSn9HUELjjW0:0:0:999$
user2:!!:17016:0:99999:7:::
user3:!!:17016:0:99999:7:::
12:!!:17016:0:99999:7:::
jane:$5$hG95UcdW$3yv0tgu6Z1vI3asDrzbCbI4CgjhAh.YfZ5Kuu7G8BJ0:17017:0:$
lilei:!!:17017:0:99999:7:::
tomre:$5$aYH1hhNZ$lYgaK6Euqap7JmiLsAIENM4TkYBJOwlN.sfrLFyBZ17:17017:0$
tomch:!!:17017:0:99999:7:::
jixingshui:$5$H7neghml$pW3z37zBxWVDDux7SKKLbgVB/jS5qBR.dr/Ca77uIq8:17$
xiaosming:!!:17017:0:99999:7:::
xiaoming::17017:0:99999:7:::




                          [ Wrote 67 lines ]
^G Get Help^O WriteOut^R Read Fil^Y Prev Pag^K Cut Text^C Cur Pos
^X Exit    ^J Justify ^W Where Is^V Next Pag^U UnCut Te^T To Spell

    



        QQ截图20160804212117.jpg

            将/usr/bin/nano的文件设为suid权限,此时普通用户运行nano进程时,普通用户会继承root的权限,然后写入/etc/shadow文件,将xiaoming用户设为空密码,然后就可登录了。

            经上实验,suid是一个非常危险的权限,所以一定要慎重赋予

    SGID:

        功用:当用户属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;

        展示位置:属组的执行权限位

            如果属组原有执行权限,显示为小写s;

            否则,显示为大写S

[root@localhost data]# chmod g+s testdir/
[root@localhost data]# ll
total 0
drwxrwsrwx 2 root root 24 Aug  4 20:44 testdir
[xiaoshui@localhost data]$ cd testdir/
[xiaoshui@localhost testdir]$ touch f2
[xiaoshui@localhost testdir]$ ll
total 0
-rw-rw-r-- 1 xiaoming root 0 Aug  4 20:43 f1
-rw-rw-r-- 1 xiaoshui root 0 Aug  4 20:44 f2
[xiaoshui@localhost testdir]$ id 
uid=1001(xiaoshui) gid=1001(xiaoshui) groups=1001(xiaoshui)

 当testdir目录上附加了sgid权限的时候,普通用户在其下创建文件时候文件的属组会自动变为此目录的属组

    STICKY:

        功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或者删除所有的已有文件;如果此目录设置为Sticky权限,则每个用户能创建新文件,且只能删除自己的文件

        管理文件的Sticky权限:

            chmod o+|-t FILE

        展示位置:其他用户的执行权限位

            如果其他用户原有执行权限,显示为小写t;

            否则,显示为大写T

        系统上的/tmp和/var/tmp目录默认均有sticky权限


facl:file access control lists

    文件的额外赋权机机制:

        在原来的ugo之外,另一层让普通用户能够控制赋权给另外的用户或组的赋权机制。

    getfacl命令:

        getfacl FILE…

        user:USERNAME:mode

        group:GROUPNAME:MODE   

    setfacl命令:

        赋权给用户:

            setfacl -m u:USERNAME:MODE

        赋权给组:

            setfacl -m g:GROUPNAME:MODE

        撤销赋权:

            setfacl -x u:USERNAME file…

            setfacl -x u:GROUPNAME file…

[root@localhost testdir]# ll
total 4
-rw-rw---- 1 xiaoshui root 14 Aug  4 20:58 f1
-rw-rw-r-- 1 xiaoshui root  0 Aug  4 20:44 f2
[xiaoshui@localhost testdir]$ cat f1
cat: f1: Permission denied
[root@localhost testdir]#  setfacl -m u:xiaoshui:r f1
[xiaoshui@localhost testdir]$ cat f1
kdhjfkfhhjhkj
[xiaoxiao@localhost testdir]$ cat f1
cat: f1: Permission denied

         本来文件f1对其他用户无权限,所以xiaoshui用户当然也查看不了,root使用setfacl给f1设置xiaoshui用户可读,所以xiaoshui便可以访问了。使用其他普通用户依然无法查看f1.

    ACL文件上的group权限是mask 值(自定义用户,  自定义组,拥有组的最大权限),而非传统的组权限,mask只影响除所有者和other的之外的人和组的最大权限,需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

 


原创文章,作者:我的滑板鞋,如若转载,请注明出处:http://www.178linux.com/28962

(0)
上一篇 2016-08-07 22:07
下一篇 2016-08-07 22:15

相关推荐

  • 菜鸟教你如何磁盘分区与创建文件系统以及挂载(2)

    一、文件系统简介与创建 1、什么是文件系统?    文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。 2、文件系统的作用    从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件…

    Linux干货 2016-08-29
  • 马哥教育网络班19期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥用来连接两个不同的网络间的设备;集线器的作用是把接受的信号放大,从另一个端口再穿法出去,说白了就是延长网络的传输距离;   二层交换机工作在数据链路层,根据源和目的MAC地址进行数据转发;三层交换机就是具有部分路由器功能的交换机,三层交换…

    Linux干货 2016-07-07
  • 网络接口配置-bonding

    网络接口配置-bonding •Bonding 就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。 Bonding的工作模式 •Mode 0 (balance-rr) 轮转(Round-robin)策略:从头…

    Linux干货 2016-09-05
  • Keepalive高可用Nginx服务测试

    环境   系统版本:CentOS 7.2  节点1地址:10.1.8.81  节点2地址:10.1.8.83  虚拟IP地址:10.1.8.248 安装软件     yum -y install nginx     yum -y …

    Linux干货 2017-02-16
  • 简述Linux那些年–发展史

    Linux发展史 作者:任飞鹏          日期:2016-10-13 Linux简介: Linux同Windows一样,都是一套OS(操作系统)。Linux是一套开源的类Unix操作系统,可以免费使用和自由传播。是一个基于POSIX和UNIX的多用户、多任务、支…

    Linux干货 2016-10-19
  • Linux Shell(脚本)编程入门

    为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建…

    Linux干货 2017-08-05

评论列表(1条)

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

    文章的层次结构清晰明了,内容丰满,有理论有实践。