当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 实例:保障UbuntuApacheWeb服务器安全

Linux服务器
linux下用cron定时执行任务的方法
.htaccess绑定域名到子目录的方法
linux apache下虚拟主机配置方法
apache 局域网访问配置方案
linux Apache服务器系统安全设置与优化
linux中mac地址绑定方法
linux托盘不断闪烁之解决方法
Apache配置 虚拟转向实例
Apache No space left on device的解决办法
Apache rewrite的重写相关的参数说明
LINUX入门级常用命令20条整理
Ubuntu设置开机自动挂载所有格式硬盘分区
5个可能被你忽略的Linux安全设置方法
学习Apache的mod rewrite、access写法
改版时保留原链接,创建新的URL的方法
rsync中文手册之使用rsync实现网站镜像和备份linux
rsync 数据同步使用详解
linux URL的301重定向代码分析
eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
Apache服务器二级域名的完美实现

Linux服务器 中的 实例:保障UbuntuApacheWeb服务器安全


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 95 ::
收藏到网摘: n/a

在一个Linux发行版本上设置一个Web服务器是一个很快的过程,不过要让这种设置成为一种安全的过程可能就需要花点儿工夫。本文将向你展示如何有效地使用访问控制和身份验证策略,使你的ApacheWeb服务器更安全。下面所有的例子都假定你用的是Ubuntu7.10,并对Apache进行了基本的配置。不过,这些例子将帮助任何一位运行Apache服务器的用户获得更大的安全性,因为其要领仍然适用于其它Linux系统。本文中所涉及到的方法应当首先在一台测试服务器上进行试验,在成功之后才能迁移到一个实际使用的Web服务器上。

  一、文件许可和访问控制

1.用户和组

首先要保障的是Apache不要以root身份运行,因为如果Apache被攻破的话,那么攻击者就可以控制root账户。下面让我们看一下Apache正以何种用户和组的身份运行:

运行下面的命令:

#psauwwfx|grepapachewww-data256750.00.010348508?SJan210:00\_/usr/sbin/apache2-kstart
www-data256860.00.22318162208?SlJan210:00\_/usr/sbin/apache2-kstart
www-data256880.00.22318162200?SlJan210:00\_/usr/sbin/apache2-kstart

可以看出,www-data是运行Apache的用户。不过,我们需要编辑Apache的配置并创建一个新用户和组:

#groupaddwww-data
#useradd-gwww-datawww-data
#vi/etc/apache2/apache2.conf

将UserrootGrouproot改为:

Userwww-dataGroupwww-data

然后重新加载以使改变生效:

#/etc/init.d/apache2reload

2.服务文件准许

一个最易被忽视的安全问题是如何正确地使用chmod命令。例如,我们在Apache的htmlroot目录中创建了一个index.cgi文件,不过在浏览器中打开这个文件时却被告知拒绝访问。为了让我们的index.cgi文件正常工作,我们执行一个chomod777index.cgi。在我们如此试验时,每一个Apache管理员都在考虑这样安全吗?答案是否定的。不过,如何使这种许可足够安全并能允许index.cgi脚本正常运行呢?

Apache需要得到准许来访问index.cgi文件。不过,我们不希望人人都能读写index.cgi。这个文件的所有者应当拥有读写这个文件的许可。为此我们需要下面的命令:

#chmod755index.cgi

将下面的一行加入到你的Apache.conf文件中是很重要的:

OptionsFollowSymLinksAllowOverrideNone

注意:

1、上面的命令行防止Apache访问root之外的文件。

2、有一些Linux发行版本比其它版本拥有更好的安全性。EnGardeSecureLinux就是一个很好的例子,因为它默认情况下就在其Apache配置文件中包含了上面的代码行。

我们并不想让用户在文件系统上的任何地方运行CGI脚本,不过我们确实需要它们在root中运行。对这个问题的解决办法是“OptionsExecCGI”指令。

例如,将下面的行添加到/etc/apache2/apache2.conf文件中:

AllowOverrideNoneOptionsExecCGIOrderallow,denyAllowfromall

重新加载Apache:

#/etc/init.d/apache2reload

那么,如果你拥有只应当被某个网络或IP地址访问的资源怎么办?对这个问题的解决办法是使用我们的Apache配置来为你增强安全性:

先说一个只允许访问192.168.0.0网络的例子,需要改变/etc/apache2/apache2.conf文件中以下的一行:

AllowOverrideNoneOptionsExecCGIOrderallow,denyAllowfromall

 将其改为:

AllowOverrideNoneOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16

然后重新加载以使更改生效:

#/etc/init.d/apache2reload

现在只有你内部网络上的用户能够在/home/username/public_html/cgi-bin中运行CGI脚本。

二、身份验证

我们怎样才能仅允许那些拥有正确口令和用户名的用户访问部分webroot呢?下面的步骤将向你展示如何安全地做到这一点:

1.基本验证

允许.htaccess:

#vi/etc/apache2/apache2.conf

将AllowOverideNone改为AllowOverideAuthConfig

重新加载以使改变生效:

#sudo/etc/init.d/apache2reload

创建一个口令文件:

#mkdir/var/www/misc
#chmoda+rx/var/www/misc
#cd/var/www/misc
#htpasswd-bcprivate.passwordsusernamepasswordAddingpasswordforuserusername

创建.htaccess

#cd/home/username/public_html/cgi-bin#vi.htaccess

在.htaccess中增加下面的命令:

AuthNameMyPrivateArea"AuthTypeBasicAuthUserFile/var/www/misc/private.passwordsAuthGroupFile/dev/nullrequirevalid-user

将AllowOverrideNoneOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16

改变为:AllowOverride.htaccessOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16

然后重新加载以使更改生效:

#/etc/init.d/apache2reload

2、摘要验证(Digestauthentication)

另外一种验证方法称之为摘要验证。如果采用摘要验证,你的口令将不是以明文通过网络传送,因为它们总是作为用户口令的一个MD5摘要传送的。如果采用这种方法,那么通过嗅探网络通信的方法就不能决定用户的口令了。

下面创建口令文件:

#mkdir/var/www/misc
#chmoda+rx/var/www/misc
#cd/var/www/misc
#htdigest-cprivate.passwordsrealmusernameAddingpasswordforusernameinrealmrealm.Newpassword:

创建.htaccess:

#cd/home/username/public_html/cgi-bin#vi.htaccess

在.htaccess中增加下面的内容:

AuthName"MyPrivateArea"AuthTypeDigestAuthUserFile/var/www/misc/private.passwordsAuthGroupFile/dev/nullrequirevalid-user

注意:

1、一些老的浏览器并不支持摘要验证(Digestauthentication)

2、要完全地保护你的.htaccess就要使用SSL

三、总结

使Apache更安全的下一步措施是使用Apache的模块来帮助实现更好的安全性,例如mod_security和mod_chroot。此外,要保护我们的验证我们还需要配置SSL。

上一页[1][2]