文件权限

发布时间 2023-11-15 20:24:52作者: 辞瑾

一、基本权限UGO

1.基本介绍

(1)U:owner,属组

用户(User) :这是文件或目录的所有者,拥有最高的控制权。用户可以读取、写入和执行文件,也可以修改它们的权限。例如,如果一个文件的属主是Alice,那么Alice可以读取、写入和执行这个文件。

         G:group,属组

组(Group) :组权限适用于文件或目录的所属组。通常,多个用户分配到相同的组,这样他们可以共享访问权限。组权限允许组成员读取、写入和执行文件。例如,如果一个文件的属组是Engineering,那么Engineering组的所有用户都可以读取、写入和执行这个文件。

         O:other,其他用户

其他(Others) :这是除用户和组之外的其他所有人。其他人权限适用于系统中的所有用户,不管他们是否与文件或目录有关。例如,如果一个文件的权限设置为rwXxr--r-- (其中"rwx" 表示属主有读、写和执行权限,"--" 表示属组有读和执行权限,"--" 表示其他人有读和执行权限),那么除了属主之外的其他用户只有读和执行权限。

(2)当使用ll命令查看文件属性时,第一行的第2~10个字符每3个字符为一组,左边3个表示属主的权限,中间3个字符表示属组的权限,右边3个字符是表示其他用户的权限。每组的3个字符都有其具体含义,如下:

r:read(读取),数字设定:4;

w:write(写入),数字设定:2;

X:execute(执行),数字设定:1。

(3)具体示例:

[root@localhost ~]# ll file01
-rw-r--r--. 1 root root 0 10月 25 14:57 file01

在这段信息中,owner的权限为“rw--”(读取与写入),数字可以表示为4+2=6;group的权限为“r--”(读取),数字可以表示为4;other的权限为“r--”(读取),数字可以表示为4.

 

2.设置文件属性与权限

(1)chown命令:用于更改文件或目录的所有者和所属组

语法格式:

chown [选项] 所有者 文件/目录

参数设置:

-R:递归地更改所属组(将某目录或文件同时修改属主或属组)

-v:显示详细信息

[root@localhost ~]# ls
aba              file01      file03.txt            qf.txt    视频  音乐
anaconda-ks.cfg  file01.txt  file04.txt            user.txt  图片  桌面
ciji.txt         file02      initial-setup-ks.cfg  公共      文档
date.txt         file02.txt  list.txt              模板      下载
[root@localhost ~]# ll file01
-rw-r--r--. 1 root root 0 10月 25 14:57 file01
[root@localhost ~]# chown ciji file01
[root@localhost ~]# ll file01
-rw-r--r--. 1 ciji root 0 10月 25 14:57 file01
chown命令仅修改文件属主
[root@localhost ~]# chown ciji.linux file01
[root@localhost ~]# ll file01
-rw-r--r--. 1 ciji linux 0 10月 25 14:57 file01
chown命令同时修改文件属主和数组

注意:当使用chown命令同时修改文件属主和属组时,需要在属主和属组之间加入“.”或“”,一般建议加“:”,以免因属主名称含有“."造成系统误判。

(2)chgry命令:用于更改文件或目录所属组

语法格式:

chgry [选项] 组名 文件/目录

[root@localhost ~]# chgrp linux file01
[root@localhost ~]# ll file01
-rw-r--r--. 1 ciji linux 0 10月 25 14:57 file01
chgrp命令仅改变文件属组

(3)chmod命令:用于更改文件或目录权限

chmod [选项] 权限 文件/目录

