Holmesian Blog

对Linux/Unix文件权限的理解

今天我才知道,在 Linux 和 Unix 系统中,对于目录来说,x 位意味着搜索和访问目录,这与文件的 x 权限是完全不同的。具体来讲,对于存放网站的目录,应该将其所有者设置为与 apache 相同的用户名和所属组(通常是 www),文件所有者的权限设置为 1 即可,这样网站既能正常访问,又能防止使用 webshell 对当前目录进行列表或遍历操作。

一直以来,我都错误地将文件夹的 r 权限理解为列表访问,现在才明白原来是目录的 x 权限才表示搜索和访问目录,真是惭愧啊……

chmod 操作后的文件权限数字 mod 是八进制的,这样正好可以用四位八进制数来表示一个文件或目录的所有权限。例如,0400 可以表示为 000 100 000 000,其中 b 表示文件属主可读,最高位可以不用太在意,主要是设置 u 位的。

以下是计算权限值的方法:

------------------------------------------------------------------  
| 文件属主 | 同组用户 | 其他用户 |  
------------------------------------------------------------------  
| r w x r w x r w x |  
| 4 + 2 + 1 4 + 2 + 1 4 + 2 + 1 |  
------------------------------------------------------------------ 

是不是很简单呢?

此外,有些文件还具有一些特殊的权限设置:

一、特殊权限说明

(一)setuid

setuid 权限可以使文件在执行阶段具有文件所有者的权限。典型的例子是 /usr/bin/passwd 文件,如果普通用户执行该文件,在执行过程中,该文件可以获得 root 权限,从而可以更改用户的密码。

(二)setgid

setgid 权限仅对目录有效。当目录被设置该权限后,任何用户在此目录下创建的文件都将具有和该目录所属组相同的组。

(三)sticky bit

sticky bit 可以理解为防删除位。一个文件是否可以被某个用户删除,主要取决于该文件所属组对该用户是否具有写权限。如果没有写权限,那么这个目录下的所有文件都不能被删除,也不能添加新的文件。如果希望用户可以添加文件但不能删除文件,那么可以对文件使用 sticky bit 权限。设置该权限后,即使用户对目录具有写权限,也不能删除该文件。

二、文件权限与所属关系

因为每个文件都有一个所有者,表示该文件是由谁创建的,同时,该文件还有一个组编号,表示该文件所属的组,一般为文件所有者所属的组。对于可执行文件,在执行时,通常该文件仅拥有调用该文件的用户的权限,而 setuid 和 setgid 可以改变这种设置。

三、改变特殊权限的方法

以下是改变文件或目录特殊权限的方法:

chmod u+s temp -- 为 temp 文件加上 setuid 标志。(只对文件有效)
chmod g+s tempdir -- 为 tempdir 目录加上 setgid 标志。(只对目录有效)
chmod o+t temp -- 为 temp 文件加上 sticky 标志。(只对文件有效)

用权限位的数字表示如下:

4000 setuid bit  
2000 setgid bit  
1000 sticky bit  

还有一种专门针对文件夹或修改权限的方便方法:

find. -type d -exec chmod 155 {} ; (修改目录权限)
find. -type f -exec chmod 644 {} ; (修改文件权限)

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »