• 梦想还是要有的,万一实现了呢...
  • 区块链论坛整装待发...

Linux系统- ubuntu16.04下安装搭建 Apache+PHP+MYSQL (LAMP环境)超详细篇

Linux Vetrue 2年前 (2018-04-12) 808次浏览 0个评论 二维码链接
文章目录[隐藏]

一、准备工作


1.查看内核,升级内核,删除内核,切换内核

查看发布版本号

cat /etc/issue

lsb_release -a

查看内核版本号

uname -sr

uname -a

升级内核方法

到 Ubuntu 网站 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 选择所需要的 Ubuntu 内核版本目录 比如最新的内核版本 v4.12.9 目录(发布日期 2018 年 3 月 21 日) 在介绍页面中,根据硬件的架构选择内核版本, X86 硬件架构 64 位操作系统应选择 AMD64

下载 3 个内核 deb 安装文件

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.12/linux-headers-4.15.12-041512_4.15.12-041512.201803211230_all.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.12/linux-headers-4.15.12-041512-generic_4.15.12-041512.201803211230_amd64.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.12/linux-image-4.15.12-041512-generic_4.15.12-041512.201803211230_amd64.deb

安装下载的内核文件

sudo dpkg -i *.deb

安装完成以后,reboot重新启动,验证内核的版本

uname -sr

查看内核列表

sudo dpkg --get-selections |grep linux-image

删除旧内核(可选)

sudo apt-get remove linux-image-4.4.0-105-generic linux-image-4.4.0-62-generic linux-image-extra-4.4.0-105-generic linux-image-extra-4.4.0-62-generic linux-image-generic

笔者旧内核为 linux-image-4.4.0-105-generic linux-image-4.4.0-62-generic linux-image-extra-4.4.0-105-generic linux-image-extra-4.4.0-62-generic linux-image-generic

删除下载的内核 deb 安装文件

rm linux-headers-4.15.12-041512_4.15.12-041512.201803211230_all.deb linux-headers-4.15.12-041512-generic_4.15.12-041512.201803211230_amd64.deb linux-image-4.15.12-041512-generic_4.15.12-041512.201803211230_amd64.deb

2.进行 ubuntu 系统与软件更新

sudo apt-get update

更新源,源保存的文件为:/etc/apt/sources.list

sudo apt-get upgrade

3.安装常用软件

①.SSH

sudo apt-get install openssh-server

查看状态:service ssh status/start/stop/restart 或:/etc/init.d/ssh status/start/stop/retsrt 实际上,service 命令就是执行/etc/init.d 脚本,二者功能是一样的

②.Vim

sudo apt-get install vim

③.lrzsz

sudo apt-get install lrzsz

使用方法详见 https://blog.csdn.net/qq_33912199/article/details/79596492

④.RAR/ZIP

sudo apt-get install p7zip p7zip-full p7zip-rar

二、安装 LAMP


1. 安装 Apache

sudo apt-get install apache2

  1. 测试: 浏览器访问 Ubuntu 的 IP,出现"It Works!"网页即表明安装 apache 成功
  2. 查看状态:service apache2 status/start/stop/restart
  3. 重启 apache:sudo /etc/init.d/apache2 restart
  4. 查看 apache 版本:apache2 -v ( 安装至此本人 apache 的版本为 2.4.18 )

如果需要升级到最新版本的 Apache

使 add-apt-repository 可用

sudo apt-get install python-software-properties -y

sudo apt-get install software-properties-common -y

添加源 并下载最新 Apache

sudo add-apt-repository ppa:ondrej/apache2

sudo apt-get update sudo apt-get dist-upgrade

( 更新后本人 apache 的版本为 2.4.29 )

网站目录权限设置:

网站目录文件权限的设置对网站的安全至关重要,下面简单介绍网站目录文件权限的基本设定。

单一站点用户权限设置

我们假设 http 服务器运行的用户和用户组是 www-data,网站用户为 www-data,网站根目录是/var/www/html

  • 我们首先设定网站目录和文件的所有者和所有组为 www-data,www-data,如下命令:

sudo chown -R www-data:www-data /var/www/html

  • 设置网站目录权限为 750,750 是 www-data 用户对目录拥有读写执行的权限,这样 www-data 用户可以在任何目录下创建文件,用户组有有读执行权限,这样才能进入目录,其它用户没有任何权限。

sudo find -type d -exec chmod 750 {} \;

  • 设置网站文件权限为 640,640 指只有 www-data 用户对网站文件有更改的权限,http 服务器只有读取文件的权限,无法更改文件,其它用户无任何权限。

sudo find -not -type d -exec chmod 640 {} \;

  • 针对个别目录设置可写权限。比如网站的一些缓存目录就需要给 http 服务有写入权限。例如 discuz x2 的/data/目录就必须要写入权限。

sudo find data -type d -exec chmod 770 {} \;

多站点分独立用户权限设置

