我只是旋转了一个Ubuntu 11.10盒子,然后跑去apt-get install apache2 php5
在盒子上安装apache2和PHP 5。现在它正在充当“ Web服务器”,并加载“ It Works!”。页。现在,我正在尝试加强安全性,并且我对linux Web服务器存在以下问题:
- apache应该以谁的身份运行?
- 该用户应属于哪个组?
- 哪些软件包可以使PHP(和Apache?)作为文件的所有者运行?(例如在共享的虚拟主机上)我应该使用这些软件包吗?在小型系统上维护是否容易/可行?
- 使用apache运行时向网络提供文件和文件夹的默认权限应该是什么
www-data
?对于以用户身份运行的apache / php?
在检查默认设置时,我已经做了以下事情:
档案结构
当我cd /
和做ls -al
的内容列表,我看到/var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
如果我cd
进入var
并ls -al
看到:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
最后,在内部/var/www
看到:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
我的主要要点是,到目前为止,所有这些文件都属于root:root
,文件的权限为644,目录的权限为755。
Apache的权限
如果我/var/www/test.php
以内容为根创建文件:
<?php echo shell_exec('whoami');
并将该文件加载到告诉我的浏览器www-data
中,与/etc/apache2/envvars
文件中的相同:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
如果我ps aux | grep -i apache
看到了以下内容:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
那么,Apache是谁呢?似乎第一个过程是root
,可能/etc/init.d/apache
是系统启动时从脚本中获得的,其他过程是从第一个过程中www-data
产生的。那是对的吗?
接下来,如果我键入,groups www-data
那么我会看到www-data : www-data
-因此它看起来只属于该www-data
组。我猜这也是标准做法。
共享主机和安全性
因此,如果我理解正确,如果apache运行为www-data
并且我希望apache能够读取目录,则x
需要为世界(其他)组(o+x
)设置该位,并且还需要在所有父级上设置该位目录一路上扬链(www
,var
)。如果我希望apache能够从文件中读取,则o+r
需要设置该位。
不幸的是,我相信这会在同一Linux机器上为多个应用程序和/或多个用户引入安全漏洞:所有Web文件都必须是世界可读的,因此其他应用程序和系统上的其他用户也可以访问它们。如果系统上安装的一个应用程序具有一个安全漏洞,该漏洞允许未经验证的原始用户输入(然后由PHP执行),则远程攻击者可以浏览Web系统上所有其他可读的文件。同样,如果该框中有多个用户,并且一个用户知道另一个用户的Web文件的路径,则他/她可以读取文件内容(并查看诸如数据库连接字符串之类的敏感内容)。
我听说两个包,suphp
并且phpsuexec
该处理允许用户文件复制到共享系统上用餐‘为他们’。优点之一是它允许Web应用程序(如Wordpress)创建和修改文件-对于添加主题,插件和升级软件非常有用。当然,手动执行这些操作可能更安全,但是是否可以通过上述软件包之一妥协?还是通过可能chown
使wordpress目录组属于www-data
并在组(g+s
)上设置粘性位?
我只是将它们用作网络托管公司的最终用户,所以我不知道它们的来龙去脉,以及它们是否合理地安装在小型系统上,或者是否还有其他用途我应该改用安全措施,但是我想在这里提及它们,因为它们似乎是解决我的一些担忧的一种可能方法。
回到问题
- apache应该以谁的身份运行?
- 该用户应属于哪个组?
- 哪些软件包可以使PHP(和Apache?)作为文件的所有者运行?(例如在共享的虚拟主机上)我应该使用这些软件包吗?在小型系统上维护是否容易/可行?
- 使用apache运行时向网络提供文件和文件夹的默认权限应该是什么
www-data
?对于以用户身份运行的apache / php?