在 Linux 系统中,文件权限是保障系统安全与用户数据隔离的重要机制。无论是普通用户还是系统管理员,理解文件权限的工作原理都至关重要。
一、文件权限的基本概念
Linux 是一个多用户操作系统,每个文件和目录都归属于特定的用户(User)和用户组(Group)。为了控制谁可以对这些文件进行何种操作,系统引入了权限模型。
三类访问者
三种基本权限
- 对文件:允许修改内容(如
echo "text" > file)。
- 对文件:允许作为程序运行(如
./script.sh)。
“⚠️ 注意:对目录而言,执行权限(x)是进入目录的前提,即使有读权限但没有执行权限,也无法访问目录内的文件。
二、权限的表示方式
Linux 中权限有两种表示法:符号表示法 和 数字(八进制)表示法。
符号表示法(如 -rwxr-xr--)
使用 ls -l 命令可查看详细权限信息:
$ ls -l example.txt
-rw-r--r-- 1 alice dev 0 Feb 6 09:00 example.txt
解析第一列 -rw-r--r--:
- 第1位:文件类型(
- 表示普通文件,d 表示目录,l 表示链接等)。
数字(八进制)表示法
每种权限对应一个数值:
将每组权限相加,得到一个 0–7 的数字。例如:
因此,-rw-r--r-- 对应的数字权限为 644。
常见权限组合:
三、修改文件权限:chmod 命令
使用 chmod(change mode)命令修改权限。
数字方式
chmod 755 script.sh # 所有者:rwx,组和其他:r-x
chmod 644 document.txt # 所有者:rw-,组和其他:r--
符号方式
格式:chmod [who][operator][permission] file
who:u(用户)、g(组)、o(其他)、a(全部)operator:+(添加)、-(移除)、=(设置)
示例:
chmod u+x script.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户只有读权限
chmod a+x program # 所有人都可执行
四、修改文件所有者和所属组:chown 与 chgrp
chown(change owner)
chown alice file.txt # 更改所有者为 alice
chown alice:dev file.txt # 同时更改所有者和组
chown :dev file.txt # 仅更改组(保留原所有者)
“需要 root 权限或文件当前所有者才能操作。
chgrp(change group)
chgrp developers project/ # 更改目录所属组
五、特殊权限(进阶)
除了基本权限,Linux 还支持三种特殊权限:
SUID(Set User ID)— 作用于可执行文件
- 示例:
/usr/bin/passwd 允许普通用户修改 /etc/shadow。
chmod u+s program
# 权限变为:-rwsr-xr-x
SGID(Set Group ID)
- 作用于目录:在该目录下创建的新文件自动继承目录的组。
chmod g+s shared_dir/
# 目录权限:drwxrwsr-x
Sticky Bit(粘滞位)
- 作用于目录:只有文件所有者或 root 才能删除该目录下的文件。
chmod +t /shared/
# 权限变为:drwxrwxrwt
六、实用建议与最佳实践
- 普通文件通常设为
644(所有者可读写,其他人只读)。 - 敏感配置文件(如密码文件)应设为
600(仅所有者可读写)。 - 共享目录可配合 SGID + 775 使用,确保组内协作。
七、常见问题
文件默认的权限是什么?
在大多数情况下,新创建的文件的默认权限是由系统的 umask 值来决定的。umask 是一个权限掩码,用于确定新文件的默认权限。它指定了在创建文件或目录时从最大权限中减去的权限。通常,umask 的默认值是 022。
默认情况下,文件的权限通常是 666 减去 umask 值,目录的权限通常是 777 减去 umask 值。以默认的 umask 值 022 为例:
“这意味着新创建的文件将具有 -rw-r--r-- 的权限,新创建的目录将具有 drwxr-xr-x 的权限。 umask 值可以通过 umask 命令来查看或设置。
常见的目录和文件权限?
- 755 (rwxr-xr-x):这是最常见的文件夹权限设置。所有者具有读、写和执行权限,其他用户和组只有执行权限。这意味着所有者可以对文件夹进行创建、删除和读取操作,而其他用户和组只能进入该文件夹。
- 700 (rwx------):这种设置将文件夹的写和执行权限限制为所有者权限。只有所有者可以对文件夹进行任何操作,其他用户和组无法访问。
- 777 (rwxrwxrwx):这种设置允许所有用户具有对文件夹的完全访问权限,包括读、写和执行。这种权限设置通常在需要共享文件夹或者临时文件夹的情况下使用,但在安全性上存在风险。
- 644 (rw-r--r--):这是最常见的文件权限设置。所有者具有读和写权限,其他用户和组只有读权限。这意味着所有者可以编辑文件,其他用户和组只能读取文件内容。
- 600 (rw-------):这种设置将文件的写权限限制为所有者权限。只有所有者可以对文件进行任何操作,其他用户和组无法访问。
- 755 (rwxr-xr-x):有时可执行文件会被设置为755权限,这允许所有者执行文件,而其他用户和组只能读取和执行文件。
常见的修改目录和文件的权限?
# 普通文本文件(如 .txt, .conf),所有者可读写,其他人只读
chmod 644 config.txt
# 敏感配置文件(如数据库密码),仅所有者可读写,防止泄露
chmod 600 .env
# Shell 脚本 / 可执行程序,所有者可修改+执行,他人可读+执行
chmod 755 script.sh
# 仅自己使用,完全私有,他人无法访问
chmod 700 script.sh
# 快速添加执行权限,自动保留原有读写,加 x
chmod +x script.sh
# 递归给目录给权限
chmod -R 644 /opt/test