cwd*_*cwd 43 linux security users php apache-httpd
我刚刚启动了一个 Ubuntu 11.10 盒子,然后跑去apt-get install apache2 php5
在盒子上安装 apache2 和 PHP 5。现在它作为一个“网络服务器”运行并加载“It Works!” 页。现在我正在努力加强安全性,我对 linux web 服务器有以下问题:
www-data
?对于以用户身份运行的 apache/php?我在检查默认设置时做了以下事情:
当我cd /
和做ls -al
的内容列表,我看到/var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Run Code Online (Sandbox Code Playgroud)
如果我cd
进入var
并且确实ls -al
看到:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Run Code Online (Sandbox Code Playgroud)
最后,在里面/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
Run Code Online (Sandbox Code Playgroud)
我的要点是,到目前为止,所有这些文件都属于root:root
,文件的权限为 644,目录的权限为 755。
如果我以 root 身份创建一个包含/var/www/test.php
内容的文件:
<?php echo shell_exec('whoami');
Run Code Online (Sandbox Code Playgroud)
并将该文件加载到它告诉我的浏览器中www-data
,这与/etc/apache2/envvars
文件中的相同:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Run Code Online (Sandbox Code Playgroud)
如果我这样做,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
Run Code Online (Sandbox Code Playgroud)
那么 apache 以谁的身份运行?看起来第一个进程root
可能是 as ,可能来自/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 系统上所有其他世界可读的文件。同样,如果盒子有多个用户,并且一个用户知道另一个用户的网络文件的路径,他/她就可以读取文件内容(并查看敏感内容,如数据库连接字符串等)。
我听说两个包,suphp
并且phpsuexec
该处理允许用户文件复制到共享系统上用餐‘为他们’。这样做的好处之一是它允许 Web 应用程序(如 Wordpress)创建和修改文件 - 对于添加主题、插件和升级软件非常有帮助。当然,手动执行这些操作可能更安全,但是可以使用上述包之一进行妥协吗?或者通过可能使用chown
使 wordpress 目录组属于www-data
并在组 ( g+s
)上设置粘滞位?
我只将这些作为网络托管公司的最终用户使用,所以我不知道它们的来龙去脉,也不知道它们是否可以合理地安装在小型系统上,或者是否还有其他一些我应该使用安全措施,但我想我会在这里提到它们,因为它们似乎是解决我的一些担忧的一种可能方法。
www-data
?对于以用户身份运行的 apache/php?小智 17
除非您希望 php 能够编辑该文件/文件夹的内容,否则不要将任何内容的所有权更改为 www-data
不管你做什么:文件夹需要读取和执行权限才能让用户找到文件;文件需要用户的读取权限才能读取它们。如果您在更改内容时遇到任何权限错误 - 您已经设法删除了这些从根本上需要的权限。
如果您没有通过 php 应用程序编写任何文件,您可以保留属于您的文件:您。在这种情况下,世界许可 (xx4/5) 是适用的。
如果您将文件归您所有:您的文件权限为 644(文件),这意味着只有您可以编辑网站文件 - www-data 不是您 - 因此它无法编辑文件。
如果您想限制对 apache + 您的访问并阻止所有其他访问chown -R you:www-data *
。文件权限为 640,文件夹权限为 750,您可以编辑,www-data 可以读取 - 因为然后 apache 读取组权限(x4/5x)。
限制到最低限度你允许的路径阿帕奇/ PHP写来-如果有一个TMP目录的应用程序需要写入-允许它写入仅该文件夹-和任何可写的位置,如果在所有可能确保它的外面的文档根目录或采取措施确保此可写路径不可通过网络访问。
需要注意的是“你”应该不会是根。允许直接ssh访问的根是其他安全漏洞(如一个指标不禁止密码登陆),但是这是一个一大堆本身就是问题。
小智 10
因此,如果我理解正确,如果 apache 作为 www-data 运行并且我希望 apache 能够读取目录,则需要为世界(其他)组(o+x)设置 x 位,并且需要在链(www,var)的所有父目录上设置。如果我希望 apache 能够读取文件,则需要设置 o+r 位。
这不是真的,您不必rwx
为“其他”设置。您应该更改要保护的特定文件夹/文件的所有者和/或组。例如:
chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com
Run Code Online (Sandbox Code Playgroud)
现在只有小组成员www-data
可以阅读/var/www/cwd.com
。并且只有您 (cwd) 可以写入它。如果您也想允许您的应用程序(通过 Apache)写入/修改该目录中的文件,请将其 chmod 为 770。
我认为这涵盖了您的所有问题,我认为没有理由更改运行 apache 的用户。
归档时间: |
|
查看次数: |
136169 次 |
最近记录: |