引言
本文基于真实操作流程整理,完整记录 centos stream 9 系统下 lamp(linux + apache + mariadb + php)环境的搭建全过程,包含换源踩坑、数据库配置、权限处理、远程连接验证等关键环节,既适合网页开发环境搭建,也可作为 web 漏洞靶场的基础环境。
一、环境与准备
1.1 适用场景
- 本地虚拟机搭建 web 学习与开发环境
- 部署 sql 注入、xss 等经典 web 漏洞靶场
- 练习 linux 服务器运维与 php 全栈开发
1.2 系统与工具
| 类别 | 说明 |
|---|---|
| 服务器系统 | centos stream 9 |
| 包管理器 | dnf(yum 为软链接兼容) |
| 本地工具 | vs code(远程开发)、navicat(数据库管理)、chrome/edge 浏览器 |
| 网络模式 | 桥接模式,虚拟机与物理机同局域网可直接互访 |
1.3 核心说明
centos 9 默认自带 php 8.x 版本,对 dvwa、sqli-labs 等经典老旧靶场兼容性较差,因此我们手动安装 php 7.4 版本;数据库采用 mariadb,与 mysql 完全协议兼容,命令、端口、驱动通用。
二、系统基础配置
2.1 切换 root 权限
所有系统级配置均需 root 权限,普通用户执行以下命令切换:
su - root
输入 root 密码后,提示符变为 # 即为成功。
2.2 关闭 selinux
selinux 是 centos 的强制访问控制机制,默认开启会拦截 apache 对网页文件的读取,极易造成 403 错误,靶场学习环境建议永久关闭。
- 临时关闭(立即生效,重启失效)
setenforce 0
- 永久关闭(重启后生效) 编辑配置文件:
vi /etc/selinux/config

将 selinux=enforcing 修改为:
selinux=disabled

保存退出后执行 reboot 重启系统。
!新手提示:vi 编辑器按 i 进入编辑模式,修改完按 esc,输入 :wq 回车保存退出;输错了按 esc 输入 :q! 强制退出不保存。
2.3 软件源换源踩坑与处理
国内网络下,官方源下载速度较慢,通常会替换为阿里云等国内镜像源,但实际操作中容易出现版本路径不匹配的问题。
踩坑过程
执行 curl 下载阿里云 centos stream 9 源配置文件:
curl -o /etc/yum.repos.d/centos-stream-baseos.repo https://mirrors.aliyun.com/repo/centos-stream-9-baseos.repo curl -o /etc/yum.repos.d/centos-stream-appstream.repo https://mirrors.aliyun.com/repo/centos-stream-9-appstream.repo
执行 dnf makecache 刷新缓存时出现警告:
警告:加载 '/etc/yum.repos.d/centos-stream-appstream.repo' 失败,跳过。 警告:加载 '/etc/yum.repos.d/centos-stream-baseos.repo' 失败,跳过。

原因与解决方案
原因是阿里云镜像路径更新,旧模板中的变量解析失效,导致源地址无效。对于一次性搭建环境的场景,最简方案是删除失效源,继续使用系统默认官方源:
rm -f /etc/yum.repos.d/centos-stream-baseos.repo rm -f /etc/yum.repos.d/centos-stream-appstream.repo dnf makecache
执行后无报错,元数据缓存建立成功,后续安装可正常进行。
!如果需要长期使用、频繁安装软件,可以手动写入固定路径的阿里云源配置;仅搭建一次靶场环境,默认源完全够用。
三、安装 php 7.4 软件源
3.1 为什么选择 php 7.4
绝大多数经典 web 漏洞靶场开发于 php 5.x/7.x 时代,高版本 php 会废弃大量旧语法,导致靶场功能异常、漏洞无法复现。remi 源是业内最成熟的 php 多版本管理源。
3.2 安装 epel 与 remi 源
dnf install -y epel-release dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm


3.3 切换 php 版本为 7.4
重置系统默认 php 模块,启用 remi 源的 php 7.4:
dnf module reset php -y dnf module enable php:remi-7.4 -y

四、一键安装 lamp 全栈
4.1 组件说明
| 组件 | 作用 |
|---|---|
| openssh-server | ssh 服务,支持远程命令行与 vs code 远程开发 |
| httpd | apache 网页服务器,处理 http 请求 |
| mariadb-server | mariadb 数据库服务,存储网站与靶场数据 |
| mariadb | 数据库客户端命令行工具 |
| php | php 脚本解析器 |
| php-mysqlnd | php 连接数据库的驱动扩展 |
| php-gd / php-mbstring / php-curl | 靶场常用功能依赖扩展 |
| unzip、wget | 下载解压靶场源码工具 |
4.2 执行安装
dnf install -y openssh-server httpd mariadb-server mariadb php php-mysqlnd php-gd php-mbstring php-curl php-xml php-zip unzip wget
等待命令执行完成,无报错即为安装成功。

五、服务管理与开机自启
执行以下命令同时完成「立即启动」和「开机自启」:
systemctl enable --now sshd systemctl enable --now httpd systemctl enable --now mariadb
输出 created symlink 即为设置成功,可通过以下命令查看运行状态:

systemctl status httpd systemctl status mariadb
显示 active (running) 代表服务正常运行。
六、防火墙端口配置
centos 9 默认启用 firewalld 防火墙,需手动放行对应端口,否则外部无法访问网页和数据库。
# 放行 ssh 22端口 firewall-cmd --permanent --add-service=ssh # 放行 http 80端口 firewall-cmd --permanent --add-service=http # 放行数据库 3306端口 firewall-cmd --permanent --add-port=3306/tcp # 重载规则使配置生效 firewall-cmd --reload

