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 和响应头;不要只隐藏页面文本。