科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Apache Web服务器这样配置才最安全之二

Apache Web服务器这样配置才最安全之二

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Apache Server默认情况下的安全配置是拒绝一切访问。假定Apache Server内容存放在/usr/local/apache/share 目录下,下面的指令将实现这种设置

作者:小胖 来源:小胖 2007年10月4日

关键字: 安全 配置 Web服务器 Apache Linux

  • 评论
  • 分享微博
  • 分享邮件
Apache Server默认情况下的安全配置是拒绝一切访问。假定Apache Server内容存放在/usr/local/apache/share 目录下,下面的指令将实现这种设置:

    <Directory  /usr/local/apache/share>
    Deny from all
    Allow Override None
    </Directory>
    则禁止在任一目录下改变认证和访问控制方法。

    同样,可以用特有的命令Deny、Allow指定某些用户可以访问,哪些用户不能访问,提供一定的灵活性。当Deny、Allow一起用时,用命令Order决定Deny和Allow合用的顺序,如下所示:

    1、 拒绝某类地址的用户对服务器的访问权(Deny)

    如:Deny from all
    Deny from test.cnn.com
    Deny from 204.168.190.13
    Deny from 10.10.10.0/255.255.0.0

    2、 允许某类地址的用户对服务器的访问权(Allow)

    如:Allow from all
    Allow from test.cnn.com
    Allow from 204.168.190.13
    Allow from 10.10.10.0/255.255.0.0
    Deny和Allow指令后可以输入多个变量。

    3、简单配置实例:

    Order Allow, Deny
    Allow from all
    Deny from www.test.com
    指想让所有的人访问Apache服务器,但不希望来自www.test.com的任何访问。
    Order Deny, Allow
    Deny from all
    Allow from test.cnn.com
    指不想让所有人访问,但希望给test.cnn.com网站的来访。概括的讲,用户认证就是验证用户的身份的真实性,如用户帐号是否在数据库中,及用户帐号所对应的密码是否正确;用户授权表示检验有效用户是否被许可访问特定的资源。在Apache中,几乎所有的安全模块实际上兼顾这两个方面。从安全的角度来看,用户的认证和授权相当于选择性访问控制。
建立用户的认证授权需要三个步骤:

    1、建立用户库

    用户名和口令列表需要存在于文件(mod_auth模块)或数据库(mod_auth_dbm模块)中。基于安全的原因,该文件不能存放在文挡的根目录下。如,存放在/usr/local/etc/httpd下的users文件,其格式与UNIX口令文件格式相似,但口令是以加密的形式存放的。应用程序htpasswd可以用来添加或更改程序:

    htpasswd –c /usr/local/etc/httpd/users martin
    -c表明添加新用户,martin为新添加的用户名,在程序执行过程中,两次输入口令回答。用户名和口令添加到users文件中。产生的用户文件有如下的形式:
    martin:WrU808BHQai36
    jane:iABCQFQs40E8M
    art:FadHN3W753sSU
    第一域是用户名,第二个域是用户密码。

    2、配置服务器的保护域

    为了使Apache服务器能够利用用户文件中的用户名和口令信息,需要设置保护域(Realm)。一个域实际上是站点的一部分(如一个目录、文档等)或整个站点只供部分用户访问。在相关目录下的.htaccess文件或httpd.conf ( acces.conf ) 中的<Directory>段中,由AuthName来指定被保护层的域。在.htaccess文件中对用户文件有效用户的授权访问及指定域保护有如下指定:
    AuthName  “restricted stuff”
    Authtype Basic
    AuthUserFile /usr/local/etc/httpd/users
    Require valid-user

    其中,AuthName指出了保护域的域名(Realm Name)。valid-user参数意味着user文件中的所有用户都是可用的。一旦用户输入了一个有效的用户/口令时,同一个域内的其他资源都可以利用同样的用户/口令来进行访问,同样可以使两个不同的区域共用同样的用户/口令。

    3、告诉服务器哪些用户拥有资源的访问权限

    如果想将一资源的访问权限授予一组客户,可以将他们的名字都列在Require之后。最好的办法是利用组(group)文件。组的操作和标准的UNIX的组的概念类似,任一个用户可以属于一个和数个组。这样就可以在配置文件中利用Require对组赋予某些权限。如:
    Require group staff
    Require group staff admin
    Require user adminuser
    指定了一个组、几个组或一个用户的访问权限。

    需要指出的是,当需要建立大批用户帐号时,那么Apache服务器利用用户文件数据库将会极大地降低效率。这种情况下,最好采用数据库格式的帐号文件,譬如 DBM数据库格式的文件。还可以根据需要利用db格式(mod_auth_db)的数据文件,或者直接利用数据库,如:mSQL(mod_auth_msql)或DBI兼容的数据库(mod_auth_dbi)。DBM 文件是一种简单而标准的用于加快读取效率的保存信息的方法。文件中存放的每一个记录由两个部分组成部分:键和值。由于DBM的格式,使得与键相关的信息非常有效。在Web用户认证中,这里的键将是用户名,而与该键相关的值将是该用户经过加密的口令信息。从DBM文件中查找用户名和口令,要比从一个纯文本文件中查找有效得多。对于有很多用户的站点,这种方法将大大提高用户认证的效率。

     1、在Apache服务器中增加DBM模块

    在默认的条件下,Apache不使用DBM文件来完成用户认证,因此编译时一定要加入可选的DBM认证模块。重新配置Apache服务器文件,去掉其中的注释行
#Module dbm_auth_module mod_auth_dbm.o前的“#”,并重新编译。但是,在编译之前,需要指出Apache DBM函数的位置。

    2、创建DBM用户文件(假设文件名为users)

    Apache提供了一个“dbmmanage”的程序,用于创建和管理DBM文件。其中:
    Dbmmanage /usr/local/etc/httpd/usersdbm           创建DBM文件
    Dbmmanage /usr/local/etc/httpd/users adduser martin hamster 新增用户
    Dbmmanage /usr/local/etc/httpd/usersdbm delete martin    删除用户
    Dbmmanage /usr/local/etc/httpd/usersdbm view                  显示DBM中所有用户

    有了DBM数据库文件,还要替换目录访问控制,即将Apache配置文件(access.conf)中的AuthUserFile部分替换成:AuthUserFile /usr/local/etc/usersdbm 告诉Apache现在的用户文件是DBM的格式。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章