vsftp
6. 案例实施
6.1 基础搭建
修改主机名:
[root@localhost~]# hostnamectl set-hostname ftp [root@localhost~]# hostnamectl set-hostname nfs
关闭防火墙及安全规则:
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
6.2 FTP部署
yum安装FTP:
[root@ftp ~]# yum -y install vsftpd
启动ftp并设置开机自启:
[root@ftp ~]# systemctl start vsftpd
[root@ftp ~]# systemctl enable vsftpd
创建虚拟用户账号(zhang1-6):
[root@ftp ~]# vi /etc/vsftpd/users.conf
转化为 Berkeley DB 格式的数据文件:
[root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db
设置DB文件权限提高安全性:
[root@ftp ~]# chmod 600 /etc/vsftpd/users.db
创建 FTP 根目录及虚拟用户映射的系统用户:
[root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin [root@ftp ~]# mkdir -p /home/vsftpd/xmcsxy [root@ftp ~]# chmod -R 755 /home/vsftpd
建立支持虚拟用户的PAM认证文件:
[root@ftp ~]# vi /etc/pam.d/vsftpd auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
备份配置文件并导入有效参数:
[root@ftp ~]# cp /etc/vsftpd/vsftpd.conf{,.bak} [root@ftp ~]# egrep -v '^$|^#' /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
添加虚拟用户支持修改配置文件/etc/vsftpd/vsftpd.conf:
anonymous_enable=NO chroot_local_user=YES guest_enable=YES allow_writeable_chroot=YES user_config_dir=/etc/vsftpd/vsftpd_conf
为不同的虚拟用户建立独立的配置文件:
[root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_conf [root@ftp ~]# cd /etc/vsftpd/vsftpd_conf [root@ftp vsftpd_conf]# vi zhang1 local_root=/home/vsftpd/xmcsxy/yumwei write_enable=YES anon_upload_enable=NO anon_max_rate=60000
以此类推把zhang1.....zhang6配置完,修改每个用户的本地家目录路径!
重启服务生效配置文件:
[root@ftp ~]# systemctl restart vsftpd [root@ftp ~]# systemctl status vsftpd [root@ftp ~]# netstat -lntp | grep 21 tcp6 0 0 :::21 :::* LISTEN 18750/vsftpd
6.3 NFS部署
检查环境(两台都需要):
# uname -a
安装nfs依赖包(两台都需要):
# yum -y install nfs-utils rpcbind
查看nfsnobody用户在不在(两台都需要):
# id nfsnobody uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
启动nfs相关服务(两台都需要)
启动rpc服务:
# systemctl start rpcbind
# systemctl enable rpcbind
启动nfs服务:
# systemctl start nfs
# systemctl enable nfs
查看rpc端口:
[root@ftp ~]# netstat -lntp | grep rpc tcp 0 0 0.0.0.0:34875 0.0.0.0:* LISTEN 19141/rpc.statd tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 19162/rpc.mountd tcp6 0 0 :::48860 :::* LISTEN 19141/rpc.statd tcp6 0 0 :::20048 :::* LISTEN 19162/rpc.mountd
创建共享目录:
[root@nfs ~]# mkdir /data
更改共享目录权限:
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data [root@nfs ~]# chmod 755 -R /data
添加一块磁盘将永久挂载在/data目录上:
① 添加新磁盘重启虚拟机
② 划分分区
# cat /proc/partitions
[root@nfs ~]# fdisk /dev/sdb 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039): 将使用默认值 41943039 分区 1 已设置为 Linux 类型,大小设为 20 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘
③ 格式化分区并永久挂载
[root@nfs ~]# mkfs.ext4 /dev/sdb1
[root@nfs ~]# vi /etc/fstab /dev/sdb1 /data ext4 defaults 0 0 [root@nfs ~]# mount -a [root@nfs ~]# df -h #查看是否挂载成功 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.6M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 21G 1.3G 20G 7% / /dev/sda1 1014M 150M 865M 15% /boot tmpfs 182M 0 182M 0% /run/user/0 /dev/sdb1 20G 45M 19G 1% /data
④ 配置nfs共享目录
[root@nfs ~]# vi /etc/exports /data 192.168.174.0/24(rw,no_root_squash,async) no_root_squash
#分配no_root_squash权限
⑤ 生效配置与检验
[root@nfs ~]# exportfs -rv exporting 192.168.174.0/24:/data [root@nfs ~]# showmount -e localhost Export list for localhost: /data 192.168.174.0/24 [root@ftp ~]# showmount -e 192.168.174.12 Export list for 192.168.174.12: /data 192.168.174.0/24
6.4 调试与检验成果
将/data目录挂载到/home/vsftpd/xmcsxy/目录上
[root@ftp ~]# mount -t nfs 192.168.174.12:/data /home/vsftpd/xmcsxy/ [root@ftp ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.6M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 30G 1.3G 29G 5% / /dev/sda1 1014M 149M 865M 15% /boot tmpfs 182M 0 182M 0% /run/user/0 192.168.174.12:/data 20G 44M 19G 1% /home/vsftpd/xmcsxy
创建对应FTP虚拟用户的家目录:
[root@ftp ~]# cd /home/vsftpd/xmcsxy/ [root@ftp xmcsxy]# mkdir yumwei [root@ftp xmcsxy]# mkdir JAVA [root@ftp xmcsxy]# mkdir bigdata [root@ftp xmcsxy]# mkdir weixin [root@ftp xmcsxy]# mkdir android [root@ftp xmcsxy]# mkdir game [root@ftp xmcsxy]# ll drwxr-xr-x. 2 root root 4096 3月 10 22:26 android drwxr-xr-x. 2 root root 4096 3月 10 22:25 bigdata drwxr-xr-x. 2 root root 4096 3月 10 22:26 game drwxr-xr-x. 2 root root 4096 3月 10 22:25 JAVA drwxr-xr-x. 2 root root 4096 3月 10 22:25 weixin drwxr-xr-x. 2 root root 4096 3月 10 22:25 yumwei
测试虚拟用户登录:
在nfs服务端安装lftp(ftp命令行客户端):
[root@nfs ~]# yum -y install lftp [root@nfs ~]# lftp zhang1@192.168.174.11 口令: lftp zhang1@192.168.174.11:~> ls -rw-r--r-- 1 0 0 18019170 Feb 20 03:25 zabbix-4.0.3.tar.gz
尝试再往yunwei目录添加一个文件:
[root@ftp xmcsxy]# cd yumwei/ [root@ftp yumwei]# touch 1.txt [root@ftp yumwei]# ll 总用量 0 -rw-r--r--. 1 root root 0 3月 10 22:29 1.txt
再次查看:
lftp zhang1@192.168.174.11:/> ls -rw-r--r-- 1 0 0 0 Mar 10 14:29 1.txt -rw-r--r-- 1 0 0 18019170 Feb 20 03:25 zabbix-4.0.3.tar.gz lftp zhang1@192.168.174.11:/> get zabbix-4.0.3.tar.gz
使用windows图像化FTP工具:
至此架构系统部署已经完成!
6.5 shell备用数据脚本及定时计划
脚本实现:
[root@nfs ~]# vi /usr/local/sbin/backup.sh a=`date '+%Y%m%d'` #定义时间 b=/backup/weekbackup #定义备份目录路径 c=/var/log/backup.log #定义输出日志路径 pname=$(rpm -qa | grep rsync) #定义rsync安装包检查 #判断rsync是否存在 if [ $? -eq 0 ] then echo "软件包rsync已经安装。" fi
#判断备份目录是否存在,并增量备份。
if [ ! -d "$b" ];then
mkdir -p $b
echo "$a Backup File missing!" >> /var/log/backup.log
rsync -rvz /data $b/$a
else
rsync -rvz /data $b/$a
if [ -d $b/$a ];then
echo "$a Backup success." >> /var/log/backup.log
find $b -mtime +14 | xargs rm -rf
else
echo "$a Backup failed." >> /var/log/backup.log
fi
fi
测试脚本执行过程结果:
[root@nfs ~]# sh -x /usr/local/sbin/backup.sh ++ date +%Y%m%d + a=20210611 + b=/backup/weekbackup + c=/var/log/backup.log ++ rpm -qa ++ grep rsync + pname=rsync-3.1.2-6.el7_6.1.x86_64 + '[' 0 -eq 0 ']' + echo 软件包rsync已经安装。 软件包rsync已经安装。 + '[' '!' -d /backup/weekbackup ']' + rsync -rvz /data /backup/weekbackup/20200313 sending incremental file list created directory /backup/weekbackup/20200313 data/ data/android/ data/bigdata/ data/game/ data/java/ data/lost+found/ data/weixin/ data/yumwei/ data/yumwei/a.txt data/yumwei/zabbix-4.0.3.tar.gz sent 17,943,474 bytes received 140 bytes 2,760,556.00 bytes/sec total size is 18,019,170 speedup is 1.00 + '[' -d /backup/weekbackup/20200313 ']' + echo '20200313 Backup success.' + find /backup/weekbackup -mtime +14 + xargs rm -rf
定时计划:
[root@nfs ~]# crontab -e * 21 */7 * * sh /usr/local/sbin/backup.sh
#每7天晚上21点执行一次脚本
至此案例实操完成!