命令 对象 赋值符 权限类型 目标文件
chmod u +  -  = r  w  x file
g
o
a(全部)
[root@localhost ~]# touch file
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 11月 14 22:07 file
[root@localhost ~]# chmod u+x,g+w file
[root@localhost ~]# ll file
-rwxrw-r--. 1 root root 0 11月 14 22:07 file
使用chmod命令以符号”+“修改文件权限
[root@localhost ~]# ll file
-rwxrw-r--. 1 root root 0 11月 14 22:07 file
[root@localhost ~]# chmod u-wx,g-w file
[root@localhost ~]# ll file
-r--r--r--. 1 root root 0 11月 14 22:07 file
使用chmod命令以符号“-”修改文件权限
[root@localhost ~]# ll file
-r--r--r--. 1 root root 0 11月 14 22:07 file
[root@localhost ~]# chmod u=rw,g=rw,o=rw file
[root@localhost ~]# ll file
-rw-rw-rw-. 1 root root 0 11月 14 22:07 file
使用chmod命令以符号“=”修改文件权限
[root@localhost ~]# ll file
-rw-rw-rw-. 1 root root 0 11月 14 22:07 file
[root@localhost ~]# chmod 742 file
[root@localhost ~]# ll file
-rwxr---w-. 1 root root 0 11月 14 22:07 file
使用chmod命令以数字修改文件权限
示例一:
[root@localhost ~]# ll file
-rwxr---w-. 1 root root 0 11月 14 22:07 file
[root@localhost ~]# chmod a=- file
[root@localhost ~]# ll file
----------. 1 root root 0 11月 14 22:07 file


示例二:
[root@localhost ~]# ll file
-rwxr---w-. 1 root root 0 11月 14 22:07 file
[root@localhost ~]# chmod 000 file
[root@localhost ~]# ll file
----------. 1 root root 0 11月 14 22:07 file
删除所有对象权限

3.基本权限的意义

权限 对文件的影响 对目录的影响
r(读取) 可读取文件内容 可列出目录的内容(文件名)
w(写入) 可修改文件内容 可创建或删除目录中的任一文件
x(执行) 可将文件作为命令执行 可访问目录的内容(取决于目录中文件的权限)

 

二、基本权限ACL

1.ACL基本用法

(1)在Linux中,ACL (Access ControlList)是一种权限管理机制,它提供了更加灵活的权限控制方式,可以用于限制用户、进程或设备对文件或目录的访问权限。

(2)getfacl命令:用于取得某个文件或目录的ACL权限(查看ACL权限)

[root@localhost ~]# touch /home/test.txt
[root@localhost ~]# getfacl /home/test.txt
getfacl: Removing leading '/' from absolute path names
# file: home/test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@localhost ~]# ll /home/test.txt
-rw-r--r--. 1 root root 0 11月 15 18:50 /home/test.txt
getfacl命令查看文件ACL权限

(3)setfacl命令:用于设置某个文件或目录的ACL权限(设置ACL权限)

参数设置:

-m:修改当前文件ACL权限

-x:删除用户对文件的所有权限

-b:删除所有扩展ACL权限,回到UGO的基本权限

[root@localhost ~]# ll /home/test.txt
-rw-r--r--. 1 root root 0 11月 15 18:50 /home/test.txt
[root@localhost ~]# setfacl -m u:ciji:rw /home/test.txt
[root@localhost ~]# ll /home/test.txt
-rw-rw-r--+ 1 root root 0 11月 15 18:50 /home/test.txt
setfacl -m
[root@localhost ~]# ll /home/test.txt
-rw-rw-r--+ 1 root root 0 11月 15 18:50 /home/test.txt
[root@localhost ~]# setfacl -x u:ciji /home/test.txt
[root@localhost ~]# getfacl /home/test.txt
getfacl: Removing leading '/' from absolute path names
# file: home/test.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
setfacl -x
[root@localhost ~]# setfacl -b /home/test.txt
[root@localhost ~]# getfacl /home/test.txt
getfacl: Removing leading '/' from absolute path names
# file: home/test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@localhost ~]# ll /home/test.txt
-rw-r--r--. 1 root root 0 11月 15 18:50 /home/test.txt
setfacl -b

 

2.ACL高级特性

 最大有效权限mask

(1)mask是用来指定最高有效权限的。系统给用户赋予ACL权限需要和mask的权限逻辑“相与”,“相与”之后的权限才是得到用户的真正权限。

(2)mask只影响除所有者和other之外的人和组的最大权限,mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限。

(3)mask能临时降低用户或组的权限,而不是如serfacl -d 命令去除所有权限。

 

继承default

(1)继承(default)权限是指ACL中的一种规则,它允许用户或组对目录中的所有文件继承权限。

(2)在默认情况下,新创建的文件会继承所在目录的权限设置。如果目录没有设置ACL规则,则新文件将继承目录的默认权限;如果目录设置了ACL规则,则新文件将继承的目录的ACL规则。

