现在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

打造Ubuntu下的SLAMP相关推荐

  1. linux pro*c环境配置,打造ubuntu下精简版的oracle客户端及pro*c编译环境

    oracle的pro*c简介 安装oracle客户端 安装sqlpus 安装pro*c ORACLE的PRO*C曾经很流行,虽然现在不被推崇,但是已经比较成熟项目依然使用,所以打造自己的pro*c编译 ...

  2. ubuntu下的linux怎样备份文件,Ubuntu系统如何备份还原?Ubuntu系统备份还原教程

    Ubuntu系统如何备份还原?Ubuntu系统是一个以桌面应用为主的开源操作系统,专为开发团队而打造!无论你使用的是什么操作系统,都有可能出现电脑无法修复的故障,这时候备份还原功能就显得非常重要了.今 ...

  3. Windows和ubuntu下一些提升效率的工具知识点以及typora和Obsidian配置

    文章目录 一.软件 windows ubuntu 二.软件知识点 三.Google chrome好用的插件 四.自己安装的Obisidian插件 五.Typora和Obsidian图片显示兼容问题 六 ...

  4. 打造Ubuntu媒体中心 —— 10款顶级视频处理软件推荐

    ubuntu下有很多视频处理软件,能够把你的系统打造成一个媒体中心.我在这里给大家推荐10款顶级的免费视频处理软件. 1.Avidemux Avidemux是ubuntu中一个简单的视频编辑软件.您可 ...

  5. 在Ubuntu下构建Bullet以及执行Bullet的样例程序

    在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  6. 在ubuntu下设置eclipse开发STM32等嵌入式设备

    之前为了能够让ROS与底层能够顺利通讯,我采用可开源开发板arduino ,因为arduino有ROS的库,能够按照ROS wiki上所给的教程就可以顺利的开发,但由于arduino的局限性,我觉得是 ...

  7. Ubuntu 下安装thttpd Web服务器

    不知道大家是不是真的需要用appache这么复杂的功能这么强大的web server,其实有很多时候使用webserver也只是一种远程共享访问的方式.这里,Ubuntu repository的提供了 ...

  8. Ubuntu下安装Apache+PHP+Mysql

    Ubuntu下安装 apache+php+mysql文本服务器! ------------------------------------------------------------------- ...

  9. Ubuntu下使用CMake编译OpenSSL源码操作步骤(C语言)

    OpenSSL的版本为1.0.1g,在ubuntu下通过CMake仅编译c代码不包括汇编代码,脚本内容如下: build.sh内容: #! /bin/bashreal_path=$(realpath ...

最新文章

  1. 【译】Object Dumper: 函数式程序设计编码中的强大工具
  2. java中toString的使用
  3. 最佳实践系列丨Docker EE 服务发现参考架构(二)
  4. CISCO专用协议CDP
  5. 启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例
  6. SpringCloud相关概念介绍
  7. P8-07-23 在 GitLab 提交代码后自动触发 Jenkins 构建;使用禅道进行项目管理
  8. nashorn js 调用 java_从nashorn(JDK 8 JavaScript引擎)调用char []输入参数调用Java函数?...
  9. python中怎么复制代码_Python对象怎么引用_Python对象怎么复制代码_一聚教程网
  10. java sort排序
  11. hihocoder1033交错和
  12. 分清函数指针和指针函数
  13. AI学习笔记(十四)CNN之图像分割
  14. Install deepin-wine QQ inside a docker image in Ubuntu 20.04
  15. Node.js及Express的下载、安装和配置教程
  16. 前端基础知识总结 (三)
  17. 解决word2019复制卡顿
  18. Springboot+基于知识图谱的短视频推荐系统设计与实现 毕业设计-附源码231115
  19. 关于8583报文详解
  20. firefox玩开心农场

热门文章

  1. 树莓派4B设置静态IP
  2. 理解Windows内核模式与用户模式(新)
  3. php 分布式环境 启动,极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)...
  4. linux tar压缩包目录,如何在Linux上使用tar命令解压和压缩文件
  5. 【学术相关】博士毕业也会看第一学历吗?
  6. 【Python基础】快速入门Python(讲解、习题)
  7. 【NLP】不讲武德,只用标签名就能做文本分类
  8. 【论文解读】CIKM20-MiNet:阿里|跨域点击率预估混合兴趣模型
  9. 解读:一种来自Facebook团队的大规模时间序列预测算法(附github链接)
  10. 总结和展望:情感分析研究的新视野