打造Ubuntu下的SLAMP

简介:
现在LAMP(Linux+Apache+Mysql+PHP)架站模式是越来越流行了,几乎都可以说是成为了架站的时尚了。但常言道树大招风,相应的安全问题也就随之而来了,象层出不穷的SQL脚本注入(SQL Injection)及CSS跨站脚本攻击(Cross Site Script)等让人不厌其烦。那么有没有什么好的方法来尽量减少这方面的危险呢?甚至在事发之后可以有效的进行日志反查以明白其攻击手法为日后响应做准备呢?答案是肯定的!其实这已经不再属于局限于架站而更多属于安全的范畴了,也就是如标题所言要如何建立一个SLAMP(Security)服务器了。 
本来是想利用makejail包做一个chroot环境的。但由于makejail包只在基于Debian woody的Apache 1.3.22 上做过测试,而由于没有时间,本人暂时也还没做过基于Ubuntu 5.04上的Apache2的测试,所以不敢妄语,有哪位朋友做过或有类似方式的话,还请不吝赐教!好了废话少说,下面就开始我们的安全架站之旅了。本文的所有操作在Ubuntu 5.04发行版上测试通过。具体步骤如下: 
1.将系统更新到最新状态,在做任何操作之前都要做这一步,以确保系统的稳定,同时也不会有一些莫名其妙的现象出现。 
$sudo apt-get update 
$sudo apt-get upgrade-dist 
2.架设LAMP服务器 
$sudo apt-get apache2 mysql-server php4 php4-gd php4-mysql 
3.配置LAMP服务 
a) 我们编辑/etc/php4/apache2/php.ini文件,先做一般配置,在改动之前,请先将该配置文件做个备份。以便在出错的时候可以恢复。 
>memory_limit = 8M =>修改成你所需的内存大小 
>upload_max_filesize = 2M =>修改文件最大上传尺寸 
>extension=mysql.so 
>extension=gd.so =>将你要用到模块前面的注释给去掉 
b) 这样LAMP服务就算是架设完成了,下面就要对该架构进行安全加固了。 
4.编辑/etc/apache2/apache2.conf文件,在改动之前,请先将该配置文件做个备份。以便在出错的时候可以恢复。 
>AddDefaultCharset ISO-8859-1 =>AddDefaultCharset GB2312 
6.然后开始加固php,我们再次编辑/etc/php4/apache2/php.ini文件,之所以没有一次改完,主要是为了给大家一个清晰的思路。 
>#打开安全模式,打开他的好处就是PHP文件只能访问所有者和PHP文件所有着一样的文件,即使在chroot环境下也无法访问jail 中属主不一样的 文件,类似于php shell这样的后门就没用武之地了哦,phpshell是很流行的php后门,他可以执行系统命令,就象他的名字一样,和shell很接近。 
>safe_mode = On 
>#上面的设置就限制了fopen(), file()等函数可以操作的目录范围,避免了入侵者非法读取文件,一定要在/var/www后面加"/",否则/var/wwww下的文件也能被访问 。 
>open_basedir = /var/www/ 
>#禁止使用phpinfo和get_cfg_var函数,这样可以避免泄露服务信息,一般在在确认PHP能正常工作之后再使之关闭 
>disable_functions = phpinfo,get_cfg_var 
>#设置php程序错误日志 
>error_reporting = E_ALL 
>log_errors = On 
>error_log = /var/log/php_err.log 
>#如果php程序没有指明需要register_globals的话,最好把register_globals设置为Off,这样可以避免很多安全问题的。注意,如果你的程序是需要register_globals的话,可千万别关。Ubuntu默认是关闭的。 
>register_globals = Off 
>#禁止打开远程地址,记得最近出的php include的那个漏洞吗?就是在一个php程序中include了变量,那么入侵者就可以利用这个控制服务器在本地执行远程的一个php程序,例如phpshell,所以我们关闭这个。 
>allow_url_fopen = Off 
7.这样PHP的安全优化就做好了,下面做MySQL的安全优化。 
a)在Ubuntu下用apt装的mysql默认是禁止从网络连接MySQL的,我们可以从/etc/mysql/my.cnf文件中看到有 skip-networking语句的,如果你做的是MySQL服务器的话,那么是要将其注释掉的,这样其他机器才能访问你这台机器,如果该服务仅供本机使用的话,那么就保持原状,这样别的机器不能访问你这台机器的MySQL。由于这里是做在一起的,所以保持不变好了。 
b)然后我们给mysql设置一个密码并修改管理员用户名(默认是root),但一定得记得,无论怎么样修改密码,都会有记录的,如果通过 mysqladmin修改,shell的历史记录会有的,如果登陆了mysql之后再修改,在 ~/.mysql_history会记录的,所以我们一定得处理这两个历史记录文件,我们把他们删了,再从/dev/null做个软连接过来就可以解决问题了。注意由于我们会在SHELL下用的是sudo,所以该历史是保存在本用户目录下的,而不是在根用户目录下的。而mysql也是在本用户目录下使用的,所以也是保存在本用户目录下的。如果你觉得不能记忆历史记录麻烦的话,也可以在用到了MySQL的Root用户之后,进入这两个文件中,将相关语句删除。 
$rm .bash_history 
$rm .mysql_history 
$ln -s /dev/null .bash_history 
$ln -s /dev/null .mysql_history 
c)然后我们删除多余的数据库并去掉匿名帐号 
[root@debian ~]mysql -u root -p 
Enter password:XXXXXX 
mysql> drop database test; 
mysql> use mysql; 
mysql> delete from db; 
mysql> delete from user where not (host="localhost" and user="root"); 
mysql> flush privileges; 
d)然后修改默认的管理员帐号root为你喜欢的,我这里改成myadmin 
mysql> update user set user="myadmin" where user="root"; 
mysql> flush privileges; 
这样就可以通过myadmin而不是root用户名来访问MySQL数据库了! 
8.现在我们安装mod-security。 
a)首先安装libapache2-mod-security包 
$sudo apt-get install libapache2-mod-security 
b)该模块默认是没激活的,我们可以在/etc/apache2/mods-available目录下看到有mod-security.load文件,但在/etc/apache2/mods-enabled目录却没有它的软链接。我们现在激活它: 
$sudo ln -s /etc/apache2/mods-available/mod-security.load /etc/apache2/mods-enabled/mod-security.load 
$sudo cp /usr/share/doc/libapache2-mod-security/examples/httpd2.conf.example-full /etc/apache2/mods-available/mod-security.conf 
$sudo vi /etc/apache2/mods-available/mod-security.conf,老规则改动之前先做好备份。 
># 检测内容长度以避免堆溢出攻击 
>SecFilterForceByteRange 32 254 =>SecFilterForceByteRange 32 126 
># debug设置 
>SecFilterDebugLevel 9 =>SecFilterDebugLevel 0 
># 设置缺省的动作 
>SecFilterDefaultAction "deny,log,status:499" =>SecFilterDefaultAction "deny,log,status:404" 
># 把设置传递给子目录 
>SecFilterInheritance Off 
># Redirect user on filter match 
># 当匹配sh的时候,重新定向到一个特殊的警告页面,该页面是自行编写的,写些警告的话让攻击者知难而退,该段先不要生效,等到相关配置配好之后再失效不迟。记住在配好之后要使之生效。 
>#SecFilter sh redirect:http://localhost/hack/warning.htm 
># Prevent OS specific keywords 
>#过滤一些敏感的东西,我们使用*是为了攻击者使用/etc/./passwd来绕开检测 
>SecFilter /etc/passwd =>SecFilter /etc/*passwd 
>SecFilter /bin/*sh 
># Very crude filters to prevent SQL injection attacks 
># 防止SQL插入(SQL Injection)攻击 
>SecFilter "delete[[:space:]]+from" 
>SecFilter "insert[[:space:]]+into" 
>SecFilter "select.+from" 
>SecFilter "select[[:space:]]+from" 
>SecFilter "union[[:space:]]+from" 
$sudo ln -s /etc/apache2/mods-available/mod-security.conf /etc/apache2/mods-enabled/mod-security.conf 
c)重启Apache2服务即可。 

$sudo /etc/init.d/apache2 restart



本文转自 firehare 51CTO博客,原文链接:http://blog.51cto.com/firehare/588235,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
Ubuntu Linux
任何Ubuntu用户都应安装的四大Linux应用程序
当然,这款程序不需要太多介绍。我们面对的是网上最庞大最完整的多媒体中心,由于丰富的插件,我们能够高度细化地定制其每一项功能。这是我们的Linux发行版不可或缺的必备软件。 我们可以通过运行以下命令来轻松安装Kodi:sudo apt install kodi。
|
11月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
11月前
|
Ubuntu Linux 网络安全
Linux服务器之Ubuntu的安装与配置
Ubuntu Desktop是目前最成功、最流行的图形界面的Linux发行版;而Ubuntu Server也在服务器端市场占据了较大的份额。今天为大家详细介绍了Ubuntu Server的安装与配置,希望对你能有所帮助。关于VMware、VirtualBox等虚拟化软件的使用,朱哥还会在后续的文章中为大家详细介绍,敬请关注!
|
9月前
|
Ubuntu 安全 iOS开发
Nessus Professional 10.10 Auto Installer for Ubuntu 24.04 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for Ubuntu 24.04 - Nessus 自动化安装程序
1214 5
|
9月前
|
NoSQL Ubuntu MongoDB
在Ubuntu 22.04上安装MongoDB 6.0的步骤
这些步骤应该可以在Ubuntu 22.04系统上安装MongoDB 6.0。安装过程中,如果遇到任何问题,可以查阅MongoDB的官方文档或者Ubuntu的相关帮助文档,这些资源通常提供了解决特定问题的详细指导。
912 18
|
10月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
487 18
|
10月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
666 15
|
10月前
|
存储 Ubuntu iOS开发
在Ubuntu 22.04系统上安装libimobiledevice的步骤
为了获取更多功能或者解决可能出现问题,请参考官方文档或者社区提供支持。
974 14
|
10月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
1113 7