服务需求
DNS服务器 为公司局域网内各主机提供域名解析 各主机均能通过域名访问
部署DNS服务
基于 BIND DNS 服务器
- 编辑区域文件:
- 找到
rzy.com
对应的区域文件。假设在/etc/named.conf
中配置如下:
- 找到
zone "rzy.com" IN {
type master;
file "rzy.com.zone";
};
用文本编辑器打开rzy.com.zone
文件,添加以下两条 A 记录:
ftp.com. IN A 10.10.10.143
samba.com. IN A 10.10.10.143
- 检查语法并重启 BIND 服务3:
- 执行
named-checkzone rzy.com /var/named/rzy.com.zone
命令检查区域文件语法。 - 若语法无误,使用
systemctl restart named
命令(CentOS 系统)或service bind9 restart
命令(Ubuntu 系统)重启 BIND 服务。
- 执行
如果现实中centos 7 服务器上没有配置DNS侧需要从新开始做,我这个是基于已经有DNS服务的过程
测试解析域名
FTP服务器 为公司员工提供图片存储和访问服务 公司UI设计师能够上传下载图片 外包人员能够上传浏览图片
部署FTP服务
定时备份文件
通过tar命令压缩成log.tgz文件,放置到FTP服务器的/var/ftp/pub目录内,并设置定时任务,每天晚上十点备份一次
1. 使用tar命令压缩文件 假设你要压缩的文件或目录名为logs(你可以根据实际情况修改),使用以下tar命令将其压缩成log.tgz文件:
tar -czvf log.tgz logs
• -c:创建新的归档文件。
• -z:通过 gzip 压缩算法对归档文件进行压缩。
• -v:显示压缩过程中的详细信息。
• -f:指定归档文件名,这里是log.tgz
2. 将压缩文件上传到 FTP 服务器 可以使用lftp或ftp命令行工具将文件上传到 FTP 服务器的/var/ftp/pub目录。以下以lftp为例
lftp -u <username> <ftp_server_ip> << EOF
cd /var/ftp/pub
put log.tgz
bye
EOF
请将<username>替换为你的 FTP 用户名,<ftp_server_ip>替换为实际的 FTP 服务器 IP 地址。
3. 设置定时任务 使用crontab来设置每天晚上十点备份一次的定时任务。执行以下命令编辑当前用户的crontab文件:
crontab -e
在打开的编辑器(通常是vi或nano)中,添加以下一行内容
0 22 * * * /bin/bash -c 'tar -czvf /path/to/log.tgz /path/to/logs && lftp -u <username> <ftp_server_ip> << EOF
cd /var/ftp/pub
put /path/to/log.tgz
bye
EOF'
请将/path/to/log.tgz替换为实际的压缩文件保存路径,/path/to/logs替换为实际要备份的文件或目录路径,<username>替换为 FTP 用户名,<ftp_server_ip>替换为 FTP 服务器的 IP 地址。
访问FTP服务器
要求员工A是公司的UI设计师,其画出的图片通过访问域名ftp.abc.com存储在FTP服务器上/data目录下,员工A对FTP服务器具备图片上传下载权限 另外公司由于业务繁忙、任务量大,还有一个外包人员B,其对FTP服务器仅具备上传图片和浏览图片的权限,不具备图片下载权限
搭建过程
1 安装Vsftpd服务
yum install vsftpd -y
vsftp虚拟用户是为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号,
相对于FTP的本地用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP
服务器所提供的资源。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本
地用户具有类似的功能,由于虚拟用户账号具有较高的安全性,可以替代本地用户账号使用。
2 创建vsftpd使用的系统用户,主目录为/home/vsftpd,禁止ssh登录, 创建之后所有
虚拟用户使用这个系统用户访问文件
# useradd vsftpd -d /vsftpd -s /bin/false
# ls -ld /vsftpd/
drwx------ 2 vsftpd vsftpd 62 Feb 2 15:34 /vsftpd/
3 创建虚拟用户主目录,比如虚拟用户叫ftp1
# mkdir -p /vsftpd/ftp1/
# mkdir -p /vsftpd/ftp2/
# chown -R vsftpd.vsftpd /vsftpd/*
# ls -l /vsftpd/
total 0
drwxr-xr-x 2 vsftpd vsftpd 6 Feb 2 15:35 ftp1
drwxr-xr-x 2 vsftpd vsftpd 6 Feb 2 15:35 ftp2
4 创建虚拟用户
# vi /etc/vsftpd/loginusers.conf
ftp1
123456
ftp2
456789
这样就创建了ftp1这个虚拟用户,密码为 123456
这样就创建了ftp2这个虚拟用户,密码为 456789
5 创建数据库文件
# db_load -T -t hash -f /etc/vsftpd/loginusers.conf /etc/vsftpd/loginusers.db
# chmod 600 /etc/vsftpd/loginusers.db
# chmod 600 /etc/vsftpd/loginusers.conf
6 启用数据库文件
# vi /etc/pam.d/vsftpd # 注释掉所有内容后,增加下面的内容
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginusers
7 创建虚拟用户配置文件
# mkdir -p /etc/vsftpd/userconf
这里的文件名称必须与虚拟用户名一致
# vi /etc/vsftpd/userconf/ftp1
local_root=/vsftpd/ftp1
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# vi /etc/vsftpd/userconf/ftp2
local_root=/vsftpd/ftp2
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
8 修改主配置文件
配置/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
#网络与端口
listen=NO
listen_ipv6=YES
pasv_min_port=40000
pasv_max_port=40010
listen_port=21
#超时与并发
idle_session_timeout=300
data_connection_timeout=600
max_clients=3000
max_per_ip=3000
#虚拟用户
guest_enable=YES
guest_username=vsftpduser
user_config_dir=/etc/vsftpd/vconf
virtual_use_local_privs=YES
#日志与传输
xferlog_enable=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
#其他配置
use_localtime=YES
ftpd_banner=Welcome to blah FTP service.
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
dirmessage_enable=YES
connect_from_port_20=YES
async_abor_enable=YES
9 重启服务使配置生效
systemctl restart vsftpd
验证是否能连接
部署Samba服务
1. yum install samba -y
2. mkdir -p /samba
chmod -R 777 /samba
3. useradd -M samba #创建系统用户不创建属主目录
smbpasswd -a samba #为其设置samba密码
4. vim /etc/samba/smb.conf
[samba]
comment = IMMENGXIN ##共享的描述性注释
path = /samba ##共享目录的实际路径
public = yes ##表明允许未授权的用户访问该共享
browseable = yes ##表示这个共享在网络中是可见的
read only = no ##意味着客户端对该共享目录具备读写权限
5. systemctl start smb nmb
systemctl enable smb nmb
systemctl restart smb nmb
6.验证 smbclient //192.168.17.128/samba -U samba
验证服务连接情况
安全需求
加强系统账号安全 清理无用的账号,锁定长期不用的账号,
锁定账号配置文件 设置用户密码的过期时间为90天
配置保持历史命令10条 配置闲置超时时间为600秒
加强系统引导和登录安全 为GRUB菜单设置密码,限制更改GRUB引导参数
禁止root用户从tty5、tty6登录 检测弱口令账号 使用John the Ripper检查所有服务器的弱口令
根据弱口令检测检测结果分别重设口令,提高口令复杂度
脚本运行
#!/bin/bash
# 清理无用的账号
# 这里只是示例,实际使用时需要根据具体情况判断哪些账号是无用的
# 假设无用账号列表为 useless_users,可根据实际情况修改
useless_users=("testuser1" "testuser2")
for user in "${useless_users[@]}"; do
user_exists=$(id -u "$user" >/dev/null 2>&1; echo $?)
if [ $user_exists -eq 0 ]; then
userdel -r "$user"
echo "已删除无用账号: $user"
else
echo "账号 $user 不存在,无需删除"
fi
done
# 锁定长期不用的账号
# 假设90天未使用的账号视为长期不用,这里只是示例,实际需根据情况调整
# 注意:此部分需要结合系统的账号使用记录等信息来准确判断,以下只是简单示例
# 查找90天内未修改密码的用户
inactive_users=$(chage -l $(cut -d: -f1 /etc/passwd) | grep "Password last set" | awk '{print $NF}' | while read -r date; do
last_change=$(date -d "$date" +%s)
current_time=$(date +%s)
diff=$(( (current_time - last_change) / (60 * 60 * 24) ))
if [ $diff -gt 90 ]; then
user=$(grep "Password last set.*$date" <(chage -l $(cut -d: -f1 /etc/passwd)) | head -n1 | awk '{print $1}')
echo "$user"
fi
done)
for user in $inactive_users; do
passwd -l "$user"
echo "已锁定长期不用的账号: $user"
done
# 锁定账号配置文件
chattr +i /etc/passwd /etc/shadow
echo "已锁定账号配置文件 /etc/passwd 和 /etc/shadow"
# 设置用户密码的过期时间为90天
# 遍历所有用户设置密码过期时间
while read -r user; do
chage -M 90 "$user"
done < <(cut -d: -f1 /etc/passwd)
echo "已将所有用户密码过期时间设置为90天"
# 配置保持历史命令10条
# 修改用户的.bashrc 文件(针对bash shell),可根据实际情况修改
# 这里只是示例,实际可能需要对所有用户或特定用户组进行操作
while read -r user; do
user_home=$(getent passwd "$user" | cut -d: -f6)
if [ -d "$user_home" ]; then
echo "HISTSIZE=10" >> "$user_home/.bashrc"
echo "已为用户 $user 配置历史命令保留10条"
fi
done < <(cut -d: -f1 /etc/passwd)
# 配置闲置超时时间为600秒
# 修改 /etc/profile 文件,对所有用户生效
echo "TMOUT=600" >> /etc/profile
echo "已配置闲置超时时间为600秒"
# 为GRUB菜单设置密码
# 生成GRUB密码哈希值,这里需要手动输入密码
password=$(grub2-mkpasswd-pbkdf2)
# 假设GRUB配置文件为 /etc/default/grub
sed -i 's/^GRUB_CMDLINE_LINUX=".*"/GRUB_CMDLINE_LINUX="password_pbkdf2 root '$password'"/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
echo "已为GRUB菜单设置密码"
# 禁止root用户从tty5、tty6登录
# 修改 /etc/securetty 文件
sed -i '/tty5/d' /etc/securetty
sed -i '/tty6/d' /etc/securetty
echo "已禁止root用户从tty5、tty6登录"
# 检测弱口令账号
# 假设John the Ripper已安装且在PATH中
# 这里只是示例,实际使用时需要确保有足够的权限读取 /etc/shadow 文件
john --wordlist=/path/to/wordlist.txt /etc/shadow
echo "已使用John the Ripper检测弱口令账号"
# 根据弱口令检测结果分别重设口令,提高口令复杂度
# 这里只是示例,实际需要根据John the Ripper的输出结果来判断哪些账号是弱口令账号
# 假设弱口令账号列表为 weak_users,可根据实际情况修改
weak_users=("user_with_weak_password1" "user_with_weak_password2")
for user in "${weak_users[@]}"; do
new_password=$(openssl rand -base64 12) # 生成一个12位的随机密码
echo "$user:$new_password" | chpasswd
echo "已为重设弱口令账号 $user 的密码"
done