Apache2权限问题

Apache2权限问题

我已将我的 DocumentRoot 更改为/home/user/www.为了实现这一点,我刚刚更改了 /etc/apache2/sites-available/default 中路径的两次出现。

/home/user/www 的权限是 0774。我已将 www-data 用户添加到我的用户组中,其所有者/home/user/www是我自己的用户和组(user:user)。

我已经这样做了:

sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user

问题是 Apache 无法写入该目录。仅当我将 www-data 设置为所有者时它才可以写入,但如果我这样做,我将无法在该目录中写入。

我已经测试了权限:

sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file

它有效。

但是我的Wordpress 无法www删除或创建文件。有任何想法吗?

答案1

您最好将 www 目录放在 /var/www 中,其中包含所有者 www-data 和组 www-data,并且将您的用户添加到 www-data 组

首先,在 apache 配置中将 DocumentRoot 等更改回 /var/www 。

/var/www 目录(及其中的所有子目录)应设置 gid,以便使用组 www-data 创建文件和目录。

以下所有命令都应以 root 身份运行,或使用 sudo 运行:

mkdir -p /var/www

如果 /home/user/www 中有任何您想要保留的文件,请立即将它们移动到 /var/www :

mv /home/user/www/* /var/www/

现在修复 /var/www 目录的权限和所有权。

chown -R www-data:www-data /var/www
chmod -R 775 /var/www
find /var/www -type d -print0 | xargs -0r chmod g+s
adduser user www-data

下次“用户”登录(或运行newgrp www-data)时,他们应该在 /var/www 中具有写入权限

顺便说一句,如果您想让“用户”轻松找到网络文件,只需在其主目录中创建一个符号链接即可:

 ln -s /var/www/ /home/user/

答案2

对于读/写访问,对父目录(在您的情况下为 /home/user )具有执行权限也很重要。查看回答。

您正在使用 /home/user/www 的根目录(属于用户的主目录和主目录在创建时默认为 700 权限。例如,尝试在其他地方创建 apache 的根目录。/apache/www

答案3

如果您的发行版使用 SELinux 或 App Armor 之类的东西,那么您可能需要授予对 Apache 进程的访问权限,以便“允许”它访问主目录区域。

SELinux 布尔值

httpd您可以使用此命令查看与(Apache)相关的布尔值列表。

$/usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on

需要启用此布尔值:

httpd_enable_homedirs --> on

上下文标签

此外,您需要向每个目录添加一个 SELinux 上下文(标签),这实际上告诉 SELinux 该目录或文件允许由与该标签关联的任何服务/守护程序访问。 Apache (httpd) 使用此标签:

httpd_sys_content_t:s0

因此,您需要运行此命令,chcon将该标签添加到 /home 下的文件/目录中。仅将标签添加到 Apache 从中提供文件的目录。

$ chcon -R -t httpd_sys_content_t /home/user/www

您可以使用-Z切换到 来确认这是否有效ls,它会显示上下文标签。

$ ls -Z /var/www/manual/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 mod

参考

相关内容