(3)default是在设置初始文件时赋予他们默认的权限,是做“减法”,通过文件的最大权限减去umask的值就是文件初始的权限的值,也可以叫做权限的“补码”。

(4)继承(default)权限可以应用于多个用户或组,使用setfacl可以设置目录的默认权限。

(5)继承default权限可以方便地设置目录及其下文件的权限,使不同的用户或组能够根据需要进行访问控制。

 

三、高级权限

1.SUID权限

(1)SUID权限是一种特殊的文件权限,它允许用户在执行程序时暂时获得文件所有者的权限。

(2)当用户执行一一个具有SUID权限的程序时,该程序的进程将获得文件所有者的用户ID (UID) ,而不是执行该程序的用户的UID。这意味着进程可以以文件所有者的身份执行操作。

(3)SUID权限通常用于关键任务或需要特殊权限的应用程序,例如root权限或特权用户。

(4)需要注意的是,SUID权限只能用于可执行文件,并且只有文件所有者才能设置SUID权限。

(5)普通用户可以通过SUID用户提权,使用chmod命令为某用户增加SUID权限。

[root@localhost ~]# chmod u+s /usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 11月 17 2020 /usr/bin/cat
示例

 

2.SGID权限

(1)SGID权限是一种特殊的文件权限,它允许用户在执行程序时暂时获得文件所属组的权限。

(2)当用户执行一个具有SGID权限的程序时,该程序的进程将获得文件所属组的组ID (GID),而不是执行该程序的用户的GID。这意味着进程可以以文件所属组的身份执行操作。

(3)SGID权限通常用于需要以特定组的身份执行操作的应用程序或脚本。类似于SUID权限,SGID权限也只能用于可执行文件,并且只有文件所有者才能设置SGID权限。

3.Sticky权限

(1)Sticky权限是一种特殊的文件权限,它允许用户在执行程序时保持进程的所有权。

(2)当用户执行一个具有Sticky权限的程序时,该程序的进程将保持其所有权,即使程序已经退出。这意味着其他用户无法修改或删除该进程创建的文件或资源。

(3)Sticky权限通常用于需要保护进程创建的资源不被其他用户随意修改或删除的情况。

(4)Sticky权限通常只应用于目录,并且只有文件所有者才能设置Sticky权限。当目录具有Sticky权限时,只有目录的所有者才能删除该目录中的文件。

 

 

4.高级权限用法总结表

高级权限 数字符号 文件 目录
   SUID       4 以属主身份执行  
   SGID       2 以属组身份执行 继承属组
   Sticky       1   用户只能删除自己的文件

 

 

 

四、文件属性chattr

(1)chattr是一个用于修改文件系统属性的命令,只有root用户才能使用。chattr命令的格式为: chattr[+-=][选项]文件或目录名。
(2)chattr支持的选项主要有两种,i和a。
   如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据。如果对目录设置属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
   如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据。如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。
(3)chattr命令也支持对文件系统中的文件进行隐藏设置,设置之后除非是root用户或者使用特殊的查看命令否则无法直接看到被隐藏的文件或目录。

 

五、进程掩码umask

 (1)umask的主要作用是定义新创建的文件或目录的初始权限。在默认情况下,新创建的文件或目录的权限为666 (对于文件)或777 (对于目录)。然而,通过设置umask值, 可以修改这些默认权限。

(2)umask的值是一个八进制的数字,每个数字代表一个权限位。其中,0代表没有权限,1代表执行权限,2代表写权限,4代表读权限。因此,umask的值可以表示为一系列数字的组合,每个数字对应一个权限位。例如,umask值为022表示没有写权限(其他用户), 执行和读权限不受限制(对于文件来说,这意味着其他用户可以查看文件内容但不能修改它)。

(3)要查看当前的umask值,可以在终端中输入umask命令。要修改umask值,可以在umask命令后面加上新的值。例如,要将umask值设置为022,可以输入umask 022。

(4)umask的值是在shell启动时读取和设置的。因此,每次打开一个新的shell时,都会重新读取和设置umask值。此外,umask命令只影响新创建的文件或目录的权限,不会修改现有文件或目录的权限。