工作中,遇到的许多问题与文件系统的权限设置有关。在 Linux 系统中,文件权限是保护文件和目录安全的重要机制之一。通过正确设置文件权限,我们可以控制谁可以访问、读取、写入或执行特定的文件或目录。本文将详细介绍 Linux 中的文件权限概念和相关命令。


本文主要内容:

一、文件基本权限的组成

二、文件的特殊权限组成

三、Linux中的ACL权限详解


一、文件基本权限的组成

文件权限的表示方式如下:

Linux系统中文件权限详解_删除文件

(一)首先看第一列-rwxr-xr-x ,

  • 第一个字符表示文件类型。常见的文件类型包括 -(普通文件)和 d(目录)。
  • 接着的三个字符表示用户权限,即文件所有者对文件的权限。
  • 中间来的三个字符表示组权限,即文件所属组的用户对文件的权限。
  • 最后的三个字符表示其他权限,即其他用户对文件的权限。


每个权限字符可以是以下四个字符之一:

  • r(读取):允许读取文件内容、查看目录内容。
  • w(写入):允许修改文件内容、在该目录中创建、删除文件。
  • x(执行):对于文件,允许执行文件;对于目录,允许进入该目录。
  • -(无权限):表示没有相应的权限。


文件权限可以分为三个部分:用户权限、组权限和其他权限。下面将对每个部分进行详细说明。


1.用户权限

用户权限指的是文件的所有者对文件的权限。文件的所有者可以是系统中的任何用户。以下是用户权限的字符表示:

  • r(读取):允许所有者读取文件内容或查看目录内容。
  • w(写入):允许所有者修改文件内容或在目录中创建、删除文件。
  • x(执行):对于文件,允许所有者执行文件;对于目录,允许所有者进入该目录。
  • -(无权限):表示没有相应的权限。

2.组权限

组权限指的是文件所属组中的用户对文件的权限。每个文件都会关联一个所属组。以下是组权限的字符表示:

  • r(读取):允许组成员读取文件内容或查看目录内容。
  • w(写入):允许组成员修改文件内容或在目录中创建、删除文件。
  • x(执行):对于文件,允许组成员执行文件;对于目录,允许组成员进入该目录。
  • -(无权限):表示没有相应的权限。

3.其他权限

其他权限指的是不属于文件所有者和所属组的用户对文件的权限。以下是其他权限的字符表示:

  • r(读取):允许其他用户读取文件内容或查看目录内容。
  • w(写入):允许其他用户修改文件内容或在目录中创建、删除文件。
  • x(执行):对于文件,允许其他用户执行文件;对于目录,允许其他用户进入该目录。
  • -(无权限):表示没有相应的权限。

(二)第二列 root toot

第一个表示用户所属主,第二个表示用户所属组

用户所属主即表示用户拥有对应的第一列中的前三个权限

用户所属组则表示用户用户对应的第一列中的中间三个权限


二、文件的特殊权限

(一) SUID:设置用户编号

1、作用对象

只针对文件

2、suid 作用

给一个执行文件设置该权限后,任何能够执行该文件的用户都以该文件拥有者的身份去运行。

设置完毕后所属组位置的x会被替换为s,若s小写则表示所属人的执行权限还在,

若S大写则表示所属人的执行权限不在

设置方法

chmod u+s 文件路径

Linux系统中文件权限详解_文件权限_02

注:SetUID很危险,如果把vim命令设置了SUID,那么普通用户就可以用vim修改系统所有配置文件,比如把/etc/passwd文件中自己的用户分类修改成0(超级用户)。

(二) SGID:设置组编号

1.作用对象:文件和目录

针对文件时:

给一个执行文件设置该权限后,任何能够执行此文件的用户都以该文件的属组的身份去运行。设置完毕后所属组位置的x会被替换为s,若s小写则表示所属人的执行权限还在,若S大写则表示所属人的执行权限不在。

针对目录时:主要是权限的继承,给目录设置sgid权限后,任何人在此目录下创建内容,内容的属组与该目录所属组一致,


(三)SBIT:对权限的收缩

1、作用对象:

只对目录有效,一旦设定,那么该目录中存放的内容只能被内容的所属人删除,也就是说用户在该目录下只能删除属于自己的文件

2、设置方法

chmod o+t 目录路径

设置完毕后其他人位置的x会被替换为t,若t小写则表示所属人的执行权限还在,若T大写则表示所属人的执行权限不在


三、Linux中的ACL权限

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。

1、ACL的对象:

  • 可以针对特定用户来设置权限
  • 可以针对特定用户组来设置权限
  • 子文件/目录继承父目录的权限


2、如何设置ACL

我们可以使用setfacl和getfacl命令来设置或查看文件/目录的acl权限。 

用法:

setfacl [参数] 文件/目录名

参数:

-m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;

-x :删除后续的 acl 参数,不可与 -m 合用;

-b :移除所有的 ACL 配置参数;

-k :移除默认的 ACL 参数;

-R :递归配置 acl;

-d :配置“默认 acl 参数”,只对目录有效,在该目录新建目录会引用此默认值;

给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名

给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名

3、查看文件/目录的acl权限

getfacl 文件/目录名