ls -ld

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

centos 查看网站目录权限
(图片来源网络,侵删)

基本用法

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

输出详解

我们来分解这行输出的每一部分:

centos 查看网站目录权限
(图片来源网络,侵删)
字段 示例值 含义解释
权限位 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. 第1位:文件类型

    • d: Directory (目录)
    • 普通文件
    • l: 符号链接
  2. 第2-4位:所有者权限

    centos 查看网站目录权限
    (图片来源网络,侵删)
    • 代表 root 用户的权限。
    • r: Read (读) - 可以列出目录中的内容 (ls /var/www/html)。
    • w: Write (写) - 可以在目录中创建、删除、重命名文件或子目录。
    • x: eXecute (执行) - 可以进入该目录 (cd /var/www/html)。对于目录来说,x 权限至关重要,没有它就无法访问目录内的任何内容。
    • 在我们的例子中,rwx 表示 root 用户拥有读、写、执行权限。
  3. 第5-7位:所属组权限

    • 代表 root 用户组的权限。
    • r-x: 组内用户有读和执行权限,但没有写权限。
  4. 第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 服务器向其中写入文件。

修改权限和所有者(chmodchown

查看权限的最终目的是为了修正它。

使用 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:通常设置为 755775(如果希望某个特定用户组可以写入)。
    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

总结与最佳实践

  1. 查看根目录权限ls -ld /var/www/html,通常应为 755,所有者为 root 或 `