在 Linux 系统中,文件和目录的权限控制是基于访问控制列表(ACL)的基础上进行管理的,每个文件和目录都有一组权限设置,决定了不同用户如何访问和操作文件。文件权限通过 10 个字符表示,其中包含文件类型以及不同用户(所有者、组、其他用户)的权限。

文件权限表示格式

Linux 文件权限通常通过 ls -l 命令显示,结果类似以下格式:

-rwxr-xr-x 1 user group 4096 Nov 6 14:30 examplefile

这行输出表示文件 examplefile 的权限和其他信息。它的详细解释如下:

-rwxr-xr-x 1 user group 4096 Nov 6 14:30 examplefile

第1个字符(文件类型):

-:普通文件

d:目录

l:符号链接

c:字符设备文件

b:块设备文件

s:套接字文件

p:命名管道文件(FIFO)


第2至10个字符(权限信息):这部分被分成三组,每组三个字符,分别代表文件的 所有者、所属组 和 其他用户 的权限。


权限字符含义:

每个权限由三个字符组成:

r(read):读取权限,允许查看文件内容或列出目录中的文件。

w(write):写入权限,允许修改文件内容或在目录中创建、删除文件。

x(execute):执行权限,允许执行文件(如果是可执行文件),或进入该目录。


如果某个权限没有被授予,则用 - 替代:

rwx:完全权限(可读、可写、可执行)

r-x:只读和可执行

rw-:可读和可写

r--:只读

---:无任何权限


示例:

假设你看到以下输出:

-rwxr-xr-x 1 user group 4096 Nov 6 14:30 examplefile

所有者权限(rwx):

r(read):文件所有者可以读取文件。

w(write):文件所有者可以修改文件。

x(execute):文件所有者可以执行该文件。


组权限(r-x):

r(read):所属组的用户可以读取文件。

-(没有写权限):所属组的用户不能修改文件。

x(execute):所属组的用户可以执行文件。


其他用户权限(r-x):

r(read):其他所有用户可以读取文件。

-(没有写权限):其他用户不能修改文件。

x(execute):其他用户可以执行文件。



数字权限表示法(八进制表示法)

Linux 还支持使用数字来表示权限。每个权限可以被映射为一个数字:

r = 4

w = 2

x = 1

- = 0


每组三个字符的权限可以通过将它们的数值相加来表示。例如:

rwx = 4 + 2 + 1 = 7

rw- = 4 + 2 + 0 = 6

r-x = 4 + 0 + 1 = 5

r-- = 4 + 0 + 0 = 4


因此,rwxr-xr-x 会被表示为 755,而 rw-r--r-- 会被表示为 644。

示例数字表示:

chmod 755 examplefile

这个命令给文件 examplefile 设置权限 rwxr-xr-x(即所有者有读、写、执行权限,组和其他用户只有读和执行权限)。

用户类别:

文件权限是基于三个不同的用户类别来设置的:

1. 所有者(Owner):文件的所有者。一般是文件的创建者,或者在文件所有权转移时指定的用户。


2. 组(Group):与文件关联的用户组。文件的所属组的成员有一组特定的权限。


3. 其他用户(Others):除所有者和组之外的所有用户。



常用的权限操作命令:

1. 查看文件权限:

ls -l filename


2. 修改文件权限: 使用 chmod 命令来更改文件或目录的权限。

使用数字表示法:

chmod 755 filename # 所有者可读写执行,组和其他用户可读和执行

使用符号表示法:

chmod u+x filename # 给文件所有者添加执行权限
chmod go-w filename # 从组和其他用户移除写权限



3. 修改文件所有者和组: 使用 chown 命令来修改文件的所有者和用户组。

chown user:group filename # 将文件的所有者更改为 user,所属组更改为 group


4. 设置特殊权限:

Setuid(s):使程序以文件所有者的权限执行。

Setgid(s):使程序以文件所属组的权限执行,或者在目录中设置,创建的新文件将继承该目录的组。

Sticky bit(t):仅允许文件所有者删除文件,通常用于目录(如 /tmp)。




权限的特殊设置:

Setuid(Set User ID): 当一个可执行文件设置了 setuid 权限时,执行该文件的用户将暂时获得文件所有者的权限。例如,/bin/passwd 设置了 setuid,普通用户可以修改自己的密码,但文件是由 root 所有,执行时以 root 权限运行。

Setgid(Set Group ID):

对于文件,设置 setgid 权限会使该文件以文件所属组的身份执行。

对于目录,设置 setgid 会使该目录中新创建的文件和目录继承该目录的组,而不是创建者的组。


Sticky Bit: 通常用于目录,如 /tmp 目录。设置了 Sticky Bit 的目录,文件只能由文件所有者、目录所有者或 root 删除。这防止了其他用户删除或修改他们不拥有的文件。


总结:

Linux 文件权限系统为用户提供了灵活的访问控制机制,通过设置不同的权限组合,用户可以精确控制文件和目录的访问权限。了解和合理配置文件权限对于系统安全至关重要。
 
 
Back to Top