文件权限

首先简单介绍一下文件的属性:文件权限

使用ls -l 长列出
-rw-r–r–. 1 root root 1302 Jul 25 10:23 group
文件类型|owner权限group权限other权限|硬链接数|owner|group|文件大小(bytes)|mtime|文件名

文件权限

文件类型:

       – 普通文件

       d 目录文件

       l 连接文件

       b 块设备文件

       c 字符设备文件

       p 管道文件

       s 数据接口文件

  • 普通文件(regular file ) 就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 [ – ],例如 [-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:

    • 纯文本档(ASCII):这是Linux系统中最多的一种文件类型, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令)
    • 二进制文件(binary):,我们的系统其实仅认识且可以执行二进制文件(binary file) 在Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的 举例来说,我们经常使用的 cat 命令就是一个binary file。
    • 数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码 因为它是属于一种特殊格式的文件。
  • 目录(directory) 就是目录 第一个属性为 [ d ],例如 [drwxrwxrwx]。
  • 连接文件(link) 就是类似Windows系统底下的快捷方式! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;
  • 设备与装置文件(device) 与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:

    • 区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]!
    • 字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
  • 数据接口文件(sockets) 既然被称为数据接口文件, 想当然,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
  • 数据输送文件(FIFO, pipe) FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。

Linux 文件的基本属性就有九个,分别是 owner/group/others 组别的 read/write/execute 属性,

 -rwxrwxrwx 这9个属性中3个位一组,其中可以使用数字来表示各个属性。

r  4

w 2

x  1

八进制数字

—    0

–x   1

-w-  2

-wx  3 

r–   4

r-x  5

rw- 6

rwx 7

这里我们简单介绍一下,使用bc计算器进行数值进制间的转换:

文件权限

下面我们介绍文件的属主和属组的修改。

文件的属性操作:

chown 设置文件的所有者。

chown : change owner
            owner.group
            owner:group
            以上只有root才能修改文件的所有人
            :group或 .group 文件的owner也可以使用chown修改文件的所属组(owner必须属于目标组)
            -R  递归
            –reference sourcefile tarfile

下面将house的属主改为liubei,属组改为shuguo。
文件权限

接着我们使用chown .group filename和chgrp group filename 修改文件的属组。

文件权限

接着我们加上 -R ,可以将目录下所有文件一并修改,可以看到owner:liubei,group:shuguo 变成owner:root,group:root,如下图。

文件权限

chgrp 设置文件的所有组。

chgrp : change group
文件的owner可以修改文件的所属组(owner必须属于目标组)
-R  递归 

查看house文件夹的下文件属组为root,如下。

文件权限

然后递归修改属组:

文件权限

对于任何一个文件拥有权限才能进行操作:

普通文件
r: 可以读取文件的内容
cat less more nano vim 执行脚本
w: 可以修改文件的内容
nano vim > >> tee gedit 
x: 可以执行该文件 
执行脚本


目录文件
r: 用户可以列出目录下有哪些文件(不能查看文件的详细信息)
w: 只有w无意义。
x: 用户可以进入该目录(如果知道文件名,且有相对应的文件权限 ,可以执行对应的操作)
rx: 用户可以进入目录,且可以长列出。
rw:等于只有r
wx: 能进入,能创建能删除,不能列出。故用户能否删除文件与文件自身权限无关。
rwx: 全部权限。
—:null

下面我们介绍权限的判断顺序,首先列一条判断准则:

      先判断是否是文件的所有人,如果是,则执行所属人的权限后结束,如果不是所有人,则判断是否所属组(可以是主组也可以是辅助组),如果是,则执行所属组的权限后结束,如果不是则执行其他人的权限后结束。

下面创建一个文件house夹,owner:root,group:root,通过chmod o= house 此时文件的基本属性:drwxrwx—,此时我们切换到用户:su – liubei,试着进入house,权限被拒绝(Permission denied),这是因为我们既不是属主,也不再root组里,而且other权限是0(—)。

文件权限

       下面我们回到root下,将house的属主和属组均进行修改,分别改为owner:liubei ,group:shuguo,然后我们su – liubei 切换到用户刘备下,发现就能进去,这是因为owner:liubei拥有rwx权限,接着su – guanyu 切换到用户关羽下,此时关羽也能进入,进行rwx操作,接着su – caocao切换到用户:caocao下,此时连house目录也进不去,这是因为用户:caocao既不是属主,也不在属组,而other权限:—,所以曹操进不去。

首先我们看下shuguo组的成员:

文件权限

文件权限

现在属主刘备可以在house中创建、删除、查看文件,属组成员关羽、张飞,则可以进入和查看文件。

现在我们回到root下,将属主(刘备)的权限改为 — ,再切换的用户刘备下,此时虽然刘备在蜀国组找中,但是由于owner优先,所以无法访问house。

文件权限

现在我们已经了解到文件属主和属组的修改,下面介绍文件属性修改及其修改工具chmod:

