理解Linux的文件权限
在Linux中,文件权限、属性和所有权控制系统进程和用户对文件的访问级别。这确保了只有被授权的用户和进程可以访问特定的文件和目录。
Linux的文件权限
基本的Linux权限模型的工作原理是将每个系统文件与一个所有者和一个组联系起来,并为三个不同类别的用户分配权限访问权。
- 文件的所有者。
- 该小组的成员。
- 其他(其他所有人)。
三种文件权限类型适用于每个类别的用户。
- 读取权限。
- 写入许可。
- 执行的权限。
这个概念允许你控制哪些用户可以读取文件,写到文件,或执行文件。
要查看文件权限,请使用ls
命令。
ls -l file_name
输出
-rw-r--r-- 12 linuxize users 12.0K Apr 28 10:10 file_name
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group
| | | | | +-------------------> 6. Owner
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions
| | +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type
第一个字符表示文件类型。它可以是普通文件(-
)、目录(d
)、符号链接(l
),或其他特殊类型的文件。下面的九个字符代表文件权限,三个三联体,每联体三个字符。第一个三联体显示所有者的权限,第二个三联体显示组的权限,最后一个三联体显示其他人的权限。
在上面的例子中,(rw-r--r--
)意味着文件所有者有读写权限(rw-
),组和其他人只有读的权限(r--
)。
文件权限因文件类型不同而有不同的含义。
这三个权限三要素中的每一个都可以由以下字符构成,并具有不同的效果,这取决于它们是被设置在文件还是目录上。
权限对文件的影响
权限对目录(文件夹)的影响
目录是一种特殊类型的文件,可以包含其他文件和目录。
改变文件的权限
文件权限可以通过chmod
命令来改变。只有root、文件所有者或具有sudo权限的用户可以改变文件的权限。使用chmod
时要格外小心,特别是在递归改变权限时。该命令可以接受一个或多个以空格分隔的文件和/或目录作为参数。
权限可以用符号模式、数字模式或参考文件来指定。
符号(文本)法
在使用符号模式时,chmod
命令的语法有以下格式。
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
第一组标志([ugoa…]
),即用户标志,定义了改变文件权限的用户类别。
u
- 文件的所有者。g
- 属于组内成员的用户。o
--所有其他用户。a
- 所有的用户,与ugo
相同。
当用户的标志被省略时,默认为a
。
第二组标志([-+=]
),即操作标志,定义了权限是要被移除、添加还是设置。
-
- 移除指定的权限。+
- 添加指定的权限。=
- 将当前权限改为指定的权限。如果在=
符号后没有给出权限,那么指定用户类别的所有权限都会被删除。
权限(perms...
)是用零或以下一个或多个字母明确设置的。r
, w
, x
, X
, s
, 和 t
.当从一个用户的类中复制权限到另一个用户的类中时,使用集合u
、g
和o
中的一个字母。
当为一个以上的用户类别设置权限时([,…]
),使用逗号(没有空格)来分隔符号模式。
下面是一些如何在符号模式下使用chmod
命令的例子。
给予组内成员执行文件的权限,但不允许读写该文件。
chmod g=x filename
移除所有用户的写权限。
chmod a-w filename
递归地删除其他用户的执行权限。
chmod -R o-x dirname
移除所有用户的读、写和执行权限,除了文件的所有者之外。
chmod og-rwx filename
同样的事情也可以通过使用下面的形式来完成。
chmod og= filename
给予文件所有者以读、写和执行的权限,给予文件组以读的权限,不给予所有其他用户以任何权限。
chmod u=rwx,g=r,o= filename
数值化方法
在使用数字模式时,chmod
命令的语法有以下格式。
chmod [OPTIONS] NUMBER FILE...
当使用数字模式时,你可以同时为所有三个用户类别(所有者、组和所有其他用户)设置权限。
权限号可以是3位数或4位数的数字。当使用3位数字时,第一位数字代表文件所有者的权限,第二位代表文件的组,最后一位代表所有其他用户。
每一个写、读和执行的权限都有以下数字值。
r
(读)=4w
(写)=2x
(执行) = 1- 无权限 = 0
一个特定用户类别的权限数由该组的权限值的总和来表示。
要以数字模式找出文件的权限,只需计算所有用户类别的总和。例如,如果要给文件的所有者以读、写和执行的权限,给文件的组以读和执行的权限,给所有其他用户以只读的权限,你要做的事情如下。
- 拥有者:RWX=4+2+1=7
- 组:R-X=4+0+1=5
- 其他:R-X=4+0+0=4
使用上述方法,我们得出了数字754
,这代表了所需的权限。
要设置setuid
、setgid
和sticky bit
的标志,请使用四位数的数字。
当使用4位数的号码时,第一个数字有以下含义。
- 设定时间=4
- setgid=2
- 粘性=1
- 无变化=0
接下来的三个数字与使用3位数的数字时的意义相同。
如果第一个数字是0,可以省略,模式可以用3位数字表示。数字模式0755
与755
相同。
要计算数字模式,你也可以使用另一种方法(二进制方法),但它要复杂一些。知道如何使用4、2和1来计算数字模式,对大多数用户来说已经足够了。
你可以使用stat
命令,用数字符号检查文件的许可权。
stat -c "%a" file_name
下面是一些如何在数字模式下使用chmod
命令的例子。
给予文件所有者读和写的权限,只给组员和所有其他用户以读的权限。
chmod 644 dirname
给予文件所有者读取、写入和执行的权限,给予组员读取和执行的权限,给予所有其他用户没有权限的权限。
chmod 750 dirname
给予读取、写入和执行的权限,以及一个粘性位给一个给定的目录。
chmod 1777 dirname
递归地设置文件所有者的读、写和执行权限,而对给定目录上的所有其他用户则没有权限。
chmod -R 700 dirname
总结
在Linux中,对文件的访问是用文件权限、属性和所有权来限制的。要改变文件的权限,请使用chmod
命令。
如果你有任何问题或反馈意见,请随时留言。