WordPress文件权限问题

Clloz · · 1,202次浏览 ·

前言

我们有时候在更新 WordPress 的时候会发现一些权限问题的报错,WordPress 告诉我们它没有写入一些文件的或文件夹的权限,本文总结一下原因和解决办法。

原因

我的WordPress网站的运行环境是自己手动搭建的 lamp 环境,在管理 WordPress 时经常遇到因没有足够的权限而无法执行某些操作。在 linux 上的权限不足的问题无外乎有两个原因,一个是 WordPress 文件所使用的用户没有对该文件或目录拥有读、写、执行的权限,另一个就是程序运行时所使用的用户对该文件或目录没有足够的权限。而我的 WordPress 的文件或目录的权限设置是没有问题的,所以,造成这种问题的原因是在Apache对 WordPress 文件或目录操作时所使用的用户没有对 WordPress 文件或目录拥有足够的权限。

ls -l 各字段含义

我们用 ls -l 查看当前文件夹中的文件和目录的权限时,一般会有如下字段:

total 348
drwxr-xr-x  9 apache root  4096 Jun  2 17:56 wp-content
#...

total

total 后面的数字是指当前目录下所有文件所占用的空间总和(以 K 为单位)。可以使用 ls –lh 查看。

文件属性字段

最前面的 drwxrwxrwx(中间有些是 -)是文件属性字段,由十个字母组成。

介绍文件类型之前先介绍一下链接文件。链接文件的概念类似于 windows 里的快捷方式。多个链接文件同时指向一个源文件。链接文件分为硬链接 Hard link 或符号链接(软链接、Symbolic link)两种。

Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号 inode 。软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和 Windows 下的快捷方式类似)。软连接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用(cat 那个软链接文件,则提示 没有该文件或目录

硬连接是不会建立 inode 的,他只是在文件原来的 inode link count 域再增加 1 而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个 inode,当然 inode 的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除源文件的时候,系统调用会检查 inode link count 的数值,如果他大于等于 1,那么 inode 不会被回收,因此文件的内容不会被删除,相当于删除了一个索引。

硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过 ls -i 来查看一下,这两个文件的 inode 号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。

软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名( filename )进行链接(此时如果你 vi 这个软链接文件,Linux 会自动新建一个文件名为 filename 的文件),硬链接不可以(其文件必须存在,inode 必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。

第一个字符表示文件的类型,有以下几种类型。
1. d 表示目录 directory
2. - 表示普通文件
3. l 表示链接文件
4. b 表示块设备文件(block),一般置于 /dev 目录下,设备文件是普通文件和程序访问硬件设备的入口,是很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通常一个数据块的大小为 512 字节)
5. c 表示字符设备文件(character),一般置于 /dev 目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节。
6. p 表示命令管道文件。与 shell 编程有关的文件。
7. “ 表示 sock 文件。与 shell 编程有关的文件。

后面的九个字符时三组重复的 rwxr 表示 readw 表示 writex 表示 execute。第一组表示文件拥有者的权限,第二组表示文件拥有者所属组 group 的权限,第三组表示其他用户的权限。

文件硬链接数

第二个字段是一个数字,如果该文件不是一个目录则这个数字表示文件的硬链接数。查找一个文件的硬链接文件的位置可以用 ls -i 查看他的文件节点号,再用 find 命令查找。

如果对应的文件是一个目录,那么这个数字表示目录下的子目录数。注意 .(指向目录本身)和 .. (指向上级目录)也算是子目录,所以一个空文件夹的子目录数默认是 2

文件(目录)拥有者

该字段表示此文件是属于哪个用户。linux 类系统都是多用户系统,每个文件都有它的拥有者。只有文件的拥有者才具有改动文件属性的权利。当然, root 用户具有改动任何文件属性的权利。对于一个目录来说,只有拥有该目录的用户,或者具有写权限的用户才有在目录下创建文件的权利。

如果某一个用户因为某种原因,被删除,而该用户的文件还存在,那么用ls -l 查看该文件将显示一个代表用户存在前 ID 号的数字。因为文件系统对每个文件记录文件所有者的 ID,而非用户名。

文件(目录)拥有者所在的组

一个用户可以加入很多个组,但是其中有一个是主组,就是显示在第 4 字段的名称。可以在 useradd 的时候用 -g 指定该用户所在的主组:useradd –g 组名 用户名文件夹也是一个特殊的文件

文件所占用的空间(以字节为单位)

第5字段表示文件大小,如果是一个文件夹(目录),则表示该文件夹的大小。请注意是文件夹本身的大小,而不是文件夹以及它下面的文件的总大小。

文件(目录)最近访问(修改)时间

文件创建的时间可以通过 touch 命令来修改,另外,一个文件还有最后访问时间,最后修改时间等属性。这些属性可以用 ls 的其它参数显示出来。

文件名

如果是一个符号链接,那么会有一个 -> 箭头符号,后面根一个它指向的文件名。

修改 WordPress 目录权限

通过上面的内容我们已经知道,只要修改 WordPress 文件夹的权限和用户就可以解决访问权限的问题(我的用户和组默认是 root 修改为 apache 即可)。共有三种方法

# 方法一
# 设置apache配置文件httpd.conf中的User和Group为apache
vim /etc/httpd/conf/httpd.conf

# 修改WordPress对应目录下文件权限 /var/www/html为wordpress安装目录
chown -R apache:apache /var/www/html/*

# 方法二
# 将apache所使用的用户加入到wordpress文件或目录所属的用户组中
usermod -aG 123 apache(123为wordpress文件所属的用户组)

# 方法三
# 修改apache的配置文件,将User和Group选项修改为wordpress所使用的用户和用户组。
vim /etc/httpd/conf/httpd.conf

参考文章

  1. 解决在管理wordpress时权限不足的问题
  2. linux ls -l 各个字段的含义

Clloz

人生をやり直す

发表评论

电子邮件地址不会被公开。 必填项已用*标注

我不是机器人*

 

00:00/00:00