我正在尝试设置一种情况,我可以通过 FTP 连接到我的 Linux CentOS 7 服务器并从我的 Windows 7 系统更新网站文件。此时,我可以使用 vsftp (/home/robert) 通过 FTP 连接到我的用户文件夹,Apache 似乎适用于默认网站 (/var/www/html)。我为端口 8080 创建了一个虚拟主机,如果我将其指向 /var/www/8080/public_html,它可以正常工作,但只要我将其指向 /home/robert/public_html,它就会返回 403 Forbidden。您无权访问此服务器上的 /。apache 错误日志显示
[Wed Mar 18 16:12:27.546621 2015] [core:error]
[pid 21204] (13)Permission denied: [client 192.168.1.66:57090]
AH00035: access to / denied (filesystem path '/home/robert')
because search permissions are missing on a component of the path
Apache conf 文件 (/etc/httpd/conf/httpd.conf) 包含虚拟主机的此项
Listen 80
Listen 8080
# Virtual Hosts
<VirtualHost *:8080>
ServerName 192.168.1.10:8080
# DocumentRoot /var/www/8080/public_html
DocumentRoot /home/robert/public_html
</VirtualHost>
/home/robert/public_html/index.html 的权限如下
drwxr-xr-x. 7 root root 66 Mar 9 17:16 home
dr-x---r-x. 15 robert robert 4096 Mar 16 22:51 robert
drwxr-xr-x. 2 robert robert 23 Mar 17 23:28 public_html
-rwxr-xr-x. 1 robert robert 332 Mar 17 23:28 index.html
这似乎是一个权限问题,但我不清楚如何继续。我需要将 apache 用户添加到我的 robert 个人组吗?selinux 在这里做什么?任何帮助都将不胜感激。谢谢。
更新: 好吧,在我看来,所有网站都应该位于 /var/www/ 文件夹下。selinux 似乎希望如此。那么我如何远程 FTP 并访问(读/写)网站文件???假设我希望用户 robert 通过 FTP 访问 /var/www/testweb 并能够读/写那里的文件。如何实现???
更新:我查看了发布的答案并运行了以下三个命令
setsebool -P httpd_enable_homedirs on
setsebool -P ftp_home_dir on
restorecon -r -v /home
看起来它做了一些事情,但结果是一样的。我仍然可以通过 FTP 访问用户文件夹,但网站没有显示...403 错误。
更新:我也尝试运行以下命令,但它在所有文件上都出错了
我运行的命令
chcon -Rv --type=httpd_t /home/robert/public_html
我收到的错误
chcon: failed to change context of ‘index.html’ to ‘unconfined_u:object_r:httpd_t:s0’: Permission denied
我也使用 setenforce 0 关闭了 selinux,但仍然出现 403。希望得到建议...谢谢。
答案1
我想我明白了。Apache 正在运行,但在 selinux 仍在运行的情况下使 ftp 正常工作的最后一条命令是
setsebool -P ftpd_full_access on
一旦我设置了它,FTP 就可以正常工作了。所以现在我可以从我的 Windows 7 机器上使用 FTP,更新、发布更改我的网站文件,Apache 会愉快地提供内容。哇...花了好几天才解决。疯了。我设置了另一个用户只是为了测试,一切都很好。