一、实验介绍
需求
搭建一个对外提供服务的动态论坛网站,数据库要设置主从同步,为了避免黑客入侵服务器,还需设置密钥认证,通过跳板服务器来对web服务器进行访问
技术
1.Linux操作系统的基础命令(cd、cp、ls、mv、ps、grep、vi、yum等)
2.MySQL数据库增、删、改、查等基础命令操作
3.下载使用sshd、nginx、php、mysql等服务
4.搭建mysql主从同步
5.使用sshd服务进行远程连接跳板机操作
安全
为了提高Linux服务器的安全性,本次项目我们采取了以下措施:
1.配置SSH:通过使用密钥认证实现远程跳板连接,并配置更加安全的SSH选项,如禁止root用户登录、更改端口号、限制IP访问等。
2.强化密码策略:设置了极其复杂且不易猜测的密码。
3.设置数据库主从同步:备份服务器数据,以防止数据丢失或被攻击者加密勒索。
二、拓扑图
三、基础配置
1、配置ip,网关
修改网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络服务
systemctl restart network
测试ping外网,测试成功
2、准备三台centos7的虚拟机,首先按照拓扑图修改主机名,方便理清思路。
修改主机名命令:hostnamectl set-hostname (跟修改的主机名)bash运行
3、三台主机关闭防火墙/selinux
关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
关闭selinux
setenforce 0
vi /etc/selinux/config
验证selinux是否关闭:getenforce
vi /etc/selinux/config:SELINUX-disabled将enforcing修改为disabled
四、先用web_server01这台主机部署LNMP环境,提供discuz企业论坛(Nginx、PHP、MySQL(主库))
1、环境准备完我们在web_server这台主机上来安装Nginx,设置Nginx源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
2、安装nginx服务
yum install nginx -y
(1)设置nginx开机启动并开启nginx服务
systemctl enable nginx.service
systemctl start nginx.service
(2)查看Nginx的状态,如果显示“running”那就说明启动成功了
systemctl status nginx.service
(3)测试是否可以访问Nginx 或使用浏览器访问IP地址
(4)更改Nginx的配置文件(更改默认html路径及增加一些内容)
替换Nginx配置文件(直接替换原文件即可)
vi /etc/nginx/nginx.conf
user nginx nginx;
worker_processes 4;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 10240;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
(5)替换default.conf(替换即可)
server {
listen 80;
server_name www.lnmp.com;
charset utf-8;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /status
{
stub_status on;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
(6)改变了服务配置文件,所以需要重新启动服务
systemctl restart nginx.service
systemctl status nginx.service
3、安装配置MySQL数据库服务器并更改默认密码
(1)下载安装MySQL
wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
(2)安装前环境检查
检查Linux是否安装了mariadb数据库,mariadb数据库是mysql的分支,执行命令:
yum list installed | grep mariadb 或 rpm -qa | grep mariadb
若Linux中安装了mariadb数据库,先卸载掉,mariadb数据库与安装mysql会发生冲突,执行命令:
yum -y remove mariadb-libs.x86_64
(3)解压下载下来的MySQL软件压缩包,执行命令
tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
其中 -C /usr/local 是指定解压到哪个目录下去
(4)将解压后的mysql-5.7.18-linux-glibc2.5-x86_64改名为mysql5.7.18
cd /usr/local/
mv mysql-5.7.18-linux-glibc2.5-x86_64 mysql5.7.18
(5)在mysql5.7.18文件夹目录下创建一个 /data的文件夹,切换到mysql5.7.18目录,执行命令:
mkdir /usr/local/mysql5.7.18/data
(6)添加mysql用户及用户组,执行命令:
useradd mysql
(7)切换到mysql5.7.18/bin目录下执行:
cd /usr/local/mysql5.7.18/bin/
./mysqld --initialize-insecure --user=mysql --datadir=/usr/local/mysql5.7.18/data --basedir=/usr/local/mysql5.7.18
其中 --initialize-insecure 表示不生成临时密码,默认密码为空
(8)在mysql5.7.18/bin目录下执行命令
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql5.7.18/data
(9)更改mysql5.7.18整个文件夹目录权限所属,执行命令:
chown -R mysql:mysql /usr/local/mysql5.7.18/
(10)配置
在mysql5.7.18/data目录下创建my.cnf文件
配置my.cnf文件
[client]
port=3306
socket=/usr/local/mysql5.7.18/data/mysql.sock
default-character-set=utf8
[mysqld]
port=3306
socket=/usr/local/mysql5.7.18/data/mysql.sock
datadir=/usr/local/mysql5.7.18/data
log-error=/usr/local/mysql5.7.18/data/error.log
pid-file=/usr/local/mysql5.7.18/data/mysql.pid
character-set-server=utf8
lower_case_table_names=1
autocommit=1
(11)启动MySQL服务,在mysql5.7.18/bin目录下执行命令:
/usr/local/mysql5.7.18/bin/mysqld_safe --defaults-file=/usr/local/mysql5.7.18/data/my.cnf &
(12)登录进入MySQL,在mysql5.7.18/bin目录下执行命令:
/usr/local/mysql5.7.18/bin/mysql -uroot -p -S /usr/local/mysql5.7.18/data/mysql.sock
密码默认为空,直接回车即可
其中 -p 是指定密码,没有密码,则可以不写 -p,-S是指定sock文件
(13)修改MySQL的密码,执行:
mysql> alter user 'root'@'localhost' identified by '123456';
其中123456是我们设置的密码
/usr/local/mysql5.7.18/bin/mysql -uroot -p123456 -P3306 -h127.0.0.1
4、安装配置PHP环境
(1)安装php7的YUM源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
(2)安装PHP7.2
yum install php72w php72w-cli php72w-common php72w-gd php72w-ldap php72mbstring php72w-mcrypt php72w-mysql php72w-pdow -y
(3)安装php-fpm并启动
yum install php72w-fpm php72w-opcache -y
systemctl enable php-fpm.service
systemctl start php-fpm.service
systemctl status php-fpm.service
(4)修改php-fpm配置文件
vim /etc/php-fpm.d/www.conf
[www]
user = nginx
group = nginx
(5)调整nginx配置文件
修改这一区块的内容
vi /etc/nginx/conf.d/default.conf
添加内容到location ~ .php$ 这个区块内 修改目录位置并取消注释
(6)重新启动nginx和php-fpm服务
(7)创建MySQL数据库管理员
mysql> create user 'dbadmin'@'%' identified with mysql_native_password by 'Com.123456';
mysql> grant all on *.* to 'dbadmin'@'%';
mysql> grant GRANT OPTION on *.* to 'dbadmin'@'%';
mysql> flush privileges;
(8)LNMP环境测试
(9)在客户端访问:192.168.88.142/test.php (可以看到php的测试界面 可以看到你安装了哪些具体的组件)
注:192.168.88.142就是nginx web服务器的ip地址
(10)测试是否可以连接MySQL数据库文件
这里的Com.123456是dbadmin用户的密码,如果全程复制我的代码那么是Com.123456 自行修改
Vi mysql_test.php
5、下载Discuz论坛文件
Discuz现在在gitee.com进行维护,地址为:
https://gitee.com/Discuz/DiscuzX/attach_files/1344965/download
#可进入网站自行下载https://gitee.com/Discuz 或上传Discuz压缩包到虚拟机
#也可以使用我提供的Discuz软件包
cd DiscuzX-master/
(1)建立Discuz论坛所用数据库
打开mysql
/usr/local/mysql5.7.18/bin/mysql -udbadmin -p -S /usr/local/mysql5.7.18/data/mysql.sock
(2)安装Discuz论坛
解决所有文件权限,需要可写权限
cd /usr/share/nginx/html/upload/
chmod -R 777 ./config/ ./data/ ./uc_client/ ./uc_server/
chown nginx:nginx /usr/share/nginx/html/upload/
(3)在客户端使用浏览器打开
网站地址:http://192.168.88.142/upload/install/, 会显示以下安装界面:
五、用主机db_server02部署MySQL数据库作为192.168.88.142服务器的从库
1、确保主mysql主机和从mysql主机日期和时间要一致
在主从节点上进行时间同步
yum -y install ntpdate
ntpdate ntp1.aliyun.com
在web_server01主机上执行
在db_server02主机上执行
2、安装MySQL
3、检查系统是否安装了mariadb数据库
检查命令:yum list installed | grep mariadb
卸载mariadb
若Linux中安装了mariadb数据库,先卸载掉,mariadb数据库可能与安装MySQL发生冲突,执行命令:yum -y remove mariadb-libs.x86_64
解压下载的MySQL软件压缩包,
执行命令:tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
4、修改解压后的文件名
将解压后的mysql-5.7.18-linux-glibc2.5-x86_64改名为mysql5.7.18 ,查看原文件夹名称,在/usr/local目录中执行ll
修改文件夹名称,执行:
mv mysql-5.7.18-linux-glibc2.5-x86_64 mysql5.7.18
5、创建数据文件夹data
data文件夹是MySQL用来存放数据库文件的,数据库的表数据都放在data目录。
默认没有data目录,可以手工创建data目录,在mysql5.7.18文件夹目录下创建一个data文件夹,切换到mysql5.7.18目录,执行创建文件夹命令
mkdir data
6、创建用户执行mysqld命令
创建MySQL用户,用来执行MySQL的命令mysqld,此命令用来初始化MySQL基础信息。
参考地址:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
执行命令:
useradd mysql
切换到mysql5.7.18/bin目录下执行:
./mysqld --initialize-insecure --user=mysql --datadir=/usr/local/mysql5.7.18/data --basedir=/usr/local/mysql5.7.18
其中 --initialize-insecure 表示不生成临时密码,为空
7、在mysql5.7.18/bin目录下执行命令:
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql5.7.18/data
8、更改mysql5.7.18整个文件夹目录权限所属,执行命令:
chown -R mysql:mysql /usr/local/mysql5.7.18/
配置
在mysql5.7.18/data目录下创建my.cnf文件
配置my.cnf文件
[client]
port=3306
socket=/usr/local/mysql5.7.18/data/mysql.sock
default-character-set=utf8
[mysqld]
port=3306
socket=/usr/local/mysql5.7.18/data/mysql.sock
datadir=/usr/local/mysql5.7.18/data
log-error=/usr/local/mysql5.7.18/data/error.log
pid-file=/usr/local/mysql5.7.18/data/mysql.pid
character-set-server=utf8
lower_case_table_names=1
autocommit=1
9、启动MySQL服务,在mysql5.7.18/bin目录下执行命令:
./mysqld_safe --defaults-file=/usr/local/mysql5.7.18/data/my.cnf &
其中 & 符号表示后台启动
启动后的事项,修改密码
登录进入MySQL,在mysql5.7.18/bin目录下执行命令:
./mysql -uroot -p -S /usr/local/mysql5.7.18/data/mysql.sock
六、配置web_server01与 db_server02同步
1、主服务器配置
在主数据库服务器上创建要同步的数据库库
/usr/local/mysql5.7.18/bin/mysql -uroot -p -S /usr/local/mysql5.7.18/data/mysql.sock
2、创建主从复制的授权用户:
mysql> grant replication slave on *.* to slave@192.168.88.143 identified by "123456";
3、配置my.cnf文件
4、重启mysqld服务
停止mysql:
/usr/local/mysql5.7.18/bin/mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown
Enter password:输入数据库管理员root的密码
启动mysql:
/usr/local/mysql5.7.18/bin/mysqld_safe --defaults-file=/usr/local/mysql5.7.18/data/my.cnf &
验证mysqld服务是否启动
netstat -anplt | grep mysqld
查看master状态信息:
5、导出数据库
复制前要保证同步的数据库一致
6、将导出的数据库传给从服务器
scp discuz.sql root@192.168.88.143:~
7、配置从数据库服务器
测试从服务器连接到主服务器是否成功
/usr/local/mysql5.7.18/bin/mysql -h 192.168.88.142 -uslave -p
8、导入数据库,和主数据库服务器保持一致
/usr/local/mysql5.7.18/bin/mysql -uroot -p -S /usr/local/mysql5.7.18/data/mysql.sock
9、修改从服务器配置文件:
10、重启mysql服务
停止mysql:
/usr/local/mysql5.7.18/bin/mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown
启动mysql:
/usr/local/mysql5.7.18/bin/mysqld_safe --defaults-file=/usr/local/mysql5.7.18/data/my.cnf &
11、配置从服务器指向主库信息
change master to master_host='192.168.88.142',master_user='slave',master_password='123456',master_log_file='mysql-bin-master.000002',master_log_pos=154;
12、验证:查看slave的状态
13、在主服务器上查看binlog dump线程
七、部署sshd服务,担任跳板机连接web_server01\db_server02
(1)新增用户设置密码
在主机jumpserver上新增普通用户admin1并为其设置复杂密码(需要两次输入相同密码),密码建议为:1234@abc
(2)为新增的普通用户admin提权,即可以使用sudo命令切换成root管理员账号
先使用 visudo 命令打开配置文件,并在该配置文件的最后增加一行配置
(3) 创建密钥对
(4) 确认生成的密钥对
新生成的密钥文件中,id_rsa是私钥文件,权限默认为600,对于私钥文件必须妥善保管,不能泄露给他人,id_rsa.pub是公钥文件,用来提供给ssh服务器。
(5)将公钥文件上传至服务器
(6)将私钥拷贝到Windows主机上和web_server主机上
先用wimscp工具把跳板机里面的私钥分别复制到windows主机上和web_server主机上
然后使用moba远程工具连接跳板机(192.168.88.139)用我们创建的admin1用户使用私钥登录,因为这样就不需要输入密码,然后再用跳板机使用sshd服务连接web_server实现远程控制主机
(7) 修改ssh默认端口防止被监听
至此部署完毕!