LAMP架构下的安全注意要点
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/lamp_security.html
我对安全方面也不是了解很多,最近遇到了安全方面的问题,查了一些资料,亲自试了试,选出一些比较重要的记录一下。
安全方面即将加入阿里云的@Natural__Light大牛给我演示过不少入侵的方法,算“资深”了,从在中学开始入侵学校网络,咱们大学里的那些破网站,@Natural__Light大牛玩一样进后台。
- 如果要考虑安全问题,就必须有一个假设:一切用户输入的内容都是不安全的,一切参数的传递都是不安全的。入侵者可能利用每一个我们假设是安全的地方。
- Linux方面
- 限制用户账号,开发和运维分开。
- SSH登陆必须限制主机来源,切忌允许全部IP登陆,最好port也要修改。
- 使用iptables限制端口出入和IP,内部系统只能允许内部IP。
- 注意为不同的用户甚至不同的功能区分不同的账号和用户组。
- 为关键文件和目录一定要设置好权限,千万不能777,配合用户和分组保证只有需要的人有需要的权限,尤其是/etc下的。
- Apache方面
- 使用专门的账号和用户组来启动Apache。
- 不同功能和站点的配置文件最好拆分为不同的文件。
- 设置ServerSignature Off和ServerTokens ProductOnly,防止服务器广播敏感信息和HTTP头透露关键信息。
- 禁止浏览目录。
- 只监听指定的IP和端口。
- 必要时可以修改代码伪装服务器版本信息。
- 为每个目录建立.htaccss文件保护。
- 只允许特定常用的User-Agent访问。
- 利用iptables或Nginx做反向代理,过滤DDOS攻击。
- MySQL方面
- 必须设置MySQL目录的权限,限制访问。
- 必须使用一个独立的用户和用户组,没有Shell,也不能运行其他程序。
- 必须删除无用户名账户,必须修改root账户密码,并且要限制主机来源。
- 必须删除test库,这个库任何人都可以建表,危险。
- 为每个功能单独建账号,使用不同的密码,限制主机来源,只给需要的权限。
- 细化权限粒度,不要给任何账户不必要的权限。
- PHP方面
- 一定要分析任何用户输入或者传递的参数,过滤其中的危险字符。
- 使用系统自带的过滤函数一定要了解其机制,避免对方利用单/多字符集的方法绕过。
- 在前端限制特殊字符被输入,接到输入后还需要再次进行过滤。
- 系统的错误信息必须被屏蔽或者关闭,错误可以跳转。
- 禁止采用root账户连接数据库。
- 用专门的账户运行PHP。
总的来说最重要的就是:以最低粒度控制权限,过滤任何用户可以修改的进入系统的内容。