我已将我的 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