14.2. 文件权限

使用 ls -l 命令查看文件权限(list-long,长列表格式)。 它们将显示如下,请注意,我在权限之间添加了空格以使其更易于阅读

其中:r = 读取,w = 写入,x = 执行

  -  rwx   rw-   r--  1 (1) newuser newuser
type(2)owner(3)group(4)others(5)
(1)
此数字是到此文件的硬链接(指针)的数量。 您可以使用 ln 命令创建到该文件的另一个硬链接。
(2)
这是文件类型。“-”表示普通文件,“d”表示目录,“l”表示链接。 还有其他类型,例如“c”表示字符设备,“b”表示块设备(在 /dev/ 目录中找到)。
(3)
这些是文件所有者(创建文件的用户)的权限。
(4)
这些是组权限,任何与创建文件的用户属于同一组的用户都将拥有这些权限。
(5)
这些是其他所有人的权限。 任何组外的用户都将拥有这些文件的权限。

末尾的两个名称分别是用户名和组。

chmod

更改一个或多个文件的文件访问权限。

使用 chmod 更改权限有两种方法:字母或数字。

字母方法

使用 + 或 - (加号或减号)分别为文件添加或删除权限。 使用等号 = 指定新权限并删除特定用户类型的旧权限。

您可以使用 chmod 字母,其中字母是

a(所有(每个人)),u(用户),g(组)和 o(其他)。

示例

chmod u+rw somefile

这将赋予用户读取和写入权限。

chmod o-rwx somefile

这将删除其他用户的读取/写入/执行权限(不包括您组内的用户)。

chmod a+r somefile

这将赋予每个人对文件的读取权限。

chmod a=rx somefile

这将赋予每个人对文件的执行和读取权限,如果任何人拥有写入权限,则会被删除。

数字方法

您也可以使用数字(代替字母)来更改文件权限。 其中

r(读取)= 4 w(写入)= 2 x(执行)= 1

数字可以相加,因此您可以指定读取/写入/执行权限; 读取+写入 = 6,读取+执行 = 5,读取+写入+执行 = 7

示例

chmod 777 somefile

这将赋予每个人对 “this_file” 的读取/写入/执行权限。 第一个数字是用户,第二个是组,第三个是其他人(other)。

chmod 521 somefile

这将赋予用户读取和执行权限,组写入权限(但没有读取权限!),以及其他所有人执行权限。(请注意,这只是一个示例,这样的设置实际上没有意义......)。

chown

更改文件的所有权(因此得名“chown” - change owner,更改所有者)。 此程序只能由 root 用户使用。

使用 -R 选项以递归方式更改,换句话说,包括子目录中的所有匹配文件。

命令语法

chown owner:group the_file_name
粘滞位

只有在目录中创建文件的人才能删除它,即使其他人拥有写入权限也是如此。 您可以通过键入以下命令来启用它

chmod 1700 somedirectory (where 1 = sticky bit)

或(其中 t 代表粘滞位)

chmod +t somedirectory

要关闭它,您需要键入

chmod 0700 somefile (where the zero would mean no sticky bit)

或(其中 t 代表粘滞位)

chmod -t somefile

请注意,在数字示例中,权限无关紧要,只有第一个数字(1 = 开启,0 = 关闭)才重要。

粘滞目录的一个示例通常是 /tmp

suid

允许 SUID/SGID(切换用户 ID/切换组 ID)访问。 您通常会使用 chmod 为特定文件启用或禁用此功能,suid 通常被认为是安全隐患,因此在使用时要小心。

示例

chmod u+s file_name

这将赋予每个人使用设置 +s 开关的用户的权限执行文件的权限。

Caution安全隐患
 

这显然是一个安全隐患。 除非必要,否则应避免使用 suid 标志。

chattr

更改文件系统属性(适用于 ext2fs 和可能的其他文件系统...)。 使用 -R 选项以递归方式更改文件, chattr 具有大量可以设置在文件上的属性,请阅读手册页以获取更多信息。

示例

chattr +i /sbin/lilo.conf[1]

这会在文件上设置“immutable”(不可变)标志。 使用“+”添加属性,使用“-”删除属性。 +i 将防止对 “lilo.conf” 文件进行任何更改(意外或其他)。 如果您希望修改 lilo.conf 文件,您需要取消设置不可变标志: chattr -i。 请注意,某些标志只能由 root 用户使用; -i-a 以及可能的许多其他标志。

请注意,chattr 可以更改许多不同的属性,以下是一些可能更有用的属性

  • A(无访问时间)--- 如果文件或目录设置了此属性,则无论何时访问它(无论是读取还是写入),它的上次访问时间都不会更新。 这可能很有用,例如,对于经常被读取访问的文件或目录,尤其因为此参数是 inode 打开时唯一更改的参数。

  • a(仅追加)--- 如果文件设置了此属性并且已打开以进行写入,则唯一可能的操作是将数据追加到其先前的内容。 对于目录,这意味着您只能向其中添加文件,但不能重命名或删除任何现有文件。 只有 root 用户可以设置或清除此属性。

  • s(安全删除)--- 当删除设置了此属性的文件或目录时,它在磁盘上占用的块将被写回零(类似于使用 shred)。 请注意,这在 ext2 和 ext3 文件系统上有效,但不太可能在其他文件系统上有效(请参阅您正在使用的文件系统的文档)。 您可能还想了解 shred,请参阅第 7 章

lsattr

(列出属性)。 这将列出文件是否具有任何特殊属性(由 chattr 设置)。 使用 -R 选项以递归方式列出,并尝试使用 -d 选项将目录像其他文件一样列出,而不是列出其内容。

命令语法

lsattr

这将列出当前目录中的文件,您可能还想指定一个目录或文件

lsattr /directory/or/file

注释

[1]

此示例和部分解释摘自 Linux 在线课堂,有关更多信息,请参阅参考书目中的 [4]。