将 apache 文档根目录更改为 /

将 apache 文档根目录更改为 /

我知道这是您听过的最愚蠢的想法之一,但是我的客户作为其论文项目的一部分,他希望能够流式传输任何媒体,包括外部硬盘上的媒体。

代理是一种选择,但我们已经完成了脚本,他只是想将文档根目录更改为/毕竟这只是一个大学项目。

在 Windows 中,我们可以将文档根目录更改为 C:,并且它可以工作,但在 ubuntu 中,没有办法将其设置为,/那么如何让 apache 在所有机器上运行/

答案1

我知道这是您听过的最愚蠢的想法之一,但是我的客户。

这是。

而常规安装则无法做到这一点。Apache 需要以“root”身份运行,并且 Apache 具有内置安全检查。您将看到错误通知...

Apache 并非设计为以 root 身份运行时提供页面。已知存在竞争条件,允许任何本地用户读取系统上的任何文件。如果您仍希望以 root 身份提供页面,请将 -DBIG_SECURITY_HOLE 添加到 CFLAGS 环境变量,然后重建服务器。强烈建议您修改 httpd.conf 文件中的 User 指令以列出非 root 用户。

所以,要做你想做的事,你需要......

  1. 添加-DBIG_SECURITY_HOLECFLAGS环境变量。
  2. 重建 Apache 服务器。
  3. http.conf以 root 用户身份进行设置。

我将如何做到这一点留给你,并建议你忘记这件事,按预期使用普通(受限)用户并将文件存储在该用户拥有的子目录中。

答案2

FollowSymLinks您可以使用正确的文件权限来完成您想要的一些工作。

此方法只会创建指向您指定的数据的链接,它不会为您提供整个文件系统,除非您为每个路径创建符号链接,即使这样,您也可能会遇到特定系统路径的问题。

默认情况下,Apache2 已FollowSymLinks默认启用,因此不需要额外的 apache 配置。为了回答这个问题,我启动了一个 openstack 实例,并执行了以下步骤。

我要说的是,我本来以为在设置权限方面需要做更多工作,这实际上有点可怕。

也许 root 拥有正在运行的 apache2 实例可以使其工作?我不认为 www-data 默认可以访问 /home/ubuntu。奇怪。

ubuntu@test:/home/ubuntu# sudo su
root@test:/home/ubuntu# apt-get install apache2
root@test:/home/ubuntu# ps awux | grep apache2
root     30862  0.0  0.1  71300  2572 ?        Ss   12:17   0:00 /usr/sbin/apache2 -k start
www-data 30865  0.0  0.2 360464  4252 ?        Sl   12:17   0:00 /usr/sbin/apache2 -k start
www-data 30866  0.0  0.2 557344  5024 ?        Sl   12:17   0:00 /usr/sbin/apache2 -k start
root@test:/home/ubuntu# cd /var/www/html/
root@test:/var/www/html# ls
index.html
root@test:/var/www/html# ln -s /tmp tmp-symlink
index.html  tmp-symlink
root@test:/var/www/html# cd tmp-symlink
root@test:/var/www/html/tmp-symlink# ls
hsperfdata_ubuntu
root@test:/var/www/html# ln -s /home/ubuntu/ ubuntu-user
root@test:/var/www/html# cd /home/ubuntu/
root@test:/home/ubuntu# ls
file  test  test_directory  test.sh

tmp-symlink 截图


ubuntu 用户截图

答案3

首先,这是我的解决方案,它可以与 apache2-2.4.10 一起使用(因此,您必须用软件源中的版本替换它)。

apt-get -y install dpkg-dev debhelper libaprutil1-dev libapr1-dev libpcre3-dev liblua5.1-0-dev autotools-dev
apt-get source apache2.2-common
cd apache2-2.4.10
export DEB_CFLAGS_SET="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -DBIG_SECURITY_HOLE"
dpkg-buildpackage -b
cd ..
dpkg -i "name of the package apache2-bin* you generated with dpkg-buildpackage -b"
dpkg -i "name of the package apache2-common* you generated with dpkg-buildpackage -b"

然后修改 httpd.conf 或 /etc/apache2/envvars 文件以设置 root 而不是 www-data(您可以搜索 www-data 字符串并将其替换为 root)并重新启动 apache。

其次这里是解释:

  1. 安装依赖项以使用 dpkg-buildpackage 和 dpkg
  2. 从存储库获取源代码
  3. 修改了 dpkg-buildpackage 使用的环境变量 CFLAGS,并添加了 -DBIG_SECURITY_HOLE
  4. 导航到 apache 生成的目录并运行 dbkg-buildpackage 以使用修改后的 CFLAGS 重新编译包
  5. 返回父目录以使用生成的包
  6. 我安装了 apache2-bin 和 apache2-common 软件包

    sudo apt-get install apache2-bin apache2-common
    

相关内容