我一直试图在本地主机上将我的项目设置为符号链接/var/www/html
,我可以访问放置在其中的普通文件或目录html
,但是当我创建符号链接时some/other/path
,它给出 403 Forbidden 并error_log
说AH00037: Symbolic link not allowed or link target not accessible: /var/www/html/path/to/project
。
现在我在这里和其他 StackExchange 网站上进行了相当广泛的搜索,但没有答案。我读到了关于httpd.conf
Directory
标签的信息Indexes FollowSymlinks
,我也有我的默认配置/var/www/html
。我还更新了权限并尝试使用root
,apache
和我自己user
作为符号链接所有者和实际目录或文件所有者,但似乎没有任何效果。
我还在.htaccess
我的实际项目目录中放置了一个文件,其中包含此文件
Options Indexes
我不明白是否有必要,这只是我尝试过的解决方案的一部分。
如果我需要做任何其他选项,请告诉我,因为我认为这可能会被标记为重复,但我已经搜索了这个问题的答案并遵循了不同的建议。
谢谢
系统
我有 Fedora 32,默认 apache httpd 作为服务运行
编辑:
正如评论中提到的,我应该检查 SELinux,我将其设置为宽容的模式,但没有改变任何内容,仍然是 403 Forbidden。
答案1
好的,感谢所有发表评论并帮助我找到答案的人,首先要检查的是确保所有目录都已x
从您指向符号链接的位置执行位,就像我有这个结构
/var/www/html/project -> /home/user/Documents/project
一样当您这样做时,没有获得/home/user
对其他人执行的权限
ls -l /home
你的输出应该是
drwx--x--x. user user 4.0K user
对于所有目录一直到您正在符号链接的目录都是如此/var/www/html
。
检查权限并httpd.conf
检查您是否正在使用后SELinux及其启用于执行模式。
sestatus
这将告诉您 SELinux 是否正在运行以及处于哪种模式
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 32
这是我的机器上的状态,如果未安装,也许无法找到命令?
那么主要是 SELinux 问题。一旦您设置了正确的权限,您将收到有关本地主机请求的警报,表明有人正在访问他们不应该访问的内容,然后您应该应用所需的任何策略,对我来说,我必须允许从目录httpd
中读取。project
我从那里得到了解决方案这里。但它用于创建文件,因此我通过首先检查应用的内容来修改/var/www/html
命令
ls -lZ /var/www
drwxr-xr-x. 3 root root system_u:object_r:httpd_sys_content_t:s0 00:00 html
所以httpd_sys_content_t
你的目录中需要这个。
sudo semanage fcontext -a -t httpd_sys_content_t "/home/user/Documents/project(/.*)?"
(/.*)?
意味着此路径之后的任何内容也应应用此标签。
之后我将新配置应用到 SELinux
sudo restorecon -R project/
然后检查它
ls -lZ /var/www/html/project/
total 4
-rwxr-xr-x. 1 user user unconfined_u:object_r:httpd_sys_content_t:s0 35 00:00 index.php
您会看到更改已得到反映,现在如果您提出请求,它应该会给您回复。
希望这对将来的人有所帮助,如果我再次偶然发现这一点,这应该会指导我采取步骤。
感谢所有为此做出贡献的人。