将多站点使用独立权限更加安全,如其中一个站点有漏洞被上传木马,入侵者没有同服务器上其他的站点的操作权限

案例假设: /var/www 目录下 有 www.aaa.com 和 www.bbb.com 两个虚拟主机网站,要实现的目的就是比如 www.aaa.com 被入侵,入侵者看不到并且修改不了 www.bbb.com 站内的文件。www.aaa.om 使用 aaa 用户,www.bbb.com 使用 bbb 用户。apache 装完即有 www-data 用户 和 www-data 用户组,所以网站都是以这个用户用户组运行

先建两个用户

useradd -g www-data -d /var/null -s /usr/sbin/nologin aaa

useradd -g www-data -d /dev/null -s /usr/sbin/nologin bbb

添加虚拟主机时候添加指定用户权限

以添加 www.aaa.com 为例:

<VirtualHost *:80>
DocumentRoot /var/www/www.abc.com
ServerName www.aaa.com
ServerAlias  www.aaa.com
<Directory "/var/www/www.abc.com">
        Require user  aaa #Require user:定义了允许哪些用户访问,各用户之间用空格分开。
</Directory>
</VirtualHost>

重启下 apache,这样每个网站运行用户就分离出来了

追加自动压缩网页代码功能,在主配置文件继续加入

启动 Gzip mod_deflate

<IfModule mod_deflate.c>
        <IfModule mod_filter.c>
		 #压缩率, 6 是建议值.
                DeflateCompressionLevel 6 #压缩率, 6 是建议值.
                AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
                AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript application/x-javascript
                AddOutputFilterByType DEFLATE application/xml application/rss+xml application/atom_xml application/atom_xml
                AddOutputFilterByType DEFLATE application/xml  application/xhtml
                AddOutputFilterByType DEFLATE application/x-httpd-php
                AddOutputFilterByType DEFLATE image/svg+xml
        </IfModule>
</IfModule>

设置目录以及文件权限

chown root.root /var/www

chmod 711 /var/www

(这样就可以禁止其它组查看该目录的权限,入侵者就看不到/var/www 下有那些网站目录,当然你可以来个 751)

cd /var/www

chown aaa.www-data www.aaa.com

chmod 500 www.aaa.com

cd www.aaa.com

chmod -R 700 upload 因为这个目录要上传,所以要给写入的权限

chmod -R 500 images 图片目录给 500 就可以,不需要写入,400 也应该可以

chmod -R 500 *.php 防止 php 或者 html 被挂马,给个 500 或者 400 就行

(权限 设置根据自身情况而定)

防止信息泄露 vi /etc/apache2/conf-enabled/security.conf

ServerTokens Prod ServerSignature Off 设置后不显示系统版本以及 apache 版本号,让入侵者不知道我们使用的是什么环境从而降低漏洞利用风险 禁用自动索引模块

rm /etc/apache2/mods-enabled/autoindex.load

rm /etc/apache2/mods-enabled/autoindex.conf

将 apache 的工作模式 prefork 改成 worker 或者 event

apache2.4.10 版本之后拥有三种工作模式 prefork worker event,最新的为 event , 三种工作模式自行百度,推荐 event

检测 apache 正在使用哪个 mpm

apachectl -V | grep -i mpm

列出可用的 mpm 模块(确保 mpm_worker 在列表中)

ls /etc/apache2/mods-available/mpm*

列出开启的 mpm 模块(如果 mpm_event 没有开启,我们应该开启 mpm_event,禁用 mpm_prefork 模块)

ls -l /etc/apache2/mods-enabled/mpm*

禁用 mpm_prefork 模块

sudo a2dismod mpm_prefork

开启 mpm_event 模块

sudo a2enmod mpm_event

忽略网址 url 大小写区分

a2enmod speling

配置文件 apache2.conf 加入以下代码

<IfModule speling_module>
CheckSpelling on
</IfModule>

IIS 下 默认是不区分大小写的比如 a.com/ABC.htm 会自动转换为 a.com/abc.htm apache 则不同,需要加载模块 speling_module

2.安装 PHP

方式一:较简单

① PHP5.6

sudo add-apt-repository ppa:ondrej/php

sudo apt-get update

sudo apt-get install php5.6 php5.6-fpm

② PHP7.0

sudo apt-get install php7.0 php7.0-fpm

③ PHP7.1

sudo apt-get install php7.1 php7.1-fpm

④ PHP7.2

sudo apt-get install php7.2 php7.2-fpm

开启重写转向

sudo a2enmod rewrite

sudo a2enmod headers

如果安装多个版本 PHP,逐个或选择性安装以上 PHP 版本即可 安装完成后,reboot 重启,默认是运行 5.6 版本的 php(命令行下 php-v 显示的最高版本 7.1) 编辑 bashrc 加入 PHP 版本切换自定义命令,为方便在不同 PHP 版本间切换

sudo vi .bashrc 编辑 bashrc 加入自定义命令,为方便在不同 php 版本间切换(bashrc 文件尾加入以下代码)

