应用安全配置Apache与Mysql安全配置安全中心杨勇coolcyang应用安全配置•Apache•MysqlApache安全配置•安全补丁更新•敏感信息保护•最小化安全原则•访问控制•防DOS配置•日志维护和保护Apache安全配置•版本&安全补丁更新–security.oa.com–安全公告–•下载发行版校验Apache安全配置•安全补丁更新•敏感信息保护•最小化安全原则•访问控制•防DOS配置•日志维护和保护Apache安全配置•问题–Apache有哪些敏感信息?–泄露这些敏感信息会有哪些危害?–您如何屏蔽这些信息?Apache安全配置•敏感信息保护–屏蔽banner•ServerTokensProd•ServerSignatureOff–屏幕默认目录•/var/下文件•/var/下默认文件•/var/下默认文件•/var/下默认文件–屏蔽枚举帐户•UserDirpublic_html•注释掉该行•#UserDirpublic_htmlApache安全配置•敏感信息保护–去掉索引功能Options–Indexes–例子•Apache虚拟主机的配置应该在httpd.conf里第一个虚拟主机前面加上这段设置,当用户用IP访问时候默认跳转到部门主页中。•VirtualHostXXX.XXX.XXX.XXX•ServerNameserverdomin.qq.com•DocumentRoot/usr/local/apache/htdocs•Directory/usr/local/apache/htdocs•Options-Indexes-Includes•Orderdeny,allow•Denyfromall•/Directory•/VirtualHostApache安全配置•安全补丁更新•敏感信息保护•最小化安全原则•访问控制•防DOS配置•日志维护和保护Apache安全配置•最小化安全原则--模块–编译•例子–$./configure\–--prefix=/usr/local/apache\–--enable-module=rewrite\–--enable-module=so\–--disable-module=imap\–--disable-module=userdir–检查•静态编译•DSO编译方式Apache安全配置•安全补丁更新•敏感信息保护•最小化安全原则•访问控制•防DOS配置•日志维护和保护Apache安全配置•访问控制–Web根目录设置•DocumentRoot/应为web首页目录–启动帐户•启动Apache的帐号应为nobody–Usernobody–GroupnogroupApache安全配置•访问控制–设置合理的属主•cphttpd/usr/local/apache/bin•chown0/usr/local/apache/bin/httpd•chgrp0/usr/local/apache/bin/httpd•chmod511/usr/local/apache/bin/httpd–设置合理的权限•#chown-Rroot:root/usr/local/apache•#find/usr/local/apache-typed|xargschmod755•#find/usr/local/apache-typef|xargschmod644•#chmod-Rgo-w/usr/local/apacheApache安全配置•安全补丁更新•敏感信息保护•最小化安全原则•访问控制•防DOS配置•日志维护和保护Apache安全配置•AntiDOS配置-配置连接参数–HARD_SERVER_LIMIT–MinSpareServers与MaxSpareServers–MaxClients–Keep-Alive–StartServers–TimeOut–MaxKeepAliveRequests–KeepAliveTimeoutApache安全配置调整参数建议参数HARD_SERVER_LIMIT设置Apache同时连接的最大进程数。MinSpareServers最小空闲子进程数。MaxSpareServers最大空闲子进程数。MaxClient同时处理的最大用户连接数。Keep-Alive关闭HTTP/1.0和HTTP/1.1的长连接特性。当有静态页面时,开启,但应调小KeepAliveTimeOutStartServers启动Apache服务后的启动的进程数。TimeOut客户端和服务端连接超时时间。MaxKeepAliveRequests一个连接发起的请求数KeepAliveTimeout服务在关闭连接前,等待下一次请求的时间。Apache安全配置调整参数建议参数HARD_SERVER_LIMIT8193MinSpareServers100MaxSpareServers200MaxClient400Keep-AliveoffStartServers300TimeOut60MaxKeepAliveReques根据实际负载调整KeepAliveTimeout2Apache安全配置•安全补丁更新•敏感信息保护•最小化安全原则•访问控制•防DOS配置•日志维护和保护Apache安全配置•日志维护和保护–设置权限–日志格式•存放位置(独立分区)•CommonLogFormat(CLF)127.0.0.1-username[10/Oct/2000:13:55:36-0700]GET/apache_pb.gifHTTP/1.02002326•组合记录格式(CombinedLogFormat)127.0.0.1-username[10/Oct/2000:13:55:36-0700]GET/apache_pb.gifHTTP/1.02002326[en](Win98;I;Nav)Apache安全配置•日志维护和保护–日志回滚•回卷日志–mvaccess_logaccess_log.oldmverror_logerror_log.oldapachectlgracefulsleep600gzipaccess_log.olderror_log.old•管道&rotatelogs回卷日志•CustomLog|/usr/local/apache/bin/rotatelogs/var/log/access_log86400commonMySQL安全配置•安全补丁更新•敏感信息•帐户及数据库角色–默认帐户安全问题–网络连接–Msql授权表–如何进行加固•危险函数•Mysql启动运行安全MySQL安全配置•经常关注安全更新–Security.oa.com–Mysql官方网站•不轻易更换(eg:Mysql3-Mysql4)–Union带来的漏洞MySQL安全配置•安全补丁更新•敏感信息•帐户及数据库角色–默认帐户安全问题–网络连接–Msql授权表–如何进行加固•危险函数•Mysql启动运行安全MySQL安全配置•泄露密码–bash_history–.mysql_history•两个shell命令vs一个好习惯–Shellrm.bash_history–Shellrm.mysql_history–Shellln–s/dev/null.bash_history–Shellln–s/dev/null.mysql_historyMySQL安全配置•安全补丁更新•敏感信息•帐户及数据库角色–默认帐户安全问题–网络连接–Msql授权表•危险函数•Mysql启动运行安全MySQL安全配置•Root空口令•匿名用户MySQL安全配置•帐户和口令安全–给mysql的root用户设置口令•mysqlusemysql;mysqlupdateusersetpassword=password('test')whereuser='root';mysqlflushprivileges;–删除匿名用户•Mysqldeletefromuserwhereuser=''MySQL安全配置•老版本权限的问题–版本3.21.xx:755–版本3.22.xx:770–版本3.23.xx:700(推荐)•推荐两个命令–Shellchown–Rmysql.mysql/usr/local/mysql/var–Shellchown–Rgo-rwx/usr/local/mysql/varMySQL安全配置•网络连接访问控制–避免外部连接•启动时Skip-networking•my.cnfbind-address=内网ip–限定连接IP•mysqlgrantselect,insert,update,delete,create,dropprivilegesontest.*totest1@'192.168.1.0/255.255.255.0'identifiedby'test';–NT主机默认允许远程连接MySQL安全配置•User表–mysqldescuser;–版本3.22.11版本以前的授权机制不完善(建议升级)–GRAND&REVOK–危险的权限•Shutdown•Process•fileMySQL安全配置•User表MySQL安全配置•Db表MySQL安全配置•Host表MySQL安全配置•Table_prive表MySQL安全配置•Columns_priv表MySQL安全配置•授权表运行机制–服务器检查是否允许该用户连接•Host•user–用户进行的是否是授权操作•权限生效条件•*_privMySQL安全配置•思考题–如何给数据库tencentdata设置如下权限•用途:查询数据•用户名:viewer•密码:T3nc3t!965.A•WebCGI程序主机IP:172.16.1.1MySQL安全配置•安全补丁更新•敏感信息•帐户及数据库角色–默认帐户安全问题–网络连接–Msql授权表•危险函数•Mysql启动运行安全MySQL安全配置•危险的函数–LOADDATAINFILE(只能读全局可读文件)–SELECT…INTOOUTFILE(不能覆盖文件)MySQL安全配置•常见攻击–拥有FILE权限•CREATETABLEetc_passwd(pwd_entryTEXT);•LOADDATAINFILE/etc/passwdintoTABLEetc_passwd;•SELECT*FROMetc_passwd;MySQL安全配置•读取文件MySQL安全配置•导出后门–mysqlcreatetablea(cmdtext);–mysqlinsertintoavalues(“?php);–mysqlinsertintoavalues(“phpinfo);–mysqlinsertintoavalues(“php?);–mysqlselect*fromaintooutfile“/usr/local/apache/cgi-bin/cmd.php;MySQL安全配置•安全补丁更新•敏感信息•帐户及数据库角色–默认帐户安全问题–网络连接–Msql授权表•危险函数•Mysql启动运行安全MySQL安全配置•启动–建议用非root权限启动(版本3.23.15)–构建chroot环境–启动MySQL服务器时加--skip-show-database使一般数据库用户不能浏览其它数据库结论应用环境往往十分复杂多变,这种复杂多变造成诸多安全隐患,这些隐患随时都可能被黑客利用,完成一次成功的入侵。因此对于应用安全,我们需要更多关注应用层的安全配置和加固工作!谢谢!