一、架构概述
本方案旨在为企业搭建一套高效、安全的 Linux 服务器架构,包含一台 DNS 服务器,以及一台同时承载 FTP 和 Samba 服务的服务器,满足公司在域名解析、图片存储与共享、文件共享等方面的业务需求。
二、服务器部署
DNS 服务器
选用一台独立的 Linux 服务器作为 DNS 服务器,安装 Bind 软件实现域名解析服务。在配置文件中,设置正向和反向解析区域,将公司局域网内的主机域名和 IP 地址进行映射,保证各主机能够通过域名访问 FTP 及 Samba 服务器。
FTP 与 Samba 服务器
另一台 Linux 服务器同时部署 FTP 和 Samba 服务。安装 vsftpd 作为 FTP 服务器,通过配置文件设置不同用户的访问权限:公司 UI 设计师拥有上传和下载权限,外包人员仅能上传和浏览图片。安装 Samba 服务,配置共享目录,赋予公司员工直接修改服务器文件的权限,实现文件共享服务。
三、安全配置
系统账号安全
限制不必要的用户登录,定期清理无用账号。为用户设置复杂、高强度的密码,并定期更换。
系统引导和登录安全
启用 GRUB 密码保护,防止非法修改系统引导参数。配置 PAM 模块,增强登录安全,如限制登录失败次数等。
弱口令检测
使用工具定期检测服务器上的账号,发现弱口令账号立即通知用户修改,降低安全风险。
通过上述架构搭建和安全配置,企业不仅能实现高效的网络服务,还能有效保障服务器的安全性,为公司业务的稳定运行提供有力支持。
完成示例:
DNS:
#!/bin/bash
#DNS主域名服务
#user li 20250325
# 检查是否为root用户
if [ "$USER" != "root" ]; then
echo "错误:此操作需要root权限,请使用root用户执行脚本。"
exit 1
fi
# 防火墙与高级权限
if systemctl stop firewalld && systemctl disable firewalld; then
echo "防火墙已成功关闭并禁用。"
else
echo "防火墙关闭或禁用失败,请检查防火墙服务状态。"
exit 1
fi
# 安装BIND相关工具
if yum install -y bind; then
echo "BIND工具安装成功。"
else
echo "BIND工具安装失败,请检查网络或软件源配置。"
sleep 5
exit 1
fi
# 设置变量
read -p "请设置DNS区域名(例如:xiaomao.com):" a
read -p "请输入本机IP地址:" b
read -p "请输入反向解析的IP地址前缀(例如:1.168.192):" c
ip="$b"
d=$(echo "$ip" | cut -d '.' -f 4)
# 配置BIND主配置文件
cp /etc/named.conf /etc/named/conf.bak
if [ $? -ne 0 ]; then
echo "备份BIND主配置文件失败,请检查文件权限。"
exit 1
fi
sed -i 's/listen-on port 53 { 127.0.0.1; };/listen-on port 53 { any; };/g' /etc/named.conf
sed -i 's/allow-query { localhost; }/allow-query { any; }/g' /etc/named.conf
cat << EOF >> /etc/named.rfc1912.zones
zone "$a" IN {
type master;
file "/var/named/$a.zone";
};
zone "$c.in-addr.arpa" IN {
type master;
file "/var/named/$c.rev";
};
EOF
# 创建正向解析区域文件
cat << EOF > /var/named/$a.zone
\$TTL 86400
@ IN SOA ns.$a. admin.$a. (
2025032501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns.$a.
$a. IN A $b
ns IN A $b
EOF
# 创建反向解析区域文件
cat << EOF > /var/named/$c.rev
\$TTL 86400
@ IN SOA ns.$a. admin.$a. (
2025032501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns.$a.
$d IN PTR $a.
EOF
# 调整权限
if chown named:named /var/named/$a.zone /var/named/$c.rev && chmod 640 /var/named/$a.zone /var/named/$c.rev; then
echo "区域文件权限设置成功。"
else
echo "区域文件权限设置失败,请检查文件权限。"
exit 1
fi
# 启动BIND服务并设置为开机自启
if systemctl enable named && systemctl start named; then
echo "服务启动成功"
else
echo "DNS服务启动失败,十秒后退出"
sleep 10
exit 1
fi


FTP:
#!/bin/bash
# 检查是否为 root 用户
if [ "$USER" != "root" ]; then
echo "错误:非 root 用户,权限不足!"
exit 1
fi
# 防火墙与高级权限
if systemctl stop firewalld && systemctl disable firewalld; then
echo "防火墙已经关闭"
else
echo "防火墙关闭或禁用失败,请检查防火墙服务。"
exit 1
fi
# 定义变量
read -p "创建虚拟账号名:" Lain
read -p "设置虚拟账号密码:" xiaochanmao
read -p "创建虚拟用户的映射账号:" coke
read -p "创建 ftp 的根目录:" /ftp
# 安装 vsftpd
if ! yum install -y vsftpd; then
echo "vsftpd 安装失败,请检查网络或软件源。"
exit 1
fi
# 创建映射的系统用户
mkdir -p "$a"
useradd -d "$a" -s /sbin/nologin "$zhao"
if [ $? -eq 0 ]; then
echo "创建成功"
else
echo "创建失败,请检查目录或用户是否已存在。"
sleep 5
exit 1
fi
chmod og+rw "$a"
# 创建虚拟用户数据库
echo "$laodi" > /etc/vsftpd/vusers.list
echo "$xiaomao" >> /etc/vsftpd/vusers.list
if ! db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vusers.db; then
echo "虚拟用户数据库创建失败,请检查相关文件权限。"
exit 1
fi
chmod 600 /etc/vsftpd/vusers.db
# 配置 PAM 文件
cat > /etc/pam.d/vsftpd-virtual <<EOF
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
EOF
# 配置 vsftpd
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
listen=YES
listen_ipv6=NO
## 使用虚拟用户
guest_enable=YES
guest_username=$zhao
virtual_use_local_privs=YES
## PAM 配置
pam_service_name=vsftpd-virtual
## 用户目录
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=$a
## 日志配置
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
## 被动模式端口范围
pasv_min_port=30000
pasv_max_port=31000
EOF
# 启动和设置开机自启
if systemctl restart vsftpd && systemctl enable vsftpd; then
echo "FTP 服务已配置完成,使用用户名 '$Lain' 和密码 '$xiaochanmao' 登录"
else
echo "FTP 服务启动或设置开机自启失败,请检查服务配置。"
exit 1
fi


Samba:
#!/bin/bash
# 判断系统类型,选择合适的包管理器安装Samba
if [[ -f /etc/redhat-release ]]; then
PACKAGE_MANAGER="yum"
elif [[ -f /etc/lsb-release ]]; then
PACKAGE_MANAGER="apt"
else
echo "不支持的Linux发行版,请手动安装Samba。"
exit 1
fi
# 安装Samba
echo "开始安装Samba..."
if [ "$PACKAGE_MANAGER" == "yum" ]; then
sudo $PACKAGE_MANAGER install -y samba samba-client
elif [ "$PACKAGE_MANAGER" == "apt" ]; then
sudo $PACKAGE_MANAGER update
sudo $PACKAGE_MANAGER install -y samba
else
echo "安装失败,未知的包管理器。"
exit 1
fi
echo "Samba安装完成。"
# 创建共享目录
SHARE_DIR="/home/samba_share"
sudo mkdir -p $SHARE_DIR
sudo chmod 775 $SHARE_DIR
echo "共享目录 $SHARE_DIR 创建完成。"
# 备份Samba配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
echo "Samba配置文件已备份。"
# 添加共享配置
SHARE_NAME="my_shared"
CONFIG_CONTENT="[${SHARE_NAME}]
path = ${SHARE_DIR}
writeable = yes
browseable = yes
guest ok = no"
echo -e "$CONFIG_CONTENT" | sudo tee -a /etc/samba/smb.conf > /dev/null
echo "共享配置已添加。"
# 添加Samba用户(假设已有系统用户testuser)
USERNAME="testuser"
sudo $PACKAGE_MANAGER install -y expect
(
echo -e "add\n${USERNAME}\npassword\npassword\n"
) | sudo smbpasswd -a -s $USERNAME
echo "Samba用户 $USERNAME 添加完成。"
# 重启Samba服务
if [ "$PACKAGE_MANAGER" == "yum" ]; then
sudo systemctl restart smb nmb
elif [ "$PACKAGE_MANAGER" == "apt" ]; then
sudo systemctl restart smbd
else
echo "无法重启Samba服务。"
exit 1
fi
echo "Samba服务已重启,配置生效。"


