Debian 综合服务实训:Apache2、Samba、LDAP、vsftpd 与 OpenVPN

Debian 综合服务实训:Apache2、Samba、LDAP、vsftpd 与 OpenVPN

1. 服务介绍

本文整理一套 Debian 综合服务实验,不只包含 Apache2:Apache2 负责 HTTP/HTTPS 网站和 LDAP 认证,Samba 提供 SMB 文件共享,OpenLDAP 保存统一账号,vsftpd 提供受限 FTP 传输,OpenVPN 提供远程访问。每个服务都有独立配置和验证步骤,适合网络服务综合实训。

目标包括:

• Apache2 发布 www.chinaskills.cn,启用 HTTPS、HTTP 重定向、LDAP 认证和安全响应头。

• Samba 提供认证共享和匿名公共共享,结合 SGID/sticky bit 控制删除权限。

• OpenLDAP 创建 chinaskills.cn 目录和 ldsgp 用户组,为 Apache/Samba 提供认证。

• vsftpd 提供虚拟用户 FTP,限制根目录和上传类型。

• OpenVPN 为 OutsideCli 分配 172.16.0.100-172.16.0.120 地址,只允许访问授权内网。

2. 准备运行环境

• Debian 服务器:Apache2、Samba、OpenLDAP、vsftpd、OpenVPN 可按角色部署在独立主机,也可在实验中合并。

• 角色示例:WebSrv、StorageSrv、RouterSrv、OutsideCli、InsideCli。

• 权限:root 或 sudo 管理账号;数据库、LDAP bind 密码和 VPN 私钥使用安全存储。

• DNS:准备 www.chinaskills.cn、download.chinaskills.cn 等解析;客户端 DNS 必须指向可解析这些名称的服务器。

• 证书:准备受信任 CA 根证书和 Web 服务器证书;证书 SAN 必须包含访问域名。

• 网络:HTTP TCP 80、HTTPS TCP 443、SMB TCP 445、LDAP TCP 389/636、FTP TCP 21、OpenVPN UDP 1194 按拓扑放行。

• 文件目录:网站 /webdata,Samba /data/share1 与 /data/public,FTP 根目录按实际配置创建。

• 示例地址:文章只使用文档网段和占位域名;不要复制原实验中的公网地址、密码或共享密钥。

3. 相关知识与注意点

• Apache 虚拟主机、TLS 证书、LDAP 认证、目录权限和防火墙必须同时正确;单独看到 443 监听不能证明站点可用。

• ServerTokens Prod 和 ServerSignature Off 可以减少版本泄露,但不能替代补丁、WAF 和最小权限。

• Samba 的上传权限由目录权限、smb.conf、有效用户和客户端认证共同决定;匿名共享不要与敏感目录复用。

• SGID 目录让新文件继承组;sticky bit 限制删除者为文件所有者、目录所有者或 root。不要用 chmod -R 777 代替权限设计。

• LDAP 密码、管理员 DN 和证书私钥不能写入文章或命令历史;生产环境启用 LDAPS 或 StartTLS,限制匿名查询。

• FTP 明文传输风险高。实验使用 vsftpd 时应启用 FTPS、限制用户根目录和被动端口;生产优先使用 SFTP/HTTPS。

• OpenVPN 地址池必须避开现有网段;VPN 已连接不等于内网可达,还要检查路由、转发、NAT 和防火墙。

• 每项修改先做语法检查,再 reload/restart;验证同时看服务状态、监听端口、日志和客户端结果。

4. 实验步骤

4.1 Apache2 网站、HTTPS 与 LDAP 认证

安装基础组件:

bash 复制代码
apt update
apt install -y apache2 openssl libapache2-mod-ldap-userdir \
  libapache2-mod-ldap-userdir ldap-utils
systemctl enable --now apache2

创建网站目录和首页:

bash 复制代码
install -d -o root -g www-data -m 0755 /webdata
printf '%s\n' "This is the front page of CSK's website" >/webdata/index.html
chown root:www-data /webdata/index.html
chmod 0644 /webdata/index.html

创建虚拟主机 /etc/apache2/sites-available/www.chinaskills.cn.conf:

apache 复制代码
<VirtualHost *:80>
    ServerName www.chinaskills.cn
    DocumentRoot /webdata
    Redirect permanent / https://www.chinaskills.cn/
    <Directory /webdata>
        Options -Indexes
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName www.chinaskills.cn
    DocumentRoot /webdata
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/www.chinaskills.cn.crt
    SSLCertificateKeyFile /etc/ssl/private/www.chinaskills.cn.key
    <Directory /webdata>
        Options -Indexes
        AllowOverride None
        Require all granted
    </Directory>
    ServerTokens Prod
    ServerSignature Off