! --permanent 表示永久生效,重启防火墙不丢失;不加该参数仅临时生效,重启后失效。
七、网站目录权限配置
apache 默认以 apache 用户身份运行,若网页文件所有者为 root,会出现 403 禁止访问错误。
# 设置目录所有者为 apache 用户组 chown -r apache:apache /var/www/html # 设置目录权限为 755 chmod -r 755 /var/www/html
apache 默认网站根目录为 /var/www/html,所有网页、php 文件、靶场源码都必须放在该目录下,才能通过浏览器访问。
八、mariadb 数据库初始化与远程授权
8.1 执行安全初始化脚本
mariadb 安装完成后 root 默认无密码,执行安全初始化脚本进行基础配置:
mysql_secure_installation

交互步骤与推荐选项
enter current password for root (enter for none): 直接回车,初始无密码
switch to unix_socket authentication [y/n] 输入 n,使用传统密码登录
change the root password? [y/n]
输入 y,设置数据库 root 密码
踩坑提示:linux 终端输入密码时不会显示任何字符,属于盲打,两次输入必须完全一致,否则会提示 passwords do not match。靶场学习建议设置简单密码如 123456。

remove anonymous users? [y/n]输入y,删除匿名用户disallow root login remotely? [y/n]输入n,允许 root 远程登录(navicat 远程连接需要)remove test database and access to it? [y/n]输入y,删除测试库reload privilege tables now? [y/n]输入y,刷新权限立即生效
出现 thanks for using mariadb! 即为初始化完成。

8.2 开启 root 账号远程访问权限
初始化默认仅允许本地登录数据库,需手动授权任意 ip 访问:
登录数据库命令行
mysql -uroot -p
输入数据库 root 密码,出现 mariadb [(none)]> 提示符即为登录成功。
执行授权 sql
grant all privileges on *.* to 'root'@'%' identified by '123456'; flush privileges; exit;
*.*代表所有库所有表'root'@'%'代表 root 账号可从任意 ip 登录- 密码替换为你自己设置的数据库 root 密码

九、远程工具连接验证
9.1 获取虚拟机 ip
执行命令查看服务器 ip:
ip a
找到网卡(通常为 ens33)下的 inet 地址,例如 192.168.6.132,后续所有访问都使用该 ip。

9.2 naicat 远程连接数据库
打开 navicat,新建连接,选择 mysql 类型(mariadb 完全兼容,选 mysql 即可):

- 主机名:
192.168.6.132 - 端口:
3306 - 用户名:
root - 密码:数据库 root 密码
点击测试连接,提示连接成功后保存,即可图形化管理数据库、查看表数据、执行 sql。

9.3 浏览器测试网页服务
访问 http://192.168.6.132,出现 centos 默认的 apache 测试页面,说明网页服务正常运行。

十、全链路功能验证
10.1 验证 php 解析
创建 php 探针文件:
echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php
浏览器访问 http://192.168.6.132/phpinfo.php,出现 php 信息详情页,说明 php 解析正常,可查看 php 版本、已安装扩展等信息。

10.2 验证 php 数据库查询
创建测试数据库与测试表,验证 php 到数据库的完整链路:
数据库内创建测试库与测试数据
create database if not exists test default charset utf8mb4;
use test;
create table users (
id int auto_increment primary key,
username varchar(50) not null,
password varchar(50) not null,
email varchar(100)
);
insert into users (username, password, email) values
('admin', 'admin123', 'admin@test.com'),
('user1', 'pass123', 'user1@test.com'),
('user2', '123456', 'user2@test.com');
创建 php 查询页面
tee /var/www/html/test_db.php << 'eof'
<?php
$host = 'localhost';
$user = 'root';
$pass = '123456';
$dbname = 'test';
$conn = mysqli_connect($host, $user, $pass, $dbname);
if (!$conn) {
die('连接失败:' . mysqli_connect_error());
}
echo '<h2>√ 数据库连接成功</h2>';
$sql = "select * from users";
$result = mysqli_query($conn, $sql);
echo '<table border="1" cellpadding="8">';
echo '<tr><th>id</th><th>用户名</th><th>密码</th><th>邮箱</th></tr>';
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>
<td>{$row['id']}</td>
<td>{$row['username']}</td>
<td>{$row['password']}</td>
<td>{$row['email']}</td>
</tr>";
}
echo '</table>';
mysqli_close($conn);
?>
eof
浏览器验证 访问 http://192.168.6.132/test_db.php,页面显示数据库连接成功,且表格中完整展示 3 条用户数据,代表 web → php → 数据库 整条链路完全通畅。

十一、环境总结
至此,centos stream 9 下的 lamp 环境已全部搭建并验证完成,核心状态如下:
√ apache 网页服务正常,80 端口对外可访问
√ php 7.4 运行正常,兼容各类经典 php 靶场
√ mariadb 数据库稳定运行,支持本地与远程连接
√ 防火墙端口配置正确,ssh、http、数据库服务均放行
√ 核心服务全部设置开机自启
√ 支持 navicat 图形化管理数据库
安全提示:该环境为本地学习用途,包含弱口令与漏洞环境,禁止直接暴露到公网,避免被恶意攻击。
以上就是centos从零搭建lamp环境的完整实战指南的详细内容,更多关于centos从零搭建lamp环境的资料请关注代码网其它相关文章!
发表评论