Linux特殊文件权限(chmod)

本文介绍了Linux系统的三种特殊文件权限:stickybit、SGID和SUID的功能及应用,并提供了具体的设置和检查方法。

一般来说,使用过Linux的同学都知道,Linux文件的权限有rwx,所有者、所有组、其它用户的rwx权限是彼此独立的。为此,经常会听到如果某个web文件需要被修改的话,需要加上777的权限,这就是让所有用户可写。

    但仔细一想,这样的权限未免有些想得比较天真,没有考滤特殊情况。例如/tmp目录默认权限是777,而且有些文件也是允许所有用户访问修改的,那么是不是任何一个用户都可以将这些删除呢?再如/etc/shadow保存的是用户密码文件,默认情况下它的权限是640,那么只有shadow的owner(root)才能修改它,按照常规理解,这是不可理解的,因为每个用户都可能修改密码,也就是会修改这个文件。

    为了把这些情况解释清楚,需要引入Linux特殊文件权限的概念。Linux特殊文件权限有三个玩意:sticky bit、SGID、SUID,以下一一道来。

    sticky bit

    sticky bit只对目录有效,使目录下的文件,只有文件拥有者才能删除(如果他不属于owner,仅属于group或者other,就算他有w权限,也不能删除文件)。

    加sticky bit的方法:

    chmod o+t /tmp或者

    chmod 1777 /tmp

    查看是否加了sticky bit,用ls -l,可以看到有类似这样的权限:“-rwxrwxrwt”,t就代表已经加上了sticky bit,而且生效了,如果显示的是“-rwxrwxrwT”,说明也已经加上了sticky bit,但没有生效(因为本来other就没有写的权限)。

    看看/tmp目录的权限,就是drwxrwxrwt吧

    SGID(The Set GroupID )

    加上SGID的文件,表示运行这个程序时,是临时以这个文件的拥有组的身份运行的;加上SGID的文件夹,表示在这个目录下创建的文件属于目录所有的组,而不是创建人所在的组,在这个目录下创建的目录继承本目录的SGID。

    加SGID的方法:

    chmod g+s /tmp或

    chmod 2777 /tmp

    查看是否加了SGID,用ls -l,可以看到类似这样的权限“drwxrwsrwx”,s就代表已经加上了SGID,而且生效,如果显示“drwxrwSrwx”,说明已经加上了SGID,但没有生效(因为本来group就没有执行的权限)。

    SUID(The Set UserID)

    SUID与SGID是一样的,惟一不同的是,运行时是以这个文件的拥有者身份来运行。

    加SUID的方法:

    chmod o+s /tmp或

    chmod 4777 /tmp

    同样的,加了SUID的文件权限有这类似这两种:“drwsrwxrwx”、“drwSrwxrwx”。

    看看passwd命令的权限:ll /usr/bin/passwd,是"-rwsr-x-rx",终于知道为什么执行passwd时,可以修改/etc/shadow文件了吧

 

  SUID:置于 u 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
  SGID:置于 g 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
  STICKY:粘滞位,置于 o 的 x 位,原位置有执行权限,就置为 t ,否则为T .


### 如何在 Linux 中使用 `chmod` 修改文件权限 #### 使用符号模式修改权限 可以利用字符来指定用户类别以及操作符,进而调整特定用户的访问权限。 对于增加执行权限的操作,可以通过如下方式实现: ```bash chmod +x file.py ``` 上述命令会向当前用户、同组用户以及其他用户都赋予执行权限[^1]。 如果仅希望给所有者添加执行权限,则应采用下面的形式: ```bash chmod u+x file.txt ``` 当目标是移除某些权限时,减号 `-` 就派上了用场;而等号 `=` 则用于精确设置权限而不影响到未提及的部分。例如,要将某个文件的权限严格设为只有所有者可执行,其余任何权限均被清除的话,应该这样做: ```bash chmod u=x file.txt ``` 此命令清除了原有的一切权限并只为所有者设置了执行权能。 #### 特殊权限位 特殊权限包括SUID, SGID 和 Sticky Bit: - **SUID**: 当程序运行时临时获得该程序拥有者的身份; ```bash chmod +s executable ``` - **SGID**: 对于目录来说意味着新创建于此内的文件自动继承其父级目录所属群组的身份; ```bash chmod g+s directory ``` - **Sticky Bit**: 主要在共享存储空间内发挥作用,防止他人删除不属于自己的文件或子目录; ```bash chmod +t directory ``` 这些特殊的权限标志能够增强系统的安全性和功能性。 #### 数字模式下的权限变更 另一种方法是以三位数形式表达权限级别,其中每一位分别对应着不同类型的使用者群体(即文件所有者、同一组成员和其他任何人),每位上的数值由三个二进制位组成,用来指示具体的 r(读取), w(写入) 或 x(执行) 权限状态。例如,“7”代表完全控制——既允许读又支持写还能执行。“0”则表示没有任何权利。因此,若需给予某文档最高级别的开放度,就可以这样操作: ```bash chmod 777 filename ``` 这使得所有人都获得了对该文件的最大化存取自由度[^2]。 #### 用户分类说明 通过字母标识不同的作用对象:“u”指代文件所有者 (user),“g”针对同一个用户组里的成员 (group),“o”涉及除此之外的所有个体 (others),最后,“a”作为通配符涵盖了以上全部三类人群 (all)[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值