PHP网站在Linux服务器上安全设置方案

现在越来越多的网站采用LAMP模式开发,但是网络安全问题也越来越多,其中的一些安全设置必须要知道。本文总结了PHP网站在Linux服务器上一些安全设置,如果有什么更好的设置,请留言交流,大家一起讨论学习。

PHP安全配置

php.ini参数设置

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
####禁用的函数
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,
proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,
symlink,popepassthru,stream_socket_server,fsocket,phpinfo

####避免暴露PHP信息
expose_php = off

####屏蔽错误信息
display_errors = off

####禁止dl文件
enable_dl = off

####禁止远程加载文件
allow_url_include = off

####设定上传目录
upload_tmp_dir = /tmp

####指定用户可访问文件路径
open_basedir = ./:/tmp:/home/wwwroot/

####关闭注册全局变量
register_globals = Off

####不持久化存储 cookie 数据
session.cookie_lifetime=0

####用cookie保存sesion id
session.use_cookies=On

####禁止 JavaScript 访问会话 cookie
session.cookie_httponly=On

####防止会话模块使用未初始化的会话 ID
session.use_strict_mode=On

####禁用透明会话 ID
session.use_trans_sid=Off

####不缓存会话内容
session.cache_limiter=nocache

MySQL安全设置

1、MySQL版本的选择
在正式生产环境中,禁止使用4.1系列的MySQL数据库。至少需要使用5.1.39或以上版本。
2、网络和端口的配置
在数据库只需供本机使用的情况下,使用–skip-networking参数禁止监听网络 。
修改MySQL默认的端口,比如:3389

1
2
3
4
5
6
vi /etc/my.cnf
[client]
port = 3389

[mysqld]
port = 3389

3、确保运行MySQL的用户为一般用户,如mysql,注意存放数据目录权限为mysql

1
2
vi /etc/my.cnf
user = mysql

4、开启mysql二进制日志,在误删除数据的情况下,可以通过二进制日志恢复到某个时间点

1
2
3
vi /etc/my.cnf
log_bin = mysql-bin
expire_logs_days = 7

5、认证和授权
(1)禁止root账号从网络访问数据库,root账号只允许来自本地主机的登陆。

1
2
mysql>grant all privileges on *.* to root @localhost identified by 'password' with grant option;
mysql>flush priveleges;

(2)删除匿名账号和空口令账号

1
2
3
4
mysql>USE mysql;
mysql>delete from user where User=;
mysql>delete from user where Password=;
mysql>delete from db where User=;

web服务器安全

1、确保运行Nginx或者Apache的用户为一般用户,如www,注意存放数据目录权限为www
2、防止sql注入

1
2
3
if ( $query_string ~* ".*[;'<>].*" ){
        return 404;
}

3、关闭存放数据上传等目录的PHP解析

1
2
3
location ~* ^/(attachments|data)/.*.(php|php5)${
    deny all;
}

4、针对Apache:关闭图片目录/上传等目录的PHP解析

1
2
3
4
<Files ~ ".php">
order allow,deny
Deny from all
</Files>

5、禁止访问网站.svn文件

1
2
3
4
5
6
7
8
9
###apache
<Directory ~ ".svn">
Order allow,deny
Deny from all
</Directory>
###nginx
location ~* /.svn {
    deny  all;
}

linux服务器

1、木马查杀和防范

1
2
3
4
5
6
7
8
9
10
11
###php木马快速查找命令
grep -r --include=*.php '[^a-z]eval($_POST' /home/wwwroot/
grep -r --include=*.php 'file_put_contents(.*$_POST[.*]);' /home/wwwroot/

###利用find mtime查找最近两天或者发现木马的这几天,有哪些PHP文件被修改
find -mtime -2 -type f -name *.php

###改变目录和文件属性
find -type f -name *.php -exec chomd 644 {} ;
find -type d -exec chmod 755 {} ;
chown -R www.www /home/wwwroot/

2、为防止跨站感染,需要做虚拟主机目录隔离
(1)nginx的简单实现方法
利用nginx跑多个虚拟主机,习惯的php.ini的open_basedir配置:

1
open_basedir = ./:tmp:/home/wwwroot/

注:/home/wwwroot/是放置所有虚拟主机的web路径
黑客可以利用任何一个站点的webshell进入到/home/wwwroot/目录下的任何地方,这样对各个虚拟主机的危害就很大
例如:/data/www/wwwroot目录下有2个虚拟主机
修改php.ini

1
open_basedir = ./:/tmp:/home/wwwroot/aaa.com:/home/wwwroot/bbb.com

这样用户上传webshell就无法跨目录访问了。
(2)Apache的实现方法,控制跨目录访问
在虚拟机主机配置文件中加入

1
2
3
<VirtuanHost *:80>
php_admin_value open_basedir "/tmp:/home/wwwroot/aaa.com"
</VirtuanHost>

3、修改ssh的端口及禁止root账号ssh登录

1
2
3
4
5
vi /etc/ssh/sshd_confing
##修改端口为8888(这个可以自定义)
Port 8888
##禁止以root账号登录
PermitRootLogin no

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » PHP网站在Linux服务器上安全设置方案

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