本文目录导读:

在 Linux 系统中,目录权限的设置主要通过 chmod 命令来完成,有时也会用到 chown(更改所有者),目录的权限与文件权限逻辑相同,但执行(x)权限的含义对目录来说非常关键。
下面详细介绍目录权限的设置方法,包括符号模式和数字模式。
核心概念:目录权限的三个维度
- r(读,4):允许列出目录中的内容(执行
ls命令),但如果没有x权限,你无法进入目录,只能看到文件名,无法访问文件的属性或内容。 - w(写,2):允许在目录中创建、删除或重命名文件或子目录,即使你对该文件没有写权限,只要你对目录有写权限,也可以删除它。
- x(执行,1):(最关键) 允许进入该目录(执行
cd命令),并使用其中的文件或子目录,如果你对一个目录有r但没有x,你实际上无法进入它,也无法访问里面的任何内容。
简单记忆:
- 要能进入一个目录,至少需要
x权限。 - 要能列出,需要
r+x权限。 - 要能创建/删除文件,需要
w+x权限。
设置目录权限的命令
chmod:改变权限
这是最常用的命令,有三种用户类型:
u:所有者(user)g:所属组(group)o:其他用户(others)a:所有人(all)
符号模式(更直观)
-
语法:
chmod [who][+/-/=][permissions] 目录名- 添加权限
- 移除权限
- 设置精确权限(覆盖原有)
-
示例:
chmod u+x mydir:给所有者添加进入(执行)权限。chmod g+w mydir:给所属组添加写入权限。chmod o-rx mydir:移除其他用户的读取和执行权限。chmod a=rx mydir:给所有人设置精确权限(读取和执行),移除所有其他权限。
数字模式(更快捷)
权限用三位八进制数表示,每位对应一种用户(所有者、组、其他)。
-
计算规则:
r=4, w=2, x=1 -
关键组合:
7=r(4) +w(2) +x(1) = 完全控制6=r(4) +w(2) = 读取+写入(但不能进入)5=r(4) +x(1) = 只读+进入4=r(4) = 只读(不能进入)0= 无权限
-
示例:
chmod 755 mydir:所有者(7)完全控制;组(5)读+进入;其他(5)读+进入,这是安全且常用的目录权限。chmod 700 mydir:只有所有者有完全权限,其他人无任何权限,适用于私人目录(如.ssh)。chmod 775 mydir:所有者和组完全控制,其他人只读可进入,适用于团队协作目录。
递归设置权限(-R)
当需要修改目录及其内部所有内容的权限时,使用 -R 参数。
- 示例:
chmod -R 755 mydir:将mydir及其内部所有文件和子目录都设为755。chmod -R u+x mydir:递归地为mydir及其下所有内容添加所有者的执行权限。
⚠️ 安全提醒:对目录和文件使用相同的递归权限通常不正确,文件通常不需要 x 权限(除非是可执行文件或脚本),正确做法是分开设置:
# 先设置目录权限为755(读+写+执行给所有者,读+执行给其他人)
find mydir -type d -exec chmod 755 {} \;
# 再设置文件权限为644(所有者读写,其他人只读)
find mydir -type f -exec chmod 644 {} \;
默认权限:umask
umask 命令决定了新建目录和文件的默认权限,它不是直接设置,而是屏蔽某些权限。
-
目录默认权限:
777(rwxrwxrwx)减去 umask 值。 -
文件默认权限:
666(rw-rw-rw-)减去 umask 值(通常文件不会默认加执行权限)。 -
常用 umask 值:
022:目录创建为755,文件创建为644(常用)002:目录创建为775,文件创建为664(团队协作常用)077:目录创建为700,文件创建为600(私有)
-
设置方法(在 Shell 配置文件中,如
~/.bashrc):umask 022
实际操作场景
场景1:创建一个网站目录,允许所有人查看,但只有你能修改
mkdir /var/www/mysite chown root:www-data /var/www/mysite # 所有权给root,组给www-data chmod 755 /var/www/mysite # 所有者完全控制;组和其他人只读+可进入
场景2:创建一个私人目录,只有你自己能访问(非常安全)
mkdir ~/.ssh chmod 700 ~/.ssh # 只有所有者(你)能读、写、进入
场景3:创建一个团队项目目录,组内成员可以读写,其他人不能访问
mkdir /var/projects/team_project chown root:developers /var/projects/team_project # 组改为 developers chmod 770 /var/projects/team_project # 所有者和组完全控制;其他人无权限
常用设置组合速查表
| 数字权限 | 符号权限 | 所有者权限 | 组权限 | 其他用户权限 | 常见用途 |
|---|---|---|---|---|---|
755 |
rwxr-xr-x |
读写+执行 | 读+执行 | 读+执行 | 最常用:网站目录、共享目录 |
700 |
rwx------ |
读写+执行 | 无 | 无 | 私人目录(如 SSH 密钥、密码文件) |
770 |
rwxrwx--- |
读写+执行 | 读写+执行 | 无 | 团队项目:组内完全控制,外人无法访问 |
750 |
rwxr-x--- |
读写+执行 | 读+执行 | 无 | 敏感共享:所有者完全控制,组内只读可进入 |
777 |
rwxrwxrwx |
完全控制 | 完全控制 | 完全控制 | ⚠️ 极度不安全:通常不应使用 |
- 对目录有用的权限:主要考虑
r、w、x的组合,x是进入目录的必要条件。 - 常用安全值:
755(公开共享),700(私有),770(团队)。 - 递归设置要小心:对目录用
755,对文件用644,除非特殊情况。 - 使用
umask控制新建目录和文件的默认权限,避免产生过于开放的权限(如777)。 - 永远不要使用
777:除非你完全清楚自己在做什么,并且存在临时需要。
如果你能告诉我你具体想要实现什么效果(让某个用户能读但另一个用户能写?或者想给 Apache/Nginx 之类特定服务读写权限?),我可以给出更针对性的命令示例。
标签: 目录权限