热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » AMPZ/Nginx/IIS发布安装 » 实例:保障Ubuntu Apache Web服务器安全

实例:保障Ubuntu Apache Web服务器安全

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

  一、文件许可和访问控制

  1. 用户和组

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

  运行下面的命令:

# ps auwwfx | grep apache www-data 25675 0.0 0.0 10348 508 ? S Jan21 0:00 \_ /usr/sbin/apache2 -k start
  www-data 25686 0.0 0.2 231816 2208 ? Sl Jan21 0:00 \_ /usr/sbin/apache2 -k start
  www-data 25688 0.0 0.2 231816 2200 ? Sl Jan21 0:00 \_ /usr/sbin/apache2 -k start


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

# groupadd www-data
  # useradd -g www-data www-data
  # vi /etc/apache2/apache2.conf


  将User root Group root改为:

User www-data Group www-data


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

# /etc/init.d/apache2 reload


  2. 服务文件准许

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

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

# chmod 755 index.cgi


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

Options FollowSymLinks AllowOverride None


  注意:

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

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

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

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

AllowOverride None Options ExecCGI Order allow,deny Allow from all


  重新加载Apache:

# /etc/init.d/apache2 reload


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

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

AllowOverride None Options ExecCGI Order allow,deny Allow from all


  将其改为:

AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16


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

# /etc/init.d/apache2 reload


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

二、身份验证

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

  1. 基本验证

  允许.htaccess:

# vi /etc/apache2/apache2.conf


  将AllowOveride None改为AllowOveride AuthConfig

  重新加载以使改变生效:

# sudo /etc/init.d/apache2 reload


  创建一个口令文件:

# mkdir /var/www/misc
  # chmod a+rx /var/www/misc
  # cd /var/www/misc
  # htpasswd -bc private.passwords username password Adding password for user username


  创建.htaccess

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


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

AuthName My Private Area" AuthType Basic AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user


  将AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16

  改变为:AllowOverride .htaccess Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16

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

# /etc/init.d/apache2 reload


  2、摘要验证(Digest authentication)

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

  下面创建口令文件:

# mkdir /var/www/misc
  # chmod a+rx /var/www/misc
  # cd /var/www/misc
  # htdigest -c private.passwords realm username Adding password for username in realm realm. New password:


  创建 .htaccess :

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


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

AuthName "My Private Area" AuthType Digest AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user


  注意:

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

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

  三、总结

  使Apache更安全的下一步措施是使用Apache的模块来帮助实现更好的安全性,例如mod_security 和 mod_chroot。此外,要保护我们的验证我们还需要配置SSL。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理