• LINUX文件权限


    Linux系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Linux系统对不同用户访问同一文件的权限做了不同的规定。

      对于一个Linux系统中的文件来说,它的权限可以分为三种:读的权限、写的权限和执行的权限,分别用r、w和x表示。不同的用户具有不同的读、写和执行的权限。

      对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Linux系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。

      权限的概念

      Linux文件系统安全模型是通过给系统中的文件赋予两个属性来起作用的,这两个赋予每个文件的属性称为所有者(ownership)和访问权限(access rights)。Linux下的每一个文件必须严格地属于一个用户和一个组。

    下图是在我机器上的/root目录下运行ls -l命令的情况。

    -rw-r--r--

      这些符号用来描述文件的访问权限类别,也就是常说的文件权限。这些访问权限指导Linux根据文件的用户和组所有权来处理所有访问文件的用户请求。总共有10种权限属性,因此一个权限列表总是10个字符的长度。它的格式遵循下列规则:

      ◆ 第1个字符表示一种特殊的文件类型。其中字符可为d(表示该文件是一个目录)、b(表示该文件是一个系统设备,使用块输入/输出与外界交互,通常为一个磁盘)、c(表示该文件是一个系统设备,使用连续的字符输入/输出与外界交互,如串口和声音设备),“.”表示该文件是一个普通文件,没有特殊属性。

      ◆ 2~4个字符用来确定文件的用户(user)权限,5~7个字符用来确定文件的组(group)权限,8~10个字符用来确定文件的其它用户(other user,既不是文件所有者,也不是组成员的用户)的权限。其中,2、5、8个字符是用来控制文件的读权限的,该位字符为r表示允许用户、组成员或其它人可从该文件中读取数据。短线“-”则表示不允许该成员读取数据。与此类似,3、6、9位的字符控制文件的写权限,该位若为w表示允许写,若为“-”表示不允许写。4、7、10位的字符用来控制文件的制造权限,该位若为x表示允许执行,若为“-”表示不允许执行。

      任何列在/etc/passwd文件中的用户都可以是一个文件的所有者,也称为该文件的用户。同样任何列在/etc/group文件中的组都可以是文件组的所有者,也简称为文件的组。

    drwxrwxr-- 2 root root 4096 2月 11 10:36 guo

      因为guo的第1个位置的字符是d,所以由此知道guo是一个目录。第2至4位置上的属性是rwx,表示用户root拥有权限列表显示guo中所有的文件、创建新文件或者删除guo中现有的文件,或者将guo作为当前工作目录。第5至7个位置上的权限是rwx,表示root组的成员拥有和root一样的权限。第8至10位上的权限仅是r--,表示不是root的用户及不属于root组的成员只有对guo目录列表的权限。这些用户不能创建或者删除guo中的文件、执行junk中的可执行文件,或者将junk作为他们的当前工作目录。

    -rwxr-xr-- 1 user admin 20480 11月 11 09:23 Readme.txt

      在该项中,第1个位置是短线“-”,表示该文件是一个普通文件,没有特殊属性。该文件对任何人都可读,只对user可写,user和admin的组成员可以执行该文件。

      另外需要注意的是,当用户访问一个文件时,权限检查是从左到右的。假设上述的readme.txt文件具有以下权限:

    -r--rw-r--

      那么即使user是属于admin组的一个成员,也不能对该文件进行写操作,因为已经被左边的写权限设置拒绝了。

    一般文件权限读(R),写(W),执行(X)权限比较简单。一般材料上面都有介绍。这里介绍一下一些特殊的文件权限——SUID,SGID,Stick bit。

        如果你检查一下/usr/bin/passwd和/tmp/的文件权限你就会发现和普通的文件权限有少许不同,如下图所示:

        这里就涉及到SUID和Stick bit。

    SUIDSGID

        我们首先来谈一下passwd程序特殊的地方。大家都知道,Linux把用户的密码信息存放在/etc/shadow里面,该文件属性如下:

         可以看到Shadow的只有所有者可读写,所有者是root,所以该文件对普通用户是不可读写的。但是普通用户调用passwd程序是可以修改自己的密码的,这又是为什么呢?难道普通用户可以读写shadow文件?难道Linux有漏洞?当然不是啦。password可以修改shadow文件的原因是他设置了SUID文件权限。

        SUID文件权限作用于可执行文件。一般的可执行文件在执行期的所有者是当前用户,比如当前系统用户是simon,simon运行程序 a.out,a.out执行期的所有者应该是simon。但是如果我们给可执行文件设置了SUID权限,则该程序的执行期所有者,就是该文件所有者。还以 前面的a.out为例,假如a.out设置了SUID,并且其所有者是root,系统当前用户是simon,当simon运行a.out的时 候,a.out在运行期的所有者就是root,这时a.out可以存取只有root权限才能存取的资源,比如读写shadow文件。当a.out执行结束 的时候当前用户的权限又回到了simon的权限了。

         passwd就是设置了SUID权限,并且passwd的所有者是root,所以所有的用户都可以执行他,在passwd运行期,程序获得临时的root权限,这时其可以存取shadow文件。当passwd运行完成,当前用户又回到普通权限。

         同理,设置程序的SGID,可以使程序运行期可以临时获得所有者组的权限。在团队开发的时候,这个文件权限比较有用,一般系统用SUID比较多。

         SGID可以用于目录,当目录设置了SGID之后,在该目录下面建立的所有文件和目录都具有和该目录相同的用户组。

    Stick bit(粘贴位)

         对程序,该权限告诉系统在程序完成后在内存中保存一份运行程序的备份,如该程序常用,可为系统节省点时间,不用每次从磁盘加载到内存。Linux当前对文件没有实现这个功能,一些其他的UNIX系统实现了这个功能。

         Stick bit可以作用于目录,在设置了粘贴位的目录下面的文件和目录,只有所有者和root可以删除他。现在我们可以回头去看看/tmp/目录的情况,这个目录 设置了粘贴位。所以说,并且所有人都可以对该目录读写执行(777),这样意味着所有人都可以在/tmp/下面创建临时目录。因为设置Stick bit只有所有者和root才能删除目录。这样普通用户只能删除属于自己的文件,而不能删除其他人的文件。

  • 相关阅读:
    Selenium2+python自动化71-多个浏览器之间的切换【转载】
    Selenium2+python自动化70-unittest之跳过用例(skip)【转载】
    Selenium2+python自动化69-PhantomJS使用【转载】
    页面跳转(页面从哪儿来回哪儿去)
    请求报错总结
    datetimepicker.js 使用笔记
    兼容性记录
    submit()提交表单时,显示警示框
    将时间戳转换为时间
    css精简命名
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11108671.html
Copyright © 2020-2023  润新知