alias php56='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo /etc/init.d/apache2 restart' alias php70='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2enmod php7.0 && sudo /etc/init.d/apache2 restart' alias php71='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.2 && sudo a2enmod php7.1 && sudo /etc/init.d/apache2 restart' alias php72='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2enmod php7.2 && sudo /etc/init.d/apache2 restart' alias apache-r='sudo /etc/init.d/apache2 restart' # (重启 apache 自定义命令,方便重启 apache 自行选择是否需要) alias php56-r='sudo /etc/init.d/php5.6-fpm restart' # (重启 php5.6-fpm 自行选择是否需要) alias php71-r='sudo /etc/init.d/php7.1-fpm restart' # (重启 php7.2-fpm 自行选择是否需要) alias php72-r='sudo /etc/init.d/php7.2-fpm restart' # (重启 php7.2-fpm 自行选择是否需要) alias mysql-r='sudo /etc/init.d/mysql restart' # (重启 mysql 自定义命令,方便重启 mysql 自行选择是否需要) 复制过去检查是否为单引号,本博客有时候会把单引号转义不想研究

命令行下 php72 可切换到 php7.2 版本,其他类同 注:在/etc/php 目录下有对应版本号的文件夹,编辑相应的 php.ini 文件可配置相应的 php 版本

方式二:FPM 模式,多 PHP 版本共存(不同虚拟主机可以同时使用不同 PHP 版本)

sudo add-apt-repository ppa:ondrej/php

sudo apt-get update

安装 PHP5.6 和 PHP7.2 或更多其他版本

sudo apt-get install php5.6 php5.6-fpm php5.6-mbstring php5.6-mysql php5.6-xml php5.6-gd php5.6-curl php5.6-json php5.6-zip php5.6-mcrypt

sudo apt-get install php7.1 php7.1-fpm php7.1-mbstring php7.1-mysql php7.1-xml php7.1-gd php7.1-curl php7.1-json php7.1-zip

sudo apt-get install php7.2 php7.2-fpm php7.2-mbstring php7.2-mysql php7.2-xml php7.2-gd php7.2-curl php7.2-json php7.2-zip

启用以下两个模块 sudo a2enmod proxy proxy_fcgi

开启重写转向 sudo a2enmod rewrite headers

默认选择 PHP7.2 版本,在 apache 配置文件/etc/apache2/apache2.conf 中 添加以下代码

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>

由于某些 PHP 程序较老与最新的 PHP7.2 存在不兼容,在需要使用 PHP5.6 版本的虚拟主机<VirtualHost *:80>中添加以下代码:

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"
    </FilesMatch>

使用 FPM 方式运行 PHP 更高效,但也潜在漏洞危害 修复方案:修改 php.ini 文件,将 cgi.fix_pathinfo 的值设置为 0

防止 php 木马执行 webshell ,在 php.ini 中添加设置 disable_functions=passthru,exec,shell_exec,system

关闭开启 PHP 详细错误信息 /etc/php/7.0/fpm/php.ini 设置 display_errors = On /etc/php/7.0/fpm/php-fpm.conf 设置 php_flag[display_errors] = on

防止跨站、跨目录的安全设置

  • 步骤一:全局设置

vi /etc/php/7.2/fpm/pool.d/www.conf

末尾添加:

env[TMP] = /tmp/
env[TMPDIR] = /tmp/
env[TEMP] = /tmp/
php_admin_value[session.save_path] = /tmp/
php_admin_value[upload_tmp_dir] = /tmp/
php_admin_value[open_basedir] = /var/www/:/tmp/:/var/tmp:/proc/
;开启慢执行日志
slowlog = /etc/php/7.2/fpm/pool.d/$pool.slow.log
request_slowlog_timeout = 2s

> (其他版本如 php5.6 类同,以上设置完成既不会再出现使用 open_basedir 导致 upload 无法上传文件等问题)

    步骤二:安装 apache2-mod-php 模块
    sudo apt-get install apache2-mod-php5.6
    sudo apt-get install apache2-mod-php7.1
    sudo apt-get install apache2-mod-php7.2
    虚拟主机中添加限制目录设置

    假设 abc.com 网站的网站目录为/var/www/abc_com,限制代码如下:

    php_admin_value open_basedir "/var/www/abc_com/"

使用 open_basedir 验证理论上会相对降低 PHP 的高频率 I/O 性能,在安全和性能上权衡自行斟酌是否使用

3.安装 MySQL


下载安装包

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

  1. 安装过程中会提示设置 root 密码

测试:mysql -u root -p ( exit; 可以退出 )

查看版本:mysql -V

查看状态:service mysql status/start/stop/retart

查看监听端口的情况:netstat -tunplnetstat -tap



Vetrue , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接
原文标题:Linux 系统- ubuntu16.04 下安装搭建 Apache+PHP+MYSQL (LAMP 环境)超详细篇
原文链接:https://vetrue.com/article/60.html
喜欢 (1)
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

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