打造Ubuntu下的SLAMP

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
现在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,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
存储 Ubuntu Linux
关于实体机安装Ubuntu 22.04.3-desktop-amd64遇见的一些问题
【10月更文挑战第5天】本文介绍了Ubuntu安装过程中常见的四个问题及其解决方案,包括分区设置、驱动问题、软件安装问题和启动问题。对于分区,推荐新手选择自动分区,手动分区需了解基本概念。驱动问题可通过安装相应硬件的Linux驱动解决。软件安装问题可更换国内镜像源或修复依赖关系。启动问题则可尝试进入恢复模式修复或根据错误提示信息寻求帮助。
|
1天前
|
PyTorch TensorFlow 算法框架/工具
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
本文提供了在Ubuntu 18.04操作系统的NVIDIA Jetson平台上安装深度学习和计算机视觉相关库的详细步骤,包括PyTorch、OpenCV、ONNX、TensorFlow等。
11 1
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
|
4天前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
23 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
1天前
|
Python
Jetson环境安装(二):ubuntu18.0卸载和安装python3
在Jetson Nano上如何卸载Python 3.7并重新安装Python 3.7.0版本的详细步骤,包括卸载命令、安装依赖库、下载和编译Python源码以及建立软链接等。
12 2
|
6天前
|
Ubuntu Docker 容器
本地wsl的Ubuntu安装docker,不使用docker桌面版
本文提供了在WSL的Ubuntu环境中安装Docker引擎的步骤,包括安装引擎、配置iptables以及启动Docker服务。
25 2
|
6天前
|
Ubuntu Unix 应用服务中间件
Ubuntu16.04.1 安装Nginx
Ubuntu16.04.1 安装Nginx
|
7天前
|
Ubuntu 网络安全 Apache
Ubuntu下安装Apache2.4.7遇到的问题及解决办法
Ubuntu下安装Apache2.4.7遇到的问题及解决办法
16 1
|
8天前
|
Kubernetes 网络安全 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
21 2
|
7天前
|
NoSQL Ubuntu Redis
Ubuntu安装redis
本文介绍了在Ubuntu系统上安装Redis的两种方法:一种是通过编译安装本地Redis包,包括下载、解压、编译安装、配置启动和测试连接的步骤;另一种是通过apt安装在线的Redis包,并提供了更新系统软件包列表、安装Redis服务器、检查Redis服务器状态和测试连接的命令。
14 0
Ubuntu安装redis