搭建环境 : LAMP(Linux+Apache+MySQL+PHP)
LNMP(Linux+nginx+MySQL+php)
安装方式:apt-get
apt-get update
apt-get upgrade
//更新可获取软件及其版本信息
apt-get install nginx
当安装进程完成后,查看安装好的Nginx版本:
nginx -v
service nginx status
查看路径
ls /var/www/html
浏览器中访问localhost/index.nginx-debian.html
apt-get install php
php -v
apt-get install spawn-fcgi
apt-get install php-pear
apt-get install php7.4-cgi
进入此目录
vi /etc/nginx/sites-available/default
此行增加index.php
去掉下面部分的注释用于支持php脚本,去掉注释后如下:
service nginx restart
在访问目录下创建phpinfo.php文件
vi /var/www/html/
编辑
然后浏览器中访问localhost/phpinfo.php
创建一个test文件(虚拟主机配置文件)
vi /etc/nginx/sites-available/test
编辑如下:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
配置域名
vi /etc/hosts
创建一个软链接到/etc/nginx/sites-enabled/目录下,使配置文件生效
ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/
在/var/www/example.com中创建一个index.html,随便输出,重启nginx,访问地址得到
apt-get install apache2
apache2 -v
apt-get install libapache2-mod-php
apt-get install php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-zip
访问localhost/phpinfo.php
修改文件
vi /etc/apache2/sites-available/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/project
ServerName www.youwen.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
重启apache
然后配置域名,
vi /etc/hosts
增加一行如下:
在先前路径文件下创建index.php文件,编辑如下:
vi /var/www/html/project/index.php
打开浏览器,访问www.youwen.com
apt-get install mysql-server mysql-client
为了让数据库更安全和正常运转,进行初始化操作
mysql_secure_installation
–为root用户设置密码
–删除匿名账号
–取消root用户远程登录
–删除test库和对test库的访问权限
–刷新授权表使修改生效
mysql -uroot -p
password
查看数据库
SHOW DATABASES;
退出 quit
在能够访问并处理数据库中的数据之前,必须创建到达数据库的连接。
在 PHP 中,这个任务通过 mysqli_connect() 函数完成。
连接方式 MySQLi - 面向过程
在 /var/www/html/project 创建connect.php
#安装后默认用户的用户名及密码,获取如下:
cat /etc/mysql/debian.cnf
验证
确保运行php的用户为一般用户,如www
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_exec,proc_get_status,stream_socket_server,fsocket,phpinfo #禁用函数
expose_php = off #避免暴露PHP信息
display_errors = off #关闭错误信息提示
register_globals = off #关闭全局变量
enable_dl = off #不允许调用dl
allow_url_include = off #避免远程调用文件
session.cookie_httponly = 1 #http only开启
upload_tmp_dir = /tmp#明确定义upload目录
open_basedir = ./:/tmp:/home/wwwroot/#限制用户访问的目录
vi/etc/my.cnf
user = mysql
开启mysql二进制日志,在误删除数据的情况下,可以通过二进制日志恢复到某个时间点
vi/etc/my.cnf
log_bin = mysql-bin
expire_logs_days = 7
mysql>grant all privileges on *.* to root@localhost identified by 'password' with grant option;
mysql>flush priveleges;
mysql>USE mysql;
mysql>delete from user where User=;
mysql>delete from user where Password=;
mysql>delete from db where User=;
确保运行 Nginx 或者 Apache 的用户为一般用户,如 www,注意存放数据目录权限为 www
if( $query_string ~* ".*[\;'\<\>].*"){
return404;
}
location ~* ^/(attachments|data)/.*\.(php|php5)${
deny all;
}
order allow,deny
Deny from all
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 -typef -name \*.php
1) 做好之前的安全措施,比如禁用相关PHP函数等
2) 改变目录和文件属性
find -typef -name \*.php -exec chomd 644 {} \;
find -typed -exec chmod755 {} \;
chown -R www.www /home/wwwroot/www.xxx.cn
3) 目录隔离
为防止跨站感染,需要做虚拟主机目录隔离
① nginx 的简单实现方法
利用nginx跑多个虚拟主机,习惯的php.ini的open_basedir配置:
open_basedir = ./:tmp:/home/wwwroot/
注:/home/wwwroot/是放置所有虚拟主机的web路径
黑客可以利用任何一个站点的webshell进入到/home/wwwroot/目录下的任何地方,这样对各个虚拟主机的危害就很大
例如: /data/www/wwwroot目录下有2个虚拟主机
修改php.ini:
open_basedir = ./:/tmp:/home/wwwroot/www.sinesafe.com:/home/wwwroot/back.sinesafe.com
这样用户上传webshell就无法跨目录访问了。
② Apache的实现方法,控制跨目录访问
在虚拟机主机配置文件中加入
php_admin_value open_basedir "/tmp:/home/wwwroot/www.sinesafe.com"
多个虚拟主机,习惯的php.ini的open_basedir配置:
open_basedir = ./:tmp:/home/wwwroot/
注:/home/wwwroot/是放置所有虚拟主机的web路径
黑客可以利用任何一个站点的webshell进入到/home/wwwroot/目录下的任何地方,这样对各个虚拟主机的危害就很大
例如: /data/www/wwwroot目录下有2个虚拟主机
修改php.ini:
open_basedir = ./:/tmp:/home/wwwroot/www.sinesafe.com:/home/wwwroot/back.sinesafe.com
这样用户上传webshell就无法跨目录访问了。
② Apache的实现方法,控制跨目录访问
在虚拟机主机配置文件中加入
php_admin_value open_basedir "/tmp:/home/wwwroot/www.sinesafe.com"