设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

写给系统管理员的 25 个 PHP 安全实践

2013-12-26 11:39| 发布者: 红黑魂| 查看: 7798| 评论: 0|来自: 伯乐在线

摘要: PHP是广泛使用的开源服务端脚本语言。通过HTTP或HTTPS协议,Apache Web服务允许用户访问文件或内容。服务端脚本语言的错误配置会导致各种问题。因此,PHP应该小心使用。以下是为系统管理员准备的,安全配置PHP的25个 ...

#17:保证PHP,软件及操作系统更新到最新

维护Linux、Apache、PHP和MySQL服务器的一项重要工作是更新安全补丁。所有的PHP安全更新应尽快进行审查并更新。可使用如下命令(如果通过包管理器来安装PHP):

1
# yum update

1
# apt-get update && apt-get upgrade

可以配置Red Hat / CentOS / Fedora Linux通过Email发送yum的包更新提醒,或是Debian / Ubuntu Linux下的apticron发送提醒。又或通过cron计划任务进行更新。

注:查看php.net以获取最新的PHP版本信息

 

#18:限制文件及目录访问

确认以Apache或www这种非root用户运行Apache。/var/www/html目录下的owner也应是非root用户:

1
# chown -R apache:apache /var/www/html/

DocumentRoot下的文件应禁止运行或创建。设置该目录下的文件权限为0444(只读):

1
# chmod -R 0444 /var/www/html/

设置该目录下的所有文件夹权限为0445

1
# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}

 

#19:Apache、PHP、MySQL配置文件的写入保护

使用chattr命令给这些配置文件加上写入保护:

1
2
3
4
5
# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/

同样可以为/var/www/html目录加上写入保护

1
# chattr +i /var/www/html/file1.php# chattr +i /var/www/html/

 

#20:使用Linux安全拓展(如SELinux)

Linux有各种安全方案来防止服务程序的错误配置或漏洞。尽可能使用SELinux或其他Linux安全方案限制网络和程序。例如,SELinux为Linux内核或Apache Web服务提供不同的安全策略。使用下面命令列出所有Apache保护信息:

1
# getsebool -a | grep httpd

样例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
allow_httpd_anon_write --> off
 allow_httpd_mod_auth_ntlm_winbind --> off
 allow_httpd_mod_auth_pam --> off
 allow_httpd_sys_script_anon_write --> off
 httpd_builtin_scripting --> on
 httpd_can_check_spam --> off
 httpd_can_network_connect --> off
 httpd_can_network_connect_cobbler --> off
 httpd_can_network_connect_db --> off
 httpd_can_network_memcache --> off
 httpd_can_network_relay --> off
 httpd_can_sendmail --> off
 httpd_dbus_avahi --> on
 httpd_enable_cgi --> on
 httpd_enable_ftp_server --> off
 httpd_enable_homedirs --> off
 httpd_execmem --> off
 httpd_read_user_content --> off
 httpd_setrlimit --> off
 httpd_ssi_exec --> off
 httpd_tmp_exec --> off
 httpd_tty_comm --> on
 httpd_unified --> on
 httpd_use_cifs --> off
 httpd_use_gpg --> off
 httpd_use_nfs --> off

取消Apache cgi支持可以输入:

1
# setsebool -P httpd_enable_cgi off

详细参考:Red Hat SELinux guide

 

#21:安装Mod_security

ModSecurity是一个开源的入侵检测和防范的Web应用引擎。安装mod_security可以保护Apache和PHP应用免受XSS和其他攻击:

1
2
3
4
5
6
7
## A few Examples ##
 # Do not allow to open files in /etc/
 SecFilter /etc/
 
 # Stop SQL injection
 SecFilter "delete[[:space:]]+from"
 SecFilter "select.+from"

 

#22:如有可能,在Chroot Jail下运行Apache / PHP

在Chroot Jail下运行Apache / PHP可以最小化可能受到的损失,使其局限于文件系统下的一小块。可以使用一般的chroot来配置Apache:chroot kind of setup with Apache。不过我建议使用FreeBSD jails、XEN,KVM或OpenVZ虚拟化。

 

#23:使用防火墙限制传出连接

攻击者会使用wget之类的工具从你的Web服务器下载文件。使用iptables来阻挡Apache用户的传出连接。ipt_owner模块会为本地数据包的生成者分配不同角色。它只对OUTPUT chain有效。下面指令允许vivek用户通过80端口进行外部访问:

1
/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED  -j ACCEPT

下面的样例则是阻挡所有Apache用户的传出连接,只允许smtp服务及spam识别API服务通过:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# .... 
 /sbin/iptables --new-chain apache_user
 /sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 /sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
 # allow apache user to connec to our smtp server
 /sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
 # Allow apache user to connec to api server for spam validation
 /sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.62 --dport 80 -j RETURN
 /sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.61 --dport 80 -j RETURN
 /sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.89 --dport 80 -j RETURN
 /sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.88 --dport 80 -j RETURN
 #########################
 ## Add more rules here ##
 #########################
 # No editing below
 # Drop everything for apache outgoing connection
 /sbin/iptables --append apache_user -j REJECT

 

#24:查看并审查日志

查看Apache日志文件:

1
2
3
# tail -f /var/log/httpd/error_log
 # grep 'login.php' /var/log/httpd/error_log
 # egrep -i "denied|error|warn" /var/log/httpd/error_log

查看PHP日志文件:

1
2
# tail -f /var/log/httpd/php_scripts_error.log
 # grep "...etc/passwd" /var/log/httpd/php_scripts_error.log

查看日志文件可以让你知道服务器正在承受何种攻击,并分析当前安全级别是否足够。启用审查服务用于系统审查,可审查SELinux时间,验证事件,文件修改,账号修改等。建议使用Linux System Monitoring Tools来监控Web服务器。

 

#25:把服务分离到不同的服务器或虚拟机

对于比较庞大的安装配置,建议把运行、数据库、静态与动态内容分离到不同的服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
///////////////
 / ISP/Router /
 //////////////
   \
    |
    Firewall
      \
       |
      +------------+
      | LB01       |
      +------------+                 +--------------------------+
                   |                 | static.lan.cyberciti.biz |
                   +-----------------+--------------------------+
                                     | phpcgi1.lan.cyberciti.biz|
                                     +--------------------------+
                                     | phpcgi2.lan.cyberciti.biz|
                                     +--------------------------+
                                     | mysql1.lan.cyberciti.biz |
                                     +--------------------------+
                                     | mcache1.lan.cyberciti.biz|
                                     +--------------------------+

在不同的服务器或虚拟机下运行不同的网络服务,这可以减少被入侵对其他服务的影响。例如,一个攻击者入侵了Apache,那就可以访问同一服务器下的其他服务(如MySQL,email服务等)。但在上述例子中则不会:

  • static.lan.cybercity.biz – 使用lighttpd或nginx存放js/css/images等静态资源
  • phpcgi1.lan.cyberciti.biz和phpcgi2.lan.cyberciti.biz – Apache Web服务+PHP,用于生成动态内容
  • mysql1.lan.cyberciti.biz – MySQL数据库服务
  • mcache1.lan.cyberciti.biz – Memcached服务(MySQL的高速缓存系统)。它使用libevent或epoll来适应任意连接数。而且它使用的是非阻塞网络IO。
  • LB01 – 一个Nginx服务器,用于Web及Apache前端的反向代理。所有的访问连接会通过nginx代理服务,被直接处理或分发到相应的Web服务器。LB01提供简单的负载均衡。



原文链接: Nix Craft   翻译: 伯乐在线 Kroderia
译文链接: http://blog.jobbole.com/53821/

酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部