Web服务器的搭建
Web服务器的搭建
搭建环境 : LAMP(Linux+Apache+MySQL+PHP)
LNMP(Linux+nginx+MySQL+php)
安装方式:apt-get
一.Nginx
1.安装Nginx
apt-get update
apt-get upgrade
//更新可获取软件及其版本信息
apt-get install nginx
2. 查看nginx版本
当安装进程完成后,查看安装好的Nginx版本:
nginx -v
3. 查看Nginx运行状态
service nginx status
4.访问nginx
查看路径
ls /var/www/html
浏览器中访问localhost/index.nginx-debian.html
二.PHP
1.安装php
apt-get install php
2.查看php版本
php -v
3.安装FastCgi及php必要扩展
apt-get install spawn-fcgi
apt-get install php-pear
apt-get install php7.4-cgi
4.修改nginx配置文件(让其支持php)
进入此目录
vi /etc/nginx/sites-available/default
此行增加index.php
去掉下面部分的注释用于支持php脚本,去掉注释后如下:
4.重启nginx
service nginx restart
5.查看php相关信息
在访问目录下创建phpinfo.php文件
vi /var/www/html/
编辑
<?php
phpinfo();
?>
然后浏览器中访问localhost/phpinfo.php
6.配置虚拟主机
创建一个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,访问地址得到
三.Apache
1.安装apache2
apt-get install apache2
2.查看apache版本
apache2 -v
3.访问apache2
3.安装php apache mod
apt-get install libapache2-mod-php
4.安装php插件
apt-get install php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-zip
5.查看php相关信息
访问localhost/phpinfo.php
6.配置虚拟主机
修改文件
vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin aaa@qq.com
DocumentRoot /var/www/html/project
ServerName www.youwen.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
重启apache
然后配置域名,
vi /etc/hosts
增加一行如下:
在先前路径文件下创建index.php文件,编辑如下:
vi /var/www/html/project/index.php
打开浏览器,访问www.youwen.com
四.MySQL
1.安装mysql
apt-get install mysql-server mysql-client
2.mysql相关设置
为了让数据库更安全和正常运转,进行初始化操作
mysql_secure_installation
–为root用户设置密码
–删除匿名账号
–取消root用户远程登录
–删除test库和对test库的访问权限
–刷新授权表使修改生效
3.登录MySQL
mysql -uroot -p
password
查看数据库
SHOW DATABASES;
退出 quit
4.php连接mysql
在能够访问并处理数据库中的数据之前,必须创建到达数据库的连接。
在 PHP 中,这个任务通过 mysqli_connect() 函数完成。
连接方式 MySQLi - 面向过程
在 /var/www/html/project 创建connect.php
<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'debian-sys-maint'; // mysql用户名
$dbpass = 'PGpiTZ2V1aeDHuZg'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
echo '数据库连接成功!';
mysqli_close($conn);
?>
#安装后默认用户的用户名及密码,获取如下:
cat /etc/mysql/debian.cnf
验证
五.web服务器加固
1.php 安全配置
(1)运行用户
确保运行php的用户为一般用户,如www
(2) php.ini 配置
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/#限制用户访问的目录
2.MySQL安全设置
(1)网络和端口的配置
- 在数据库只需供本机使用的情况下,使用 –skip-networking 参数禁止监听网络 。
- 数据库若使用云数据库,则限制只能内网访问,禁止外网连接
(2) 用户权限
- 确保运行 MySQL 的用户为一般用户,如 mysql,注意存放数据目录权限为mysql
vi/etc/my.cnf
user = mysql
(3)历史日志
开启mysql二进制日志,在误删除数据的情况下,可以通过二进制日志恢复到某个时间点
vi/etc/my.cnf
log_bin = mysql-bin
expire_logs_days = 7
(4)认证和授权
- 禁止root账号从网络访问数据库,root账号只允许来自本地主机的登陆。
mysql>grant all privileges on *.* to aaa@qq.com 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=;
3.WEB 服务器安全
(1)Git泄漏
- 禁止访问:/.git/
(2)用户权限
确保运行 Nginx 或者 Apache 的用户为一般用户,如 www,注意存放数据目录权限为 www
(3) 防止 sql 注入
if( $query_string ~* ".*[\;'\<\>].*"){
return404;
}
(4) URL 解析
- 关闭存放数据上传等目录的 PHP 解析
location ~* ^/(attachments|data)/.*\.(php|php5)${
deny all;
}
- 针对Apache:关闭图片目录/上传等目录的PHP解析
order allow,deny
Deny from all
5.木马查杀和防范
(1) 快速查找
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
(2) 防范
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"
上一篇: django连接MySQL