chmod :它的执行可以修改文件的权限和文件的属性。注意:只有所属人和root可以更改文件的权限。

方式一:字符方式

     人物 动作 行为
     ugoa  +x=  rwx
     u owner
     g group
     o other 
     a ugo
     chmod ugo+rwx
     a=rwx
     a=
     u=….,g=…,o=…
     X 当文件本身没有x权限时,则跳过,一般用于批量修改多个文件、目录的权限时,自动跳过没有执行权限的文件。

文件权限

方式二:数字方式

    rwxrw-r–
    111,110,100
    764
    r:100:4
    w:010:2
    x:001:1
文件权限

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

umask值 可以用来保留在创建文件权限
新建FILE权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限: 777-umask
非特权用户umask002
rootumask 022
umask: 查看
umask #: 设定
umask 002
umask –S 模式方式显示
umask –p 输出可被调用

文件权限

我们平时创建一个文件,在root用户下,目录文件默认属性rwxr-xr-x(755),普通文件rw-r–r–(644),普通用户下,目录文件默认属性rwxrwxr-x(775),普通文件默认属性rw-rw-r–(664),原因就是umask的默认值。

普通用户:umask 002

                目录文件   普通文件 

最大权限    777          666
umask       002          002
默认权限    775          664

文件权限

root用户:umask 022

                目录文件   普通文件 

最大权限    777          666
umask       022          022
默认权限    755          644

文件权限

当我们需要大批量创建文件,但是现有文件权限已不能满足需要,此时我们需要设置umask的默认值。

        用户设置: ~/.bashrc     对当前用户生效。

        全局设置: /etc/bashrc   对所有用户生效。

        对象 目录文件    普通文件

        777 rwxrwxrwx  666 rw-rw-rw-
        021 —-w—x      021 —-w—x
        756 rwxr-xrw-    646 rw-r–rw-
        当umask中全部是偶数时,可以直接减,当umask中包含奇数时,对于目录直接减,对于文件,在奇数所在的位减完后加一。
文件权限

接下来我们介绍可执行文件的SUID,SGID,以及目录上的SGID,首先看下/etc/shadow文件,这个文件是用来存储用户的账户与密码等机密信息,默认情况没有权限的,除了root,其他用户没有权限去访问。

文件权限

既然其他用户连查看的权利都没有,那么我们平时修改密码的时候怎么完成对此文件的写操作。是的,就是和SUID有关系。先看下 /bin/passwd :

文件权限

        SUID:当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。就是因为这个,所以我们才有访问/etc/shadow的权利。

接着介绍SGID:

        SGID:当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限。
        现在我们将/bin/cat 考到/app目录下,然后在属组上加上SGID,然后在创建文件file ,属主和属组均为:liubei ,其他人无任何权限。所以关羽通过cat想要偷看不行,但是通过/app/cat则可以。

文件权限 

        SGID:当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所有属均为该目录的所有组。

文件权限

        STICKY:当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录下的文件仅其所属人才能删除。

        首先以对/app/house目录作用sticky,属组设置为:shuguo,然后创建文件file,属主:guanyu,切换到用户:zhangfei,试着去删除file,提示不能。

        以用户:caocao 试着去删除file,Operation not permitted,虽然拥有rwx权限,这就是sticky在搞事情。

文件权限

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

(0)
上一篇 2017-07-29 15:28
下一篇 2017-07-29 16:11

相关推荐

  • GDB中应该知道的几个调试方法

    七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。 一、多线程调试 多线程调试可能是问得最多的。…

    Linux干货 2016-07-11
  • 使用NFS服务和samba部署wordpress

             centos 7.3主机一台   centos 6.8主机一台  使用yum安装的mysql(7以后使用yum装mysql叫mariadb)         我事先查看了一…

    2017-05-02
  • Linux的发展史和Linux的终端类型

    Linux的发展史和Linux的终端类型 前言:    随着时代的发展,Linux所占的市场份额越来越大,目前几乎百分之九十的服务器市场都被Linux占据。接下来我们来聊聊Linux的发展史。 简单的说:Linux操作系统是1998年的8月芬兰的一个叫Linus Torvalds的大学生写出来的一个类minix的系统。 具体分析: Lin…

    Linux干货 2016-10-17
  • 探究PHP底层

    1、PHP是什么? PHP 指的是我们从外面看到的一套完整的系统。这听起来有点糊涂,但其实并不复杂(PHP4 内部结构图)。从功能上来分:我们可以分为三部分: 1、 解释器部分(Zend 以引擎),负责对输入代码的分析、翻译和执行;2、 功能性部分(PHP功能函数以及扩展),负责具体实现语言的各种功能(比如它的函数等等);3、 接口部分(SAPI),负责同 …

    Linux干货 2015-04-10
  • do some test

    1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。     三次握手:         a(syn-send) -> send syn -> b(listen)         a(syn-send) <- receive …

    Linux干货 2016-06-12
  • http://www.jianshu.com/p/f1d0739b141f

    Linux干货 2017-07-30