简介Linux文件权限

一、Linux文件属性

首先要讲清楚一个概念,就是在Linux中“一切皆文件”,目录也是一种文件

在以root的身份登录Linux后,可以通过命令:ls -al  来查看Linux系统中文件属性的详细信息

这里写图片描述

ls -al 查看的文件信息共分为七列:
    第一列代表该文件的类型及属性
      Linux文件类型(每行的开头第一个字符即代表其文件类型):
        Linux系统中不以文件的扩展名来判别文件类型
        -:普通文件
        d:目录文件
        b:块设备
        c:字符设备
        l:符号链接文件
        p:管道文件pipe
        s:套接字文件socket

      文件权限:
      Linux文件权限共分为三类:r(可读)、w(可写)、x(可执行)
       Linux文件权限以三个为一组分为三组:
         第一组为文件拥有者的权限
         第二组为文件所属组的权限
         第三组为其他用户的权限(其他就是:既不是文件拥有者,也不是文件所属组内的用户) 
         若没有权限就在相应的权限位置[-]
    第二列表示该文件的硬连接数
        这部分的介绍可参看我之前的一篇博文:
        http://blog.csdn.net/ahhsong/article/details/75670570
    第三列表示该文件的拥有者
    第四列表示该文件的所属组
    第五列表示该文件的大小,默认单位是B
    第六列表示该文件的创建日期或者最近的修改日期
    第七列表示该文件的文件名

二、文件与目录权限的不同

文件之所以与目录的权限意义不同是因为,目录与文件所记录的数据内容不同所导致的。

对文件而言,其是存放实际数据的所在:
    r(read):表示可以读取此文件的实际内容,如文本文件所记载的各种数据
    w(write):表示可以对文件进行编辑、增加或者修改内容(但是不能删除该文件)
    x(execute):表示该文件具有可以被系统执行的权限

对目录而言,其所存放的是记录的文件名列表,文件名与目录密切相关:
    r(read):表示其具有读取该目录结构列表的权限,可利用ls命令查看该目录的结构
    w(write):表示其具有更改该目录结构列表的权限
        新建新的文件与目录
        删除已存在的文件或目录
        对已存在的目录与文件进行重命名
        对该目录下的文件或目录进行移动
    x(execute):表示用户能否进入该目录,使其成为工作目录。
                 若没有该权限最直接的表现就是你不能使用cd命令切换到该目录下

    注意:对于目录,若想读取该目录下的文件,不能只对用户开放 r (只读)权限,
         同时还要开放 x (执行)权限,否则用户是读取不了的。

三、默认权限:umask

umask就是指定当前用户在新建文件或目录时候的默认权限
查看当前umask值可通过在命令行直接输入:umask命令,或者输入:umask -S 命令

这里写图片描述

用umask设置默认权限时,文件和目录是不一样的:
    对于文件而言,用户创建时,默认是没有可执行(x)权限的,只有r、w两项权限,所以其最大默认权限值是666,即为:-rw-rw-rw-。

    对于目录而言,用户创建时,由于x权限关系到用户能否进入此目录,所以默认是开放全部权限的,,所以其最大默认权限值是777,即为;-rwxrwxrwx

比如:
    最大权限值: 777  rwxrwxrwx  666 rw-rw-rw-
    umask值:   021   ----w---x  021 ----w---x
    实际的权限值:756 rwxr-xrw-  646 rw-r--rw-

这里写图片描述

在实际中可能会遇到这种情况:umask值包含奇数(例如:003),但实际新创建出来的文件(不是目录)的权限值里并没有包含奇数(会是:664)。这是因为文件的最大默认值是666,若umask值中包含x权限(即:会有奇数出现)时,系统在创建新文件时会自动过滤掉x权限。
这里针对这种情况提供两种计算新建文件权限值的方法:
(1)数值计算:
    当umask中全部是偶数时,可以直接减,当umask中包含奇数时,对于目录直接减,对于文件,在奇数所在的位减完后加一即可。
(2)符号方式:
    就是umask中设置了哪些权限,在实际中就把这些权限拿走不要就行了,剩下的权限就是实际新建文件的权限。

四、文件的特殊权限位

前面讲到umask时,我们用umask命令直接查看默认权限值时显示的是四位,而不是三位,后面那三位表示的是基本的权限位,而最前面那一位表示的就是特殊权限位(s和t权限),这个权限位是与系统相关的。

特殊权限一共有三个,分别是:SUID、SGID、SBIT

SUID(即:SetUID)
    其标志是s,出现在文件所有者的x权限位上,当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。
    其限制和功能如下:
        SUID权限仅对二进制文件有效;
        执行者对于该二进制文件需要具有 x 的可执行权限;
        该权限仅在执行该二进制文件的过程中有效;
        执行者将暂时具有该二进制文件拥有者的权限;
        不能用在 shell script 上面。

举个例子说明一下:
    用户的密码都是以加密方式保存在/etc/shadow 文件中的,修改密码的实质就是对该文件的修改,但普通用户是无法读取和编辑该文件的,也就是说普通用户不具有更改自己密码的能力,但事实是普通用户通过 passwd 命令是可以更改自己密码的。

如下图所示:
这里写图片描述

为什么会出现上面的情况呢?其实这就是SUID的作用了!我们通过查看 passwd 命令执行文件的权限可知,该命令具有SUID权限,也就是说普通用户在执行该命令时也会暂时具有超级管理员的权限,从而实现普通用户对自己密码的更改

这里写图片描述

SGID(即:SetGID)
    其标志也是s,出现在文件所属组的x权限位上,当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限;当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所有属均为该目录的所有组。
    其限制和功能如下:
        SGID对二进制文件有效;
        执行者对于该二进制程序文件需具有 x 权限;
        执行者在执行的过程中将会暂时获得该文件用户组的支持;
        用户若对于此目录具有r与x权限时,则该用户能够进入此目录;
        用户在此目录下的有效用户组将会变成该目录的用户组;
        若用户再次目录下具有w权限,则用户所创建的新文件的用户组与此目录的用户组相同。

SBIT(即:Sticky Bit)
    其标志是t,出现在文件属性其他的位上,当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录下的文件仅其所属人才能删除。
    其限制和功能:
        当用户对于此目录具有w、x权限时,即具有写入权限;
        当用户在该目录下创建文件或目录时,仅有自己与超级管理员才有权删除该文件;
        只对目录有效,对文件无效。
五、结语

Linux对文件进行权限设置的最主要目的是为了保护系统安全和数据安全,避免不合适的用户做出不合适的行为;这样做还有另一个好处就是方便团队之间进行资源共享,协同工作。

但是若对权限设置不当,也很有可能会带来意想不到的危害,反而会使系统安全更得不到保障。

所以对权限设置要慎之又慎!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值