Ubuntu LAMP环境+vsftp服务器+配置https+邮件服务器搭建和配置

0x01 LAMP环境安装

更新

apt update && apt dist-upgrade

安装Apache2

apt install apache2

注:默认Web目录: /var/www/html/
配置目录: /etc/apache2/
全局配置文件: /etc/apache2/apache2.conf
端口配置文件: /etc/apache2/ports.conf
虚拟主机配置文件: /etc/apache2/sites-enabled/000-default.conf
apache2.conf:Apache的主要配置文件,包含全局配置。
conf.d:Apache全局配置文件,其他需要使用Apache的包可以在这个目录下创建文件或者链接。
envvars:Apache2环境变量设置。
httpd.conf:遗留的Apache2主要配置文件。这个文件是空的,其中的配置选项都转移到其他配置文件里了。
这个文件可以进行Apache全局配置。
mods-available:这个目录包含模块和模块配置文件,不是所有的模块都有配置文件。
mods-enabled:持有/etc/apache2/mods-available目录下文件的链接,当该目录下有一个模块文件和其配置文件,那么Apache重启后该模块将生效。
ports.conf:配置Apache监听的端口。
sites-available:这个目录包含Apache虚拟主机的配置文件。虚拟主机允许Apache配置多个站点并为每个站点配置不同的参数。

安装php

apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache -y

注:安装完成后,编辑/etc/php/7.2/fpm/php.ini替换cgi.fix_pathinfo=1为cgi.fix_pathinfo=0

避免黑客通过上传漏洞配合解析漏洞拿到我们网站的shell

安装apache2与php插件

apt install libapache2-mod-php7.2

安装mysql

apt install mysql-server mysql-client
##更改mysql密码的三种方式
#方法1: 用SET PASSWORD命令
mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
#方法2:用mysqladmin(这个是在linu命令行界面)
mysqladmin -u root password "newpass"
#如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass "newpass"
#方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;
##mysql允许远程访问三种方式
#1.通过改表方式
#mysql -u root –p
#mysql>use mysql;
#mysql>update user set host = '%' where user = 'root';
#mysql>select host, user from user;
#2.授权方式
#mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
#3.在安装mysql的机器运行
#//进入MySQL服务器
#d:\mysql\bin\>mysql -h localhost -u root
#//赋予任何主机访问数据的权限
#mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
#//使修改生效
#mysql>FLUSH PRIVILEGES
#//退出MySQL服务器
#mysql>EXIT

注:在丢失root密码的时候
在/etc/my.conf中,[mysql]的段中添加一句:
skip-grant-tables
保存退出,重启mysql
/etc/init.d/mysqld restart
使用命令进入mysql:
mysql -u root -p
按两下回车进入mysql
mysql> use mysql;
mysql>update user set password = password ( ‘123456’) where user = ‘root’; 

安装php-mysql插件

apt install php7.2-mysql

安装PHPmyadmin

apt-get install phpmyadmin php-gettext
#创建 phpMyAdmin 快捷方式
sudo ln -s /usr/share/phpmyadmin /var/www/html

启动 Apache mod_rewrite 模块:

a2enmod rewrite

开启服务

service php7.2-fpm start

service apache2 start

service mysql start

FTP服务器安装

安装ftp

apt install vsftp

/etc/vsftpd.conf 这个是FTP的主配置文件,最为重要
vsftpd.conf中,用户权限相关的2个参数
chroot_list_enable
userlist_enable
这2个参数配合以下4个文件,能实现不同的用户访问权限配置
/etc/ftpusers
/etc/vsftpd.chroot_list
/etc/vsftpd.user_list
其中以下两个文件需要自己创建
允许固定用户离开默认目录
/etc/vsftpd.chroot_list
阻止用户登陆
/etc/vsftpd.user_list

ftp配置

