我知道这是您听过的最愚蠢的想法之一,但是我的客户作为其论文项目的一部分,他希望能够流式传输任何媒体,包括外部硬盘上的媒体。
代理是一种选择,但我们已经完成了脚本,他只是想将文档根目录更改为/
毕竟这只是一个大学项目。
在 Windows 中,我们可以将文档根目录更改为 C:,并且它可以工作,但在 ubuntu 中,没有办法将其设置为,/
那么如何让 apache 在所有机器上运行/
答案1
我知道这是您听过的最愚蠢的想法之一,但是我的客户。
这是。
而常规安装则无法做到这一点。Apache 需要以“root”身份运行,并且 Apache 具有内置安全检查。您将看到错误通知...
Apache 并非设计为以 root 身份运行时提供页面。已知存在竞争条件,允许任何本地用户读取系统上的任何文件。如果您仍希望以 root 身份提供页面,请将 -DBIG_SECURITY_HOLE 添加到 CFLAGS 环境变量,然后重建服务器。强烈建议您修改 httpd.conf 文件中的 User 指令以列出非 root 用户。
所以,要做你想做的事,你需要......
- 添加
-DBIG_SECURITY_HOLE
到CFLAGS
环境变量。 - 重建 Apache 服务器。
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
答案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。
其次这里是解释:
- 安装依赖项以使用 dpkg-buildpackage 和 dpkg
- 从存储库获取源代码
- 修改了 dpkg-buildpackage 使用的环境变量 CFLAGS,并添加了 -DBIG_SECURITY_HOLE
- 导航到 apache 生成的目录并运行 dbkg-buildpackage 以使用修改后的 CFLAGS 重新编译包
- 返回父目录以使用生成的包
我安装了 apache2-bin 和 apache2-common 软件包
sudo apt-get install apache2-bin apache2-common