ls -ld
这是最常用、最直接的方法,用于查看单个目录本身的权限信息。

(图片来源网络,侵删)
基本用法
ls -ld /path/to/your/website
示例:
假设你的网站根目录是 /var/www/html,你可以这样查看:
ls -ld /var/www/html
输出示例:
drwxr-xr-x 7 root root 4096 May 20 10:30 /var/www/html
输出详解
我们来分解这行输出的每一部分:

(图片来源网络,侵删)
| 字段 | 示例值 | 含义解释 |
|---|---|---|
| 权限位 | drwxr-xr-x |
这是最核心的部分,由10个字符组成。 |
| 链接数 | 7 |
指向此目录的硬链接数量,目录的链接数至少为2(自身和 ),子目录数会增加这个值。 |
| 所有者 | root |
拥有此目录的用户(User)。 |
| 所属组 | root |
拥有此目录的用户组(Group)。 |
| 大小 | 4096 |
目录本身的大小(以字节为单位),通常为4KB。 |
| 修改日期 | May 20 10:30 |
最后一次被修改的日期和时间。 |
| 目录路径 | /var/www/html |
当前查看的目录的完整路径。 |
深入解析 drwxr-xr-x (权限位):
这10个字符分为4组:
-
第1位:文件类型
d: Directory (目录)- 普通文件
l: 符号链接
-
第2-4位:所有者权限
(图片来源网络,侵删)- 代表
root用户的权限。 r: Read (读) - 可以列出目录中的内容 (ls /var/www/html)。w: Write (写) - 可以在目录中创建、删除、重命名文件或子目录。x: eXecute (执行) - 可以进入该目录 (cd /var/www/html)。对于目录来说,x 权限至关重要,没有它就无法访问目录内的任何内容。- 在我们的例子中,
rwx表示root用户拥有读、写、执行权限。
- 代表
-
第5-7位:所属组权限
- 代表
root用户组的权限。 r-x: 组内用户有读和执行权限,但没有写权限。
- 代表
-
第8-10位:其他用户权限
- 代表系统中除所有者和所属组之外的其他所有用户的权限。
r-x: 其他用户也有读和执行权限,但没有写权限。
进阶用法:递归查看目录树
如果你想查看网站目录及其所有子目录和文件的权限,可以使用 find 命令。
查看目录结构及权限(树状显示)
# -type d 只显示目录 # -ls 以长格式列出每个目录的详细信息 find /var/www/html -type d -ls
查找权限有问题的目录或文件(实战应用)
网站目录需要被 Web 服务器(如 Nginx, Apache)的用户(如 nginx, apache)读取和执行,有时也需要写入权限(例如上传目录)。
场景1:查找所有属于 root 用户的文件或目录(不推荐)
Web 服务器进程通常不能以 root 身份运行,所以如果文件或目录属于 root,Web 服务器可能无法访问它们。
# -user root 查找所有者为 root 的项 # -ls 详细列出 find /var/www/html -user root -ls
场景2:查找没有执行权限的目录(会导致 403 Forbidden)
目录没有 x 权限,会导致访问时出现 "403 Forbidden" 错误。
# ! -perm -mode 查找不包含特定权限模式的文件 # /111 是八进制表示法,代表 (r=4, w=2, x=1),111 代表 ugo=x (所有用户都有执行权限) # 这条命令会查找所有用户都没有执行权限的目录 find /var/www/html -type d ! -perm -111 -ls
场景3:查找没有写权限的目录(可能导致无法上传)
如果你需要允许 Web 服务器写入某个目录(例如上传目录),你需要确保它有 w 权限。
# -perm /222 查找组或其他用户中有写权限的文件/目录 # 这条命令可以帮你确认哪些目录是可写的 find /var/www/html -type d -perm /222 -ls
查看文件所有者和组
有时权限没问题,但所有者或组不正确,Web 服务器进程(如 nginx)通常以 nginx 用户运行,它需要能读取网站文件。
# 查看目录下所有文件和目录的所有者和组 ls -l /var/www/html
输出示例:
total 12
-rw-r--r-- 1 root root 1234 May 20 10:30 index.html
drwxr-xr-x 2 nginx nginx 4096 May 20 10:31 uploads
从上面的输出可以看出:
index.html文件属于root用户,Web 服务器是nginx,它可能无法修改这个文件。uploads目录属于nginx用户,这是正确的配置,允许 Web 服务器向其中写入文件。
修改权限和所有者(chmod 和 chown)
查看权限的最终目的是为了修正它。
使用 chmod 修改权限
八进制表示法(推荐)
7=rwx(4+2+1)6=rw-(4+2)5=r-x(4+1)4=r--(4)0= (无权限)
常见的安全设置:
- 网站根目录:通常设置为
755,所有者可读写执行,组和其他用户只读和执行。chmod 755 /var/www/html
- 静态文件(如 HTML, CSS, JS, 图片):通常设置为
644,所有者可读写,组和其他用户只读。# -R 表示递归修改,即修改目录及其下所有文件和子目录 chmod -R 644 /var/www/html/css chmod -R 644 /var/www/html/js chmod -R 644 /var/www/html/images
- 需要写入的目录(如上传目录
uploads):通常设置为755或775(如果希望某个特定用户组可以写入)。chmod 755 /var/www/html/uploads
符号表示法
u: user (所有者)g: group (所属组)o: other (其他用户)a: all (所有用户)- 添加权限
- 移除权限
- 设置权限
示例:
# 给所有用户添加执行权限 chmod a+x /var/www/html # 移除其他用户的写权限 chmod o-w /var/www/html/uploads
使用 chown 修改所有者和所属组
这是最关键的一步,你需要将网站目录的所有者和组修改为 Web 服务器运行的用户和组。
在 CentOS 7/8 上,Nginx 的默认用户是 nginx,Apache 的默认用户是 apache。
修改所有者和所属组:
# -R 表示递归修改 # 格式: chown [所有者]:[所属组] [目录路径] chown -R nginx:nginx /var/www/html
只修改所有者:
chown -R nginx /var/www/html
只修改所属组:
chown -R :nginx /var/www/html
总结与最佳实践
- 查看根目录权限:
ls -ld /var/www/html,通常应为755,所有者为root或 `
