2.1) Apache Tomcat
- 删除Tomcat的Manager控制台软件
删除{Tomcat安装目录}\webapps\manager文件夹
如无法做到删除,参考以下步骤检查弱口令:
操作目的
| 检查Tomcat弱口令 |
检查方法 | 打开Tomcat_home\conf\tomcat-users.xml,查看设置的用户密码及角色,例如: <role rolename="manager"/> <user username="tomcat" password="复杂的密码" roles="manager"/> |
加固方法 | 在tomcat-users.xml中为用户设置复杂的密码 |
- 设置SHUTDOWN字符串
操作目的 | 防止恶意用户telnet到8005端口后,发送SHUTDOWN命令停止Tomcat服务 |
检查方法 | 打开Tomcat_home\conf\server.xml,查看是否设置了复杂的字符串 <Server port="8005" shutdown="复杂的字符串"> |
加固方法 | 设置复杂的字符串,防止恶意用户猜测到 |
- 设置Tomcat运行身份
操作目的 | 以Tomcat用户运行服务,增强安全性 |
检查方法 | 查看Tomcat的启动脚本或服务,是否以Tomcat身份运行 |
加固方法 | Unix系统: (1) 创建apache组:groupadd tomcat (2) 创建apache用户并加入apache组:useradd tomcat –g tomcat (3) 以tomcat身份启动服务 |
- 禁止目录遍历
操作目的 | 防止直接访问目录时由于找不到默认主页而列出目录下文件 |
检查方法 | 打开Tomcat_home\conf\web.xml,查看listings是否设置为false <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> |
加固方法 | 将listings的值修改为false |
- 限制IP或主机名访问
操作目的 | 对敏感目录的访问IP或主机名进行限制 |
检查方法 | 打开Tomcat_home\conf\Catalina\localhost\manager.xml 查看是否设置有IP或主机名限制 |
加固方法 | 修改Tomcat_home\conf\Catalina\localhost\manager.xml,在Context标签中加入 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" /> 或者 <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="*.localdomain.com" /> |
- 开启访问日志
操作目的 | 检查Tomcat是否记录了错误信息和访问信息 |
检查方法 | Tomcat的日志信息默认存放在Tomcat_home\logs中,访问日志默认未开启 |
加固方法 | 如果Tomcat独立运行(未与Apache整合),可以选择开启访问日志,修改Tomcat_home\conf\server.xml,取消注释: <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 启用access_log后,重启tomcat,在Tomcat_home\logs中可以看到访问日志 注:这里记录的时间转换为北京时间需要+8小时 |
- 自定义错误信息
操作目的 | 自定义Tomcat返回的错误信息 |
检查方法 | 查看Tomcat_home\webapps\APP_NAME\WEB-INF\web.xml中<error-page> </error-page> 部分的设置 |
加固方法 | 修改Tomcat_home\webapps\APP_NAME\WEB-INF\web.xml 在最后</web-app>一行之前加入以下内容 (1)表示出现404未找到网页的错误时显示notfound.html页面 <error-page> <error-code>404</error-code> <location>/nofound.html</location> </error-page>
(2)表示出现java.lang.NullPointerException错误时显示error.jsp页面 <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/ error.jsp</location> </error-page> |
2.2) Apache Http Server
- 端口配置
对外服务http使用80端口,SSL使用443端口;且只允许80运行http访问,其他服务严禁运行在80端口;使用其他端口需要提出申请,经过本部门和安全管理部门同意后方可使用。 - 目录禁止配置为可浏览,关闭服务器端SSI包含
Options -Indexes -Includes - 配置覆盖控制
将AllowOverride设置为None
防止通过.htaccess覆盖原有安全配置 - 控制对root目录的访问
<Directory />
Options None
AllowOverride None
deny from all
</Directory>
开放指定目录:
<Directory "/var/www/html/">
Order allow,deny
allow from all
</Directory>
2.3) MySql Server
- 移除Anonymous帐号
Delete from mysql.user where user = ''; mysql缺省有一个空用户。
2.4) PHP
检查php.ini中与安全有关的配置项,并按下述建议进行配置。
1) safe_mode
启用安全模式safe_mode = On (默认Off)
2) safe_mode_gid
默认情况下,安全模式在打开文件时会做 UID 比较检查。如果想将其放宽到 GID 比较,则打开 safe_mode_gid,建议:safe_mode_gid = Off (默认Off)
3) safe_mode_include_dir
当从此目录及其子目录(目录必须在 include_path 中或者用完整路径来包含)包含文件时越过UID/GID 检查。
默认未包含任何目录。不建议对本项进行设置,如果确有需要使用或者执行shell的时候,在此设置目录,并把对应目录权限设置为不可写不可读只可执行。
4) safe_mode_exec_dir
如果 PHP 使用了安全模式,system() 和其它执行系统程序的函数将拒绝启动不在本项配置目录中的程序。
5) open_basedir
将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本配置不受安全模式打开或者关闭的影响。 当一个脚本试图用例如 fopen() 或者 gzopen() 打开一个文件时,该文件的位置将被检查——如果文件在指定的目录树之外时 PHP 将拒绝打开它。所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。
默认是允许打开所有文件,建议根据实际情况设置。
特殊值 . 指定了存放该脚本的目录将被当做基准目录。
在 Windows 中,用分号分隔目录。在任何其它系统中用冒号分隔目录。作为 Apache 模块时,父目录中的 open_basedir 路径自动被继承。
用 open_basedir 指定的限制实际上是前缀,不是目录名。即: "open_basedir = /dir/incl" 也会允许访问 "/dir/include" 和 "/dir/incls"。
如果要将访问限制在仅为指定的目录,用斜线结束路径名,例如:"open_basedir = /dir/incl/"。
6) disable_functions
强烈建议禁用的函数:exec,passthru,popen,proc_open,shell_exec,system,phpinfo,assert,get_loaded_extensions
推荐禁用的函数:chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown,readfile,file_put_contents
7) cookie只允许http方式
session.cookie_httponly = 1,使程序(js、applet)无法讲取到Cookie。
8) https secure 开启
session.cookie_secure = 1,仅适用于https,如果是http,不要设置这个选项。
2.5) Jboss Application Server
Jboss的管理界面有admin-console、web-console、jmx-console、jbossws和root-console,在缺省配置中,它们分别是使用默认密码或者不使用安全验证即可进入。
安全配置建议:为admin-console设置安全的密码;为web-console、jmx-console设置安全的密码或者将其删除;删除root-console。
具体方法如下:
1)修改密码
- 修改admin-console密码:修改%JBOSS_HOME%/server/xxx/conf/props里jmx-console-users.properties和jmx-console-roles.properties。
- 修改jmx-console密码:修改%JBOSS_HOME%/server/deploy/jmx-console.war/WEB-INF/web.xml,去掉对<security_constraint>这段的注释;jboss-web.xml,去掉对<security-domain>的注释;%JBOSS_HOME%/server/default/conf/props目录下,jmx-console-users.properties 修改admin=admin,设置用户名=设置密码;jmx-console-role.properties修改admin为上一步设置的用户名。
- 修改web-console密码: %JBOSS_HOME%/server/deploy/management/console-mgr.sar/web-console.war/WEB-INF/下,修改web.xml,去掉对<security_constraint>这段的注释;修改jboss-web.xml,取消对<security-domain>的注释;在%JBOSS_HOME%/server/deploy/management/console-mgr.sar/web-console.war/class下,修改 web-console-users.properties,admin=admin,设置用户名=设置密码;web-console-role.properties修改admin为上一步设置的用户名。
- 修改jbossws密码:在%JBOSS_HOME%/server/all/deploy/jmx-console.war/WEB-INF下修改web.xml和jboss-web.xml,去掉安全注释;修改server/xxx/conf/props里的jbossws-users.properties和jbossws-roles.properties,配置用户名、密码和角色。
2)删除不必要的管理界面
- 删除jmx-console:删除%JBOSS_HOME%/deploy/mx-console.war
- 删除web-console:删除 %JBOSS_HOME%/deploy/management/console-mgr.sar/web-console.war
- 删除jbossws-context:删除%JBOSS_HOME%/deploy/jbossws.sar/jbossws-context.war
- 删除root-console: 删除%JBOSS_HOME%/deploy/jboss-web.deployer/ROOT.war和%JBOSS_HOME%/deploy/jboss-web.deployer/context.xml