</VirtualHost>

启用模块、站点并检查:

bash 复制代码
a2enmod ssl rewrite ldap authnz_ldap headers
a2ensite www.chinaskills.cn.conf
apachectl configtest
systemctl reload apache2

原实验 Apache 配置截图:

目录列表、下载文件和安全响应头按题目要求配置。大文件下载、上传和日志目录要单独评估磁盘空间,不能把 Web 根目录设置为可写。

4.2 设置 SUID、SGID 与 sticky bit

查看特殊权限:

bash 复制代码
ls -ld /data /data/public
find /usr/bin -perm -4000 -type f -ls

共享目录示例:

bash 复制代码
install -d -o root -g sambashare -m 2770 /data/share1
install -d -o user01 -g sambashare -m 3770 /data/public

2770 表示目录 SGID;3770 表示 SGID 加 sticky bit。实际用户和组按 LDAP/Samba 账号调整。

4.3 Samba 认证共享和公共共享

安装 Samba:

bash 复制代码
apt install -y samba smbclient
cp -a /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date +%F-%H%M%S)

配置 /etc/samba/smb.conf:

ini 复制代码
[global]
    workgroup = WORKGROUP
    security = user
    map to guest = Bad User
    server min protocol = SMB2

[share1]
    path = /data/share1
    read only = no
    browseable = yes
    valid users = @sambashare
    force group = sambashare
    create mask = 0660
    directory mask = 2770

[public]
    path = /data/public
    guest ok = yes
    map to guest = Bad User
    read only = no
    browseable = yes
    force group = sambashare
    create mask = 0660
    directory mask = 3770

为认证用户设置 Samba 密码:

bash 复制代码
smbpasswd -a user01
smbpasswd -e user01
testparm -s
systemctl restart smbd nmbd

原实验共享目录和配置截图:

验证:

bash 复制代码
smbclient -L //127.0.0.1 -U user01
smbclient //127.0.0.1/share1 -U user01
smbclient //127.0.0.1/public -N

公共目录要求所有用户上传,但只有文件所有者、目录所有者或 root 删除文件。客户端使用 put/get 测试上传下载,再用不同用户验证删除权限。

4.4 OpenLDAP 目录服务

安装 OpenLDAP:

bash 复制代码
apt install -y slapd ldap-utils migrationtools

初始化目录时统一使用示例基准 DN,例如 dc=chinaskills,dc=cn。管理员 DN、密码不要写入公开文档。检查服务:

bash 复制代码
systemctl enable --now slapd
ldapwhoami -x -H ldap://127.0.0.1 -D 'cn=admin,dc=chinaskills,dc=cn' -W
ldapsearch -x -H ldap://127.0.0.1 -b 'dc=chinaskills,dc=cn' -s base

原实验 LDAP 配置和目录导入截图:

LDAP 账户接入系统、Apache 或 Samba 前,先确认查询结果,再调整 NSS/PAM、authnz_ldap 或 Samba 后端。不要为了测试删除本地 root 或保留唯一远程管理员。

4.5 vsftpd 虚拟用户

安装并启用 FTP:

bash 复制代码
apt install -y vsftpd db-util
cp -a /etc/vsftpd.conf /etc/vsftpd.conf.bak.$(date +%F-%H%M%S)
systemctl enable --now vsftpd

FTP 根目录使用独立系统账号,虚拟用户只映射到该账号。启用 FTPS、Chroot 和被动端口后再测试,不在配置中写明文密码:

ini 复制代码
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=NO
pasv_min_port=30000
pasv_max_port=30100
ssl_enable=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES

原实验 FTP 配置截图:

4.6 OpenVPN 远程访问

题目要求 VPN 客户端只能访问 InsideCli 网段和 StorageSrv 的 Samba 服务,地址池为 172.16.0.100-172.16.0.120。安装 OpenVPN 和证书工具:

bash 复制代码
apt install -y openvpn easy-rsa
systemctl enable openvpn-server@server

服务端配置核心项:

ini 复制代码
port 1194
proto udp
dev tun
server 172.16.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "route 172.16.0.0 255.255.255.0"
keepalive 10 120
persist-key
persist-tun
user nobody
group nogroup
status /var/log/openvpn/status.log
log-append /var/log/openvpn/server.log
verb 3

