免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: young_king
打印 上一主题 下一主题

[OpenBSD] [原创]OpenBSD.Nginx.MySQL.PHP环境搭建手册[第二版] [复制链接]

论坛徽章:
0
12 [报告]
发表于 2009-03-13 11:14 |只看该作者
OpenBSD.Nginx.MySQL.PHP环境搭建手册

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:54:45
11 [报告]
发表于 2009-03-12 23:48 |只看该作者
好久没有启动vmware里的openbsd 。。。。改天启动一下,试用一下onmp试试。。。

论坛徽章:
0
10 [报告]
发表于 2009-03-12 20:09 |只看该作者
精闢入裡,真是開了眼界

论坛徽章:
0
9 [报告]
发表于 2009-03-12 17:54 |只看该作者
顶两下!

论坛徽章:
0
8 [报告]
发表于 2009-03-12 17:28 |只看该作者
顶一下!

论坛徽章:
0
7 [报告]
发表于 2009-03-12 17:17 |只看该作者
今天不错,来的挺早

论坛徽章:
0
6 [报告]
发表于 2009-03-12 16:29 |只看该作者
1.snort ips

呵呵

[ 本帖最后由 wosl2001 于 2009-3-12 16:32 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-03-12 16:26 |只看该作者
接近赶上直播了

论坛徽章:
0
4 [报告]
发表于 2009-03-12 14:57 |只看该作者
OpenBSD.Apache.MySQL.PHP环境搭建手册[第一版]

一、OpenBSD.Apache.MySQL.PHP软件环境的安装

OpenBSD内核中已经集成了Apache,而且内置了对PHP的支持,所以安装MySQL、PHP环境非常的简单。

需要注意的是,在系统安装分区的时候,请按下面的示例进行分区(80G硬盘):

/200M
(swap)1G
/tmp200M
/usr500M
/usr/local200M
/var100M
/var/mysql10G
/var/mail100M
/var/log5G~10G
/home200M
/var/www剩余空间

在安装程序询问要安装的组件时,最好不要选择comp44.tgz这个包,系统安装到最后询问是否默认启动服务时,一律回答“No”。

halt重启后执行下面的命令安装必须的软件,以OpenBSD4.4为例进行讲解,root权限。
  1. export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/
  2. pkg_add wget mysql-server php5-gd-5.2.6-no_x11 phpMyAdmin pecl-APC
复制代码
等所需的软件都安装完成后,按提示作链接并创建PHP临时目录:

ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules
ln -fs /var/www/conf/php5.sample/apc.ini /var/www/conf/php5/apc.ini
ln -fs /var/www/conf/php5.sample/gd.ini /var/www/conf/php5/gd.ini
ln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.ini
ln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini
ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini
mkdir /var/www/tmp
chmod 0777 /var/www/tmp


二、使MySQL适应chroot环境

由于OpenBSD中的Apache默认工作于chroot环境下,无法直接与MySQL通信,所以需要修改下MySQL的配置文件,使之适应chroot环境。

执行下面的命令:
  1. mkdir -p /var/www/var/run/mysql
  2. chown _mysql:_mysql /var/www/var/run/mysql
复制代码
等到上面的命令都执行完成后,还需要修改MySQL的配置文件。
  1. vi /etc/my.cnf
复制代码
将[client]段的socket修改成:

socket          = /var/www/var/run/mysql/mysql.sock

将[mysqld]段的socket修改成:

socket          = /var/www/var/run/mysql/mysql.sock

在[mysqld]段增加:

skip-networking

其他的请酌情修改。

改完后保存退出。

三、phpMyAdmin的配置

在上面pkg_add phpMyAdmin以后,提示ln做个连接就可以用phpMyAdmin了。不过偶试了,是不行的,404错误。所以,我们需要把phpMyAdmin拷贝到/var/www/htdocs目录下面使用。
  1. mkdir /var/www/htdocs/pma
  2. cp -rf /var/www/phpMyAdmin/* /var/www/htdocs/pma/
复制代码
同样需要修改pma目录下的config.inc.php文件,加个字母即可。

其他关于PHP的强化、SSH强化、PF防火墙以及系统其他部分的安全强化,可以参照一楼和二楼的相关内容,这里就不罗嗦了。

另外,由于Apache已经是chroot,所以PHP的强化设置会略有不同,如下:

# 禁止动态加载模块
enable_dl = Off

# 隐藏PHP信息
expose_php = Off

# 限定可访问目录
# 注意此时的根目录实际是/var/www目录
open_basedir = /

# 设定PHP上传文件的临时目录
# 同理,此时的/tmp目录实际是/var/www/tmp目录
upload_tmp_dir=/tmp

# 禁用危险函数(注意下面的内容应该是一行,编排的原因分成了多行)
disable_functions = phpinfo,com,shell,exec,system,passthru,error_log,
stream_socket_server,putenv,ini_alter,ini_restore,ini_set,dl,openlog,
syslog,readlink,symlink,link,leak,fsockopen,pfsockopen,proc_open,
popepassthru,escapeshellcmd,escapeshellarg,chroot,scandir,
chgrp,chown,shell_exec,proc_get_status,popen,shmop_close,
shmop_delete,shmop_open,shmop_read,shmop_size,shmop_write

# 启用PHP的安全模式
safe_mode = On

# pecl-APC只使用16M的共享内存用以加速PHP程序的运行
apc.shm_size=16M


四、O.A.M.P.的启动

对于Apache来说,系统虽然提供了自动启动的方法,但是因为考虑到MySQL需要先启动,因此仍然在/etc/rc.local文件中解决。
  1. vi /etc/rc.local
复制代码
跳到最后,加入:

rdate -n 210.72.145.44
# Start MySQL
if [ -x /usr/local/bin/mysqld_safe ] ; then
   echo -n 'Starting MySQL...'
   su -c mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'
   echo "DONE"
fi
# Start Apache
apachectl start


五、提高O.A.M.P.环境的安全性

在O.A.M.P.环境下,除了可以和O.N.M.P.环境下一样设置提高安全性以外,在Apache环境下,还可以安装mod_security这个模块来提高web程序的安全性。
  1. export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/
  2. pkg_add modsecurity-apache
复制代码
安装完成后使用下面的命令启用mod_security:
  1. /usr/local/sbin/mod_security-enable
复制代码
mod_security可以用来抵御XSS和SQL注入等攻击,我们需要把一些“防御”指令加到mod_security的配置文件中:
  1. vi /var/www/conf/modules/modsecurity.conf
复制代码
输入下面的内容:
# 启用mod_security过滤
SecFilterEngine On

# 分析URL请求
SecFilterCheckURLEncoding On

# 检查字节长度以避免栈溢出攻击(数字请酌情修改)
SecFilterForceByteRange 32 126

# 有效记录日志信息
SecAuditEngine RelevantOnly

# 定义日志文件
SecAuditLog logs/audit_log

# 定义DEBUG文件
SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLevel 0

# 检查POST请求(某些POST请求可能会和这个冲突)
# 使用phpMyAdmin管理数据库时,某些操作会被这个拦截(例如新建数据库和用户时)
# 遇此情况,则把此行注释掉,重启Apache
# 操作完后记得恢复,以提高数据库的安全性
SecFilterScanPOST On

# 阻止返回406错误
SecFilterDefaultAction "deny,log,status:406"

# 阻止返回500错误
SecFilterDefaultAction "deny,log,status:500"

# 当攻击者使用chmod,chgrp,wget等命令的時候,重定向到特殊的页面(请自行酌情增减)
SecFilter chmod redirect:http://www.google.com
SecFilter chgrp redirect:http://www.google.com
SecFilter wget redirect:http://www.google.com

# 防止操作系统关键词攻击
SecFilter /bin
SecFilter /sbin
SecFilter /etc
SecFilter /bsd
SecFilter /usr
SecFilter /var

# 只接受知道如何处理的请求
# GET请求是个例外,是因为某些客户端把text/html当做请求内容的一部分
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Type "!(^application/x-www-form-urlencoded$|^multipart/form-data;)"

# 不接受仅有GET和HEAD头的请求
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"

# 要求每个POST请求提供长度
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"

# 不接受无法处理的转换
SecFilterSelective HTTP_Transfer-Encoding "!^$"

# 防止目录遍历攻击
SecFilter "\.\./"

# 防止跨站(XSS)攻击(HTML/Javascript注入)
SecFilter "<( |\n)*script"
SecFilter "<(.|\n)+>"

# 防止SQL注入攻击(简单示例,请自行完善)
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
SecFilter "union[[:space:]]+from"  
SecFilter "drop[[:space:]]"

# 需要HTTP头确认
SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"

# 呵呵~~~把服务器伪装成M$机器
ServerTokens Full
SecServerSignature "Microsoft-IIS/6.0"

# 限制upload.php文件只能用来上传jpeg,bmp和gif的文件(仅为示例,请酌情修改)
#<Location /upload.php>
#SecFilterInheritance Off
#SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"
#</Location>


在/usr/local/share/doc/mod_security目录下有pdf版本的使用手册,可以用PSFTP down下来仔细研究。自带的配置示例:
/usr/local/share/examples/mod_security/httpd.conf.example-minimal。

记住把mod_security的配置文件保存在/var/www/conf/modules目录,例如上面的:/var/www/conf/modules/modsecurity.conf

mod_security的配置按需修改好后,保存退出,重启Apache即可!

注意:上面的配置仅为示例,未必适合你的环境,请结合环境情况酌情修改!个别参数调整不当可能造成无法访问的后果!

写在最后

现在mod_security已经出到2.5.9版了,更多新特性,防护更全面,但是需要在Apache 2.0.x以上的环境下才能安装使用。而OpenBSD软件包中的Apache 2.2.8竟然不是chroot,安全起见,只能暂时作罢。

mod_security新版的过滤规则貌似和旧版有很大的变化,迟些日子看看能不能把新版的mod_security规则“翻译”到旧版下使用,届时再出O.A.M.P.手册第二版吧!  ^_^

对部分网友回复的解答:

====================================
67、68楼:
[quote]原帖由 dooros 于 2009-4-22 08:41 发表
运行下面的命令生成查看Nginx运行状态的密码文件:

[Copy to clipboard] [ - ]CODE:
htpasswd -c /etc/nginx/password webadmin

按提示输入两遍密码即可。

在查看status的时候,输入用户名webadmin(见上面这行)和密码就能够看到Nginx的运行数据了。

我只完成到这一步,怎么不能看到nginx运行?
已经删除IP限制,已经重启系统。

在bsd下lynx http://192.168.175.130/status也不能连接上。貌似nginx没启动?

原帖由 dooros 于 2009-4-22 09:09 发表
nginx -t -c /etc/nginx/nginx.conf
后,显示失败:
2009/04/21 12:42:12 [emerg] 21716#0: unknow directive "work_rlimit_nofile" in /etc/nginx/nginx.conf :11
2009/04/21 12:42:12 [emerg] 21716#0: t ...


  • 命令行下输入top看看,是否有nginx进程,即可判断nginx是否已启动(二楼的帖子最后有截图)。

    nginx正常启动后,在浏览器中输入:http://192.168.175.130/status即可看到nginx的运行状态。
  • 出现上面的提示,是因为你输入的参数有误。仔细看下,应该是worker,而不是work。

    其实你可以在PuTTY中使用复制、粘贴的方法把这些命令啊、配置文件啊等东东都搞定的,无须手动输入(复制好后,在PuTTY中鼠标右键粘贴即可)。

    某些虚拟机软件也有复制、粘贴的功能,就不会出现拼写的错误了,请自行查一下。
[/quote]

====================================
73楼:
[quote]原帖由 dooros 于 2009-4-24 13:57 发表
新问题,如果我要安装一个Discuz如何像使用虚拟空间那样,把文件上传上去,然后开始安装呢?是不是要自己设置开启ftp服务?(关键是不知道怎么才可以使上传的文件正好在/var/nginx/html文件夹里)


无须开启FTP服务,简单点说。
  1. export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/
  2. pkg_add unzip
  3. cd /tmp
  4. wget http://download.comsenz.com/UCenter/1.5.0/UCenter_1.5.0_SC_UTF8.zip
  5. mkdir /var/nginx/html/uc
  6. unzip UCenter_1.5.0_SC_UTF8.zip
  7. cp -rf /tmp/upload/* /var/nginx/html/uc
  8. rm -rf /tmp/*
  9. ...
  10. ...
  11. wget http://download.comsenz.com/Discuz/7.0.0/Discuz_7.0.0_SC_UTF8.zip
  12. mkdir /var/nginx/html/bbs
  13. unzip Discuz_7.0.0_SC_UTF8.zip
  14. cp -rf /tmp/upload/* /var/nginx/html/bbs
  15. rm -rf /tmp/*
  16. ...
  17. ...
复制代码
明白?

如果是本机上的文件,需要传到服务器上,记得二楼曾经说过的PSFTP?仍然无须开启FTP服务。[/quote]

====================================
77楼:
[quote]原帖由 czjin 于 2009-5-10 20:49 发表
openbsd4.5已出来了,不知在安装Nginx Mysql PHP eAccelerator Zend Optimizer 等方面会与openbsd4.4有什么不同?我准备在VM机上测试,碰到问题再请教楼主。




[/quote]

[ 本帖最后由 young_king 于 2009-5-11 09:53 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
3 [报告]
发表于 2009-03-12 14:49 |只看该作者
坐好板凳,认真听讲!
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP