Loading... ## 0x00 前言 该教程主要安装了如下软件包 > iptables > MySQL > PHP > PHP 相关模块 > Nginx 主要配置实现了以下功能 > 修改软件源 > 修改 PS1,更改配色 > SSH 每隔 30 秒发送一个心跳包 > 修改 iptables 规则,开放端口 > 修改 MySQL 密码 > 修改 PHP-FPM 的工作模式 > 使 Nginx 支持解析 .php 文件 大部分软件的配置文件被修改后需要重启进程才能应用更改 为了配置方便我个人习惯先切换到 root 权限,使用如下命令并输入密码 **注意:这是一种错误的,不良的习惯,在 root 权限下任何行为都不会受到系统的限制,因此导致的任何后果需要自己承担** ``` sudo -s ``` **注意:这是一种错误的,不良的习惯,在 root 权限下任何行为都不会受到系统的限制,因此导致的任何后果需要自己承担** **注意:在 linux 中被要求输入的密码都是不可见的** 正确的做法应该是以用户权限执行如下命令 ``` sudo 命令 ``` **注意:这是一种错误的,不良的习惯,使用 -y 参数执行的命令会直接跳过用户确认的流程,因此导致的任何后果需要自己承担** 本文中大部分命令使用了 **-y** 这一参数,该参数的含义是在执行命令的过程中默认确认所有需要用户手动确认的提示,例如安装或卸载软件包时明确告知用户该动作涉及哪些依赖包 **注意:这是一种错误的,不良的习惯,使用 -y 参数执行的命令会直接跳过用户确认的流程,因此导致的任何后果需要自己承担** 正确的做法是执行命令后等待系统提示确认,再根据提示手动输入类似 **y/yes/n/no** 的关键词,然后按下 **回车** 执行 ## 0x01 SSH 使 SSH 服务每隔30秒发送一个心跳包,用来保持 SSH 连接 ``` echo "ClientAliveInterval 30" >> /etc/ssh/sshd_config ``` 重启 sshd ``` systemctl restart sshd ``` ## 0x02 修改 PS1 配色 自带的配色实在太难看了 将 PS1 也就是控制配色的变量写入 ~/.bashrc > bash 在每次启动时都会加载 .bashrc 文件的内容 ``` echo "PS1='\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '" >> ~/.bashrc ``` 应用更改后的 ~/.bashrc ``` source ~/.bashrc ``` ## 0x03 修改源 由于大家都懂的原因,CentOS 的默认源访问速度贼慢或者根本无法访问,所以替换成国内服务商的源,这里用的是阿里云的 用 **wget** 下载源列表到 /etc/yum.repos.d/ 并重命名为 CentOS-AliCloud.repo ``` wget -O /etc/yum.repos.d/CentOS-AliCloud.repo http://mirrors.aliyun.com/repo/Centos-7.repo ``` 如果这一步发生错误,可能是因为没有安装 **wget** 使用如下命令安装 > yum install -y wget 安装 epel 源 > EPEL 全称 Extra Packages for Enterprise Linux,是由 Fedora 社区为 RHEL 系 Linux 打造的软件源,比官方发布的源更新,质量更高 > yum 全称 Yellow dog Updater, Modified,是 RHEL 系 Linux 上的软件包管理工具 ``` yum install -y epel-release ``` 清除并重建 yum 缓存 ``` yum clean all yum makecache ``` 检查并应用已安装软件包的可用升级 ``` yum update -y ``` ## 0x04 小工具 一些我自己经常用到的工具类软件包 ``` yum install -y bash-completion curl git unzip htop yum-utils lsof tree ``` 具体用法请移步如下链接 [Baidu](https://www.baidu.com/ "Baidu") [Google](https://www.google.com/ "Google") ## 0x05 开发/编译工具 一些我自己经常用到的用于开发或编译的软件包,同时也作为很多第三方软件的依赖包,建议安装 ``` yum install -y vim gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel ``` ## 0x06 卸载 firewalld > firewalld 是系统自带的防火墙,很强大,可以动态管理规则,如果有能力尽量使用firewalld,在 CentOS7 之后的版本中 iptables 的启动脚本会被忽略掉,不过写这篇文档的时候个人比较习惯用iptables,现在已换firewalld 停止 firewalld 服务 ``` systemctl stop firewalld ``` 关闭 firewalld 的开机自启 ``` systemctl disable firewalld ``` 卸载 firewalld ``` yum remove -y firewalld ``` ## 0x07 安装 iptables-servers 这是一个我自己用着比较舒服的防火墙 ``` yum install -y iptables-services ``` 启动 iptables ``` systemctl start iptables ``` 设置 iptables 开机自启 ``` systemctl enable iptables ``` ## 0x08 systemctl 单独说一下 systemctl systemctl 是一个 systemd 工具,主要负责控制 systemd 系统和服务管理器 systemd 是一个系统管理守护进程、工具和库的集合,用于取代 system V 初始进程,systemd 的功能是用于集中管理和配置类 UNIX 系统 在 Linux 生态系统中,systemd 被部署到了大多数的标准 Linux 发行版中,只有为数不多的几个发行版尚未部署 在平时的工作中主要会用到以下几种参数,以 iptables 为例,其中服务名可以简写为 **iptables**,也可以写全称 **iptables.service** 启动 iptables 服务 ``` systemctl start iptables ``` 停止 iptables 服务 ``` systemctl stop iptables ``` 重载 iptables 服务 如果修改了服务的配置文件,建议重启而不是重载 ``` systemctl reload iptables ``` 重启 iptables 服务 ``` systemctl restart iptables ``` 开启 iptables 开机自启 ``` systemctl enable iptables ``` 关闭 iptables 开机自启 ``` systemctl disable iptables ``` ## 0x09 配置 iptables 规则 **该规则主要控制可以从外部访问哪些端口,默认应该只有 22 端口,用于 SSH 访问,请勿删除,删除 22 端口访问权限会导致无法通过 SSH 登陆服务器** 这里直接用 sed 添加到 iptables 的配置文件里,常规的做法是使用 vim 打开配置文件,并手动添加 ``` sed -i '/-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT/a-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT' /etc/sysconfig/iptables sed -i '/-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT/a-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT' /etc/sysconfig/iptables sed -i '/-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT/a-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT' /etc/sysconfig/iptables ``` 这里添加了三条规则,对应三个端口 > 80:web 服务 > 443:web 服务中的 https > 3306:MySQL 重启 iptables ``` systemctl restart iptables ``` ## 0x10 导入 MySQL 5.7 镜像源 这个是 MySQL 自己的源,用着比较舒服,直接安装这一个就可以解决所有依赖项 目前 MySQL 5.7 是稳定版本中最新的,虽然现在已经有 MySQL 8.0 了,但 8.0 还不成熟,而且他的上一个版本就是 5.7,中间没有 6.0 和 7.0 ``` yum install -y http://repo.mysql.com/mysql57-community-release-el7.rpm ``` 安装 mysql-server ``` yum install -y mysql-server ``` 启动 MySQL 并设置开机自启 ``` systemctl start mysqld systemctl enable mysqld ``` ## 0x11 查询 MySQL 默认密码 MySQL 在安装后会设置一个默认密码,使用 grep 工具查询安装日志中包含 password 关键词的行并输出 ``` grep "password" /var/log/mysqld.log ``` 应该会输出这样一行日志 > 时间 [Note] A temporary password is generated for root@localhost: 不管后边的字符有多奇怪,那个就是密码 登录 mysql ``` mysql -u root -p ``` 输入密码后进入 MySQL 控制台 ## 0x12 修改 MySQL 密码 MySQL 要求密码至少符合以下条件 > 数字、小写字母、大写字母 、特殊字符、长度至少8位 但这种要求可能不适合一些记不住密码的人,所以直接写出来修改规则的方式 **注意:这是一种错误的,不良的习惯,低安全等级的密码可能遭到攻击甚至意料之外的访问、修改及数据泄露,因此导致的任何后果需要自己承担** 设置密码安全等级为 0 ``` mysql> SET GLOBAL VALIDATE_PASSWORD_POLICY = 0; ``` 设置密码最小长度为 1 ``` mysql> SET GLOBAL VALIDATE_PASSWORD_LENGTH = 1; ``` **注意:这是一种错误的,不良的习惯,低安全等级的密码可能遭到攻击甚至意料之外的访问、修改及数据泄露,因此导致的任何后果需要自己承担** 更改密码为 passwd **注意:passwd 是个示例密码,安全度极低,请自己修改** ``` mysql> ALTER USER USER() IDENTIFIED BY 'passwd'; ``` 允许 root 使用 passwd 从任意主机连接 **注意:passwd 是个示例密码,安全度极低,请自己修改** ``` mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION; ``` 退出 mysql 控制台 ``` mysql> exit ``` ## 0x13 安装 nginx yum install -y nginx 启动 nginx 并设置开机自启 ``` systemctl start nginx systemctl enable nginx ``` ## 0x14 修改 nginx 基础配置 备份 nginx.conf 为 nginx.conf.bak,并将 nginx.conf.default 复制为nginx.conf ``` mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf ``` nginx 配置文件中使用 **{ }** 来标识配置文件块,本文中只修改使其支持 php 的部分 打开 nginx 配置文件 ``` vim /etc/nginx/nginx.conf ``` 按 **i** 键进入编辑模式 在 **http -> server** 块中添加如下配置 ``` location ~ \.php(.*)$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } ``` 按键盘左上角的 **ESC** 键退出编辑模式,直接输入如下命令保存并退出 ``` :wq ``` 重启 nginx ``` systemctl restart nginx ``` ## 0x15 mv 命令 mv 命令全称 move 常用的功能如下 将文件 test 更名为 abc ``` mv test abc ``` 将文件 test 移动到 /home/ 目录下 ``` mv test /home ``` ## 0x16 修改网站根目录 默认的网站根目录位于 /usr/share/,我个人不太习惯,所以修改到 /var/www/html/ 建立 /var/www/ 文件夹 ``` mkdir -p /var/www ``` 将 /usr/share/nginx/html/ 下的 html/ 目录移动到 /var/www/ ``` mv /usr/share/nginx/html/ /var/www/ ``` 在 /usr/share/nginx/ 处建立 /var/www/html/ 的软链接并命名为 html ``` ln -s /var/www/html /usr/share/nginx/html ``` 重启nignx ``` systemctl restart nginx ``` ## 0x17 安装 PHP 7.2 安装 remi 源 > remi 是一个包含 PHP、MySQL 等工具的软件源 ``` yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm ``` 启用 PHP 7.2 仓库 该命令属于 **yum-utils** 包 ``` yum-config-manager --enable remi-php72 ``` 安装 PHP 7.2 ``` yum install -y php72 ``` 安装 PHP 模块 **使用 remi 安装的 PHP 7.2 在安装模块时的前缀均为 php72-php-** ``` yum install -y php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysql php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache ``` 启动 PHP-FPM 并设置开机自启 > PHP-FPM 是一个 PHP FastCGI 进程管理器,并且直接被整合进 PHP 中 ``` systemctl start php72-php-fpm systemctl enable php72-php-fpm ``` 修改 PHP-FPM 进程保留设置 php-fpm 的进程在创建后并不会直接退出,并且会占用大量内存,修改配置文件中的运行方式可以节省大量内存 ``` sed -i 's/^pm = dynamic/pm = ondemand/' /etc/opt/remi/php72/php-fpm.d/www.conf ``` 重启 PHP-FPM ``` systemctl restart php72-php-fpm ``` 最后修改:2022 年 01 月 03 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