证书和私钥文件只允许 root 读取。VPN 客户端配置中的 remote、CA、客户端证书、私钥和端口必须与服务端一致。源文档截图:

启动并验证:

bash 复制代码
systemctl restart openvpn-server@server
systemctl --no-pager status openvpn-server@server
ip addr show tun0
ip route
journalctl -u openvpn-server@server -n 50 --no-pager

防火墙只放行 VPN 入口和授权转发路径;不要把 VPN 客户端默认路由无条件推向服务器。

5. 验证结果

5.1 Apache/HTTPS

bash 复制代码
apachectl configtest
systemctl is-active apache2
ss -lntp | grep -E ':80|:443'
curl -I http://www.chinaskills.cn/
curl -k -I https://www.chinaskills.cn/
tail -n 50 /var/log/apache2/error.log

预期:Apache active;HTTP 重定向到 HTTPS;证书域名和信任链正确;日志无持续错误。

5.2 Samba/LDAP

bash 复制代码
testparm -s
smbclient -L //127.0.0.1 -U user01
ldapsearch -x -H ldap://127.0.0.1 -b 'dc=chinaskills,dc=cn' '(objectClass=*)' dn
getent passwd user01

预期:Samba 共享可发现,认证用户能按权限上传下载;LDAP 能查询目录,NSS/PAM 配置正确时能解析目录用户。

5.3 vsftpd/OpenVPN

bash 复制代码
systemctl is-active vsftpd
ss -lntp | grep ':21'
ss -lunp | grep ':1194'
ip addr show tun0
ip route
journalctl -u vsftpd -n 50 --no-pager
journalctl -u openvpn-server@server -n 50 --no-pager

客户端验证:FTP 用户被限制在目标根目录;VPN 客户端获得 172.16.0.100-172.16.0.120 地址,只能访问题目授权网段和 Samba 服务。

6. 常见问题排查

• **Apache 403/404**:检查虚拟主机匹配、DocumentRoot、目录权限、Require all granted 和错误日志。

• **HTTPS 警告**:检查 CA 信任、SAN、有效期、私钥和中间证书;不要用关闭验证替代修复。

• **LDAP 认证失败**:先用 ldapsearch 验证目录和 bind,再检查 Apache DN/filter、Samba 后端和 TLS 信任。

• **Samba 上传成功但不能删除**:检查 SGID/sticky bit、目录属主属组和 Samba create mask/directory mask。

• **Samba 匿名共享过宽**:关闭 guest 或限制网络来源;匿名可写目录不能存放配置、备份和密钥。

• **FTP 登录越权**:检查 chroot_local_user、系统账号、文件权限和 PAM;生产优先使用 SFTP/HTTPS。

• **OpenVPN 连接成功但内网不通**:检查 ip_forward、路由、NAT、FORWARD 规则和授权网段;VPN 地址池不能与现有网段重叠。

• **OpenVPN 服务启动失败**:执行 openvpn --config /etc/openvpn/server.conf --test-crypto 或查看 journal;确认证书、私钥和配置语法。

• **版本信息泄露**:检查 ServerTokens Prod、ServerSignature Off 和响应头;不要只隐藏页面文本。

相关推荐
用户0510122572961 小时前
RGA(三)——实宽高、虚宽高与对齐约束
linux·嵌入式
fastjson_1 小时前
帆软看板 - 问题收集
linux·前端·javascript
jianpeng的工程笔记1 小时前
EL8 / EL9 安装 Slurm 26.05.4:主备控制器、MariaDB 记账与作业验收
linux·数据库·mariadb·高性能计算·slurm
程序员-Benothing1 小时前
Linux系统时间管理:date、timedatectl、NTP、Chrony配置
linux·运维·服务器
迪康Defender2 小时前
终端安全实践:浅谈端点安全管理系统内置终端防火墙能力
运维·服务器·网络·经验分享·安全·php·终端安全管理
AI备忘录2 小时前
(二十二)华为华三锐捷迈普思科 802.1X 端口认证配置命令(网络准入五厂商对照)
运维·服务器·开发语言·网络·安全·华为
the3clipse2 小时前
MacOS、Linux 与 Windows 视频编解码对比:AV1、HEVC、ProRes 与硬件加速优劣势
linux·windows·macos·hevc·av1·视频解码·硬件解码
茉莉玫瑰花茶2 小时前
GO [ 接口 ]
服务器·数据库·golang
s6516654962 小时前
bootsect.s,setup.s,head.s的主要功能和对系统状态的影响、作用
linux