使用符号链接从根外部访问路径

lin*_*pin 4 php symlink files apache-httpd

我需要为我的 apache 配置添加一个外部路径。(httpd)

所以,我在我的 httpd 根文件夹中做了一个指向这个路径的符号链接,路径是:/var/log/httpd/(我想直接在我的项目中显示日志)

我可以通过浏览器输入访问所有路径:http : //127.0.0.1/httpd/

但是当我尝试从 php 文件访问它时,php 抛出了一个错误:

代码:

function logInfo() {

$log_path = $_SERVER['DOCUMENT_ROOT'] . "/httpd/local.cmp-error_log";
$php_log = file_get_contents($log_path);

print_r ($php_log);

}
Run Code Online (Sandbox Code Playgroud)

错误:

[Sun Jul 17 23:45:19.960292 2016] [:error] [pid 19451] [client 127.0.0.1:34718] PHP Warning:  file_get_contents(/home/txx/http/www/httpd/local.cmp-error_log): failed to open stream: Operation not permitted in /home/txx/http/www/base_home/config/sys.php on line 8
Run Code Online (Sandbox Code Playgroud)

这里的错误在哪里?

Gil*_*il' 7

基本思想是您不能访问文档根目录之外的文件。这就是文档根的重点。有几种保护措施可以防止 Apache 遵循根目录之外的符号链接。您需要在包含链接的目录中启用FollowSymlinks,但如果您可以浏览文件,则表示这已经完成。

您还需要确保 PHP 不限于文档根目录。请参阅此堆栈溢出问题:检查php.ini不包含open_basedir设置。另一个潜在的限制是 SELinux,如果你的机器已经加固,那么 PHP 可能会被限制在一些预定义的目录中,特别是可能被禁止访问主目录。另请参阅访问文档根目录外的文件

如果您无法访问 web 根目录之外的内容,或者您​​不想过多地削弱系统的安全性,您可以将文件放在 web 根目录下,而不是让 Apache 和 PHP 寻找其他地方。to的绑定挂载挂载处创建目录的视图。您可以并且可能应该将视图设为只读。/var/log/httpd/var/www/dangerous/logs/var/log/httpd/var/www/dangerous/logs