我正在迁移到新的 Web 服务器,并且希望为 Apache 和我的 Web 应用程序提供一个干净、安全的文件架构。
该服务器将为一个 php/mysql 应用程序提供服务。此应用程序从 FTP 和 web 服务接收文件并生成日志文件。
服务器操作系统是CentOS 5.4。
默认的 Apache 文档根目录是/var/www/html
。
我应该把我的 Web 应用程序目录放在:
/var/www/html/myWebApp
?/www/myWebApp
?/home/www/myWebApp
?- 别的地方?
root
应用程序目录应该由用户或apache
用户或其他用户拥有吗?
感谢您的帮助。
答案1
假设您已启用 SELinux,由于 SELinux 拒绝 httpd 进程访问非标准文件夹,因此并非所有这些选项都能起作用。
IIRC,在 CentOS 上手动添加 Web 应用程序(例如 mediawiki 安装)的首选方法是将它们安装到/var/www/<myappname>
/etc/httpd/conf/httpd.conf 文件中并在指向您的应用程序的别名中创建别名(我通常将我的模式设置为类似于文件夹的现有别名/var/www/icons
)。
/var/www
CentOS 下任何文件的典型所有权是root
。
答案2
这完全取决于你,我个人会选择 CentOS 的默认设置文档根目录因为/var/www/html/myWebApp
它为未来的维护者等维护了一个干净、可扩展和明显的结构。
您可以自己拥有应用程序文件,但是它们应该由配置为运行 apache 的用户和组读取(但不拥有 - 除非应用程序必须覆盖/编辑它们)。这通常是nobody:nobody
- 并且该用户应该没有特权(即只能读取文档根目录中的文件,仅此而已)。
编辑:对于 SVN 签出,您可以保留 SVN 用户拥有的文件(SVN
或者root
我假设 - 只要它与运行 apache 的用户不同)并且权限应该是644 (-rw-r--r--)
- 我相信这是 SVN 默认使用的,如果不是在提交后挂钩中 chmod 目录。
...要确定您是否有 SELinux 问题,请尝试禁用它并重新测试。如果有效,收集日志和修改 HTTPD 策略(可能只是启用httpd_disable_trans
)。或者使用蛇类方法:)
答案3
(这应该是对 Ophidian 的评论,但是评论空间太大,所以我将其作为回复发布)
您可以在 selinux 下通过使用 chcon 来选择要使用的目录/文件以及适当的上下文/类型来完成此操作。
要找出正确的上下文,最简单的方法是检查已经正确标记的目录。例如
[root@somehost ~]# ls -ldZ /var/www/html drwxr-xr-x root root system_u:object_r:httpd_sys_content_t /var/www/html
然后在新的内容目录中设置正确的 se linux 类型。例如,如果您想使用 /home/myapp 作为文档根目录:chcon -t httpd_sys_content_t /home/myapp
chcon 只会持续到下一次文件系统重新标记。如果这样做,请不要忘记使用 semanage fcontext,这样新的上下文才能在文件系统重新标记后持续存在!
semanage fcontext -at httpd_sys_content_t /home/myapp