vim etc/vsftpd.conf
# 登录FTP后的欢迎信息
ftpd_banner=welcome to phd.chorus!
# 不允许匿名用户登录
anonymous_enable=NO
#
# 是否允许登录用户有写权限,属于全局设置
local_umask=022
#
# 允许本地用户组的用户登录
local_enable=YES 
#
# 允许本地用户上传文件
write_enable=YES 
#
# 本地用户登入时,将被切换到定义的目录下,默认值为各用户的家目录 
local_root = /home/phdchorus
#
# 控制本地用户目录切换权限
# 在默认配置下,本地用户登录FTP后可以使用cd命令切到其他目录,这样会有安全隐患
# 通过配置chroot_list_enable | chroot_list_file | chroot_local_user这3个参数,控制用户切换目录的权限
# 通过搭配,能实现以下几种效果
# 1、当chroot_list_enable=YES,chroot_local_user=YES时,chroot_list_file中列出的用户,可以切换到其他目录,未在文件中列出的用户,不能切换到其他目录。
# 2、当chroot_list_enable=YES,chroot_local_user=NO时,chroot_list_file中列出的用户,不能切换到其他目录,未在文件中列出的用户,可以切换到其他目录。
# 3、当chroot_list_enable=NO,chroot_local_user=YES时,所有用户都不能切换到其他目录。
# 4、当chroot_list_enable=NO,chroot_local_user=NO时,所有用户都可以切换到其他目录。
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
chroot_local_user=YES
#
#
#
# 访问控制设置(控制用户访问)
# 如果设置了local_enable=YES,那么所有的用户(包括root)都能通过FTP登录服务器,出于安全考虑,需要对某些用户进行限制。
# 启用userlist后,依据userlist_deny的设置,禁止或允许vsftpd.user_list中的用户登录
#
# 启用userlist
userlist_enable=YES
#
# 文件内容为允许登录或禁止登录的用户名,每个用户一行。 
userlist_file=/etc/vsftpd/vsftpd.user_list
#
# 若该选项设为YES,系统就会deny(禁止)userlist_file中的用户登陆FTP
# 若该选项设为NO,系统就仅允许userlist_file中的用户登陆FTP
userlist_deny=NO 
#
#
# /etc/vsftpd/ftpusers文件专门用于列出禁止访问FTP服务的用户列表
# ftpusers的优先级要高于其他配置文件
#

添加ftp用户组

groupadd ftpgroup

添加一个FTP帐号,可上传可下载可删除文件

# --home 设置该用户根目录
# --ingroup 设置该用户属于ftpgroup用户组
# --on-create-home不要为这个用户创建家目录
adduser --home /var/www/html --ingroup ftpgroup hackgoo

https协议安装

获取到ssl签名证书(无论是阿里云还是openssl自签名证书),并上传到服务器

创建site-enabled 指向site-available的软链接

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

配置/etc/apache2/sites-enabled/default-ssl.conf

DocumentRoot /var/www#主目录修改,可选
SSLCertificateFile      /etc/apache2/ssl/2_XXX.crt#服务器证书文件
SSLCertificateKeyFile   /etc/apache2/ssl/3_XXX.key#服务器私钥文件
SSLCACertificateFile /etc/apache2/ssl/1_XXX.crt#服务器的CA证书链

配置/etc/apache2/mods-enabled/ssl.load,添加下列命令

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLProtocol all -SSLv2 -SSLv3

加载ssl模块并重启

#加载Apache的SSL模块
sudo a2enmod ssl
sudo a2ensite default-ssl
#出现Enabling字样说明成功
然后,重启Apache 
sudo /etc/init.d/apache2 restart     // 这时浏览器应该就可访问了

强制https访问,在网站根目录下新建文件 .htaccess 文件,写入内容:

#方法一
RewriteEngine On
RewriteBase / 
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.* https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
#整站跳转
#方法二
RewriteEngine On 
RewriteBase / 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.91linux.org/$1 [R=301,L] 
#这样跳转的好处是独立IP主机也支持,访问ip能自动跳转到https
#方法三
RewriteEngine on 
RewriteBase /yourfolder 
RewriteCond %{SERVER_PORT} !^443$ 
#RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 
#以上至针对某个目录跳转, yourfolder就是目录名
#方法四
redirect 301 /你的网页 https://你的主机+网页 
#至针对某个网页跳转
#方法五
RewriteEngine on 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteCond %{REQUEST_URI} !^/tz.php 
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]

强制https访问,打开 /etc/apache2/sites-available/000-default.conf

在<VirtualHost *:80></VirtualHost>标签内随便一个地方加入以下三行

RewriteEngine on
RewriteCond  %{HTTPS} !=on
RewriteRule  ^(.*) https://%{SERVER_NAME}$1 [L,R]

邮件服务器搭建

Postfix+Dovecot+MySQL搭建邮件服务器

About hackgoo 110 Articles
渗透测试人员,信息安全维护 主要技能web安全,linux运维 站在巨人的肩膀上,在学习中进步,在进步中学习,低调求生存 极客谷保留所有权利,转载请注明出处