案例需求

以工坊单位为基础,每个工坊设立一个单独共享资源目录,创建FTP虚拟用户名为yunyunwei、dashujv、xiaochengxv;权限限制只有下载没有上传的权限,限制最大带宽60KB;zhang1-6用户的家目录名称对应6个不同的工坊名词缩写;新建的一块20G存储磁盘必须挂载在nfs的共享目录上,每7天晚上21点要求增量备份一次nfs的共享数据,到/backup/weekbackup目录下,存放在以日期命名的目录;每14天清除上上一周的备份数据。

环境准备

IP 节点 版本
192.168.200.50 FTP centos7.5-1804
192.168.200.40 NFS centos7.5-1804

基础搭建

修改主机名:(两台都系要配置以下内容)

  1. [root@localhost ~]# hostnamectl set-hostname ftp
  2. [root@localhost ~]# su
  3. [root@ftp ~]#
  4. [root@localhost ~]# hostnamectl set-hostname nfs
  5. [root@localhost ~]# su
  6. [root@nfs ~]#
  7. # 配置yum源
  8. [root@ftp ~]# mv /etc/yum.repos.d/* /media/
  9. [root@ftp ~]# mount /dev/sr0 /opt/centos/
  10. mount: /dev/sr0 is write-protected, mounting read-only
  11. [root@ftp ~]# yum repolist
  12. Loaded plugins: fastestmirror
  13. Loading mirror speeds from cached hostfile
  14. centos | 3.6 kB 00:00
  15. (1/2): centos/group_gz | 165 kB 00:00
  16. (2/2): centos/primary_db | 3.2 MB 00:00
  17. repo id repo name status
  18. centos centos 4,067
  19. repolist: 4,067
  20. [root@ftp ~]# systemctl stop firewalld
  21. [root@ftp ~]# systemctl disable firewalld
  22. Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
  23. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  24. [root@ftp ~]# setenforce 0
  25. [root@ftp ~]# vim /etc/selinux/config

FTP部署

1.yum安装FTP:

  1. [root@ftp ~]# yum -y install vsftpd

2.启动ftp并设置开机自启:

  1. [root@ftp ~]# systemctl start vsftpd
  2. [root@ftp ~]# systemctl enable vsftpd
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

3.创建虚拟用户账号:

  1. [root@ftp ~]# vim /etc/vsftpd/users.conf
  2. yunyunwei
  3. 000000
  4. dashujv
  5. 000000
  6. xiaochengxv
  7. 000000

4.转化为 Berkeley DB 格式的数据文件:

  1. [root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db

5.设置DB文件权限提高安全性:

  1. [root@ftp ~]# chmod 600 /etc/vsftpd/users.db

6.创建 FTP 根目录及虚拟用户映射的系统用户:

  1. [root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin
  2. [root@ftp ~]# mkdir -p /home/vsftpd/xmcsxy
  3. [root@ftp ~]# chmod -R 777 /home/vsftpd

7.建立支持虚拟用户的PAM认证文件:

  1. [root@ftp ~]# vim /etc/pam.d/vsftpd
  2. auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
  3. account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users

image.png

8.添加虚拟用户支持修改配置文件/etc/vsftpd/vsftpd.conf:

  1. [root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
  2. anonymous_enable=NO
  3. chroot_local_user=yes
  4. guest_enable=YES
  5. allow_writeable_chroot=YES
  6. user_config_dir=/etc/vsftpd/vsftpd_conf

image.png

9.为不同的虚拟用户建立独立的配置文件:

  1. [root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_conf
  2. [root@ftp ~]# cd !$
  3. cd /etc/vsftpd/vsftpd_conf
  4. [root@ftp vsftpd_conf]# vim yunyunwei
  5. local_root=/home/vsftpd/xmcsxy/yunyunwei
  6. write_enable=YES
  7. anon_upload_enable=NO
  8. anon_max_rate=60000
  9. [root@ftp vsftpd_conf]# vim dashujv
  10. local_root=/home/vsftpd/xmcsxy/dashujv
  11. write_enable=YES
  12. anon_upload_enable=NO
  13. anon_max_rate=60000
  14. [root@ftp vsftpd_conf]# vim xiaochengxv
  15. local_root=/home/vsftpd/xmcsxy/xiaochengxv
  16. write_enable=YES
  17. anon_upload_enable=NO
  18. anon_max_rate=60000

10.创建工作目录

  1. [root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/yunyunwei
  2. [root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/dashujv
  3. [root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/xiaochengxv

11.重启服务生效配置文件:

  1. [root@ftp vsftpd_conf]# systemctl restart vsftpd

NFS部署

1.检查环境(两台都需要):

安装nfs依赖包(两台都需要):

  1. [root@nfs ~]# uname -a
  2. Linux nfs 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
  3. [root@nfs ~]# yum install -y nfs-utils rpcbind
  4. [root@ftp ~]# yum install -y nfs-utils rpcbind

2.查看nfsnobody用户在不在(两台都需要):

  1. [root@nfs ~]# id nfsnobody
  2. uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)

3.启动nfs相关服务(两台都需要)

启动rpc服务:
启动nfs服务:

  1. [root@nfs ~]# systemctl start rpcbind
  2. [root@nfs ~]# systemctl enable rpcbind
  3. [root@nfs ~]# systemctl start nfs
  4. [root@nfs ~]# systemctl enable nfs
  5. Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

4.查看rpc端口:

  1. [root@ftp ~]# netstat -lntp | grep rpc
  2. tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 12578/rpcbind
  3. tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 12637/rpc.mountd
  4. tcp 0 0 0.0.0.0:41169 0.0.0.0:* LISTEN 12629/rpc.statd
  5. tcp6 0 0 :::111 :::* LISTEN 12578/rpcbind
  6. tcp6 0 0 :::20048 :::* LISTEN 12637/rpc.mountd
  7. tcp6 0 0 :::57821 :::* LISTEN 12629/rpc.statd

查看端口映射情况:(注:这里nfs服务没启动,看不到nfs端口的映射情况)

  1. [root@ftp ~]# rpcinfo -p localhost
  2. program vers proto port service
  3. 100000 4 tcp 111 portmapper
  4. 100000 3 tcp 111 portmapper
  5. 100000 2 tcp 111 portmapper
  6. 100000 4 udp 111 portmapper
  7. 100000 3 udp 111 portmapper
  8. 100000 2 udp 111 portmapper
  9. 100024 1 udp 49853 status
  10. 100024 1 tcp 41169 status
  11. 100005 1 udp 20048 mountd
  12. 100005 1 tcp 20048 mountd
  13. 100005 2 udp 20048 mountd
  14. 100005 2 tcp 20048 mountd
  15. 100005 3 udp 20048 mountd
  16. 100005 3 tcp 20048 mountd
  17. 100003 3 tcp 2049 nfs
  18. 100003 4 tcp 2049 nfs
  19. 100227 3 tcp 2049 nfs_acl
  20. 100003 3 udp 2049 nfs
  21. 100003 4 udp 2049 nfs
  22. 100227 3 udp 2049 nfs_acl
  23. 100021 1 udp 44110 nlockmgr
  24. 100021 3 udp 44110 nlockmgr
  25. 100021 4 udp 44110 nlockmgr
  26. 100021 1 tcp 44284 nlockmgr
  27. 100021 3 tcp 44284 nlockmgr
  28. 100021 4 tcp 44284 nlockmgr

5.创建共享目录及更改共享目录权限:

  1. [root@nfs ~]# mkdir /data
  2. [root@nfs ~]# chown -R nfsnobody:nfsnobody /data/
  3. [root@nfs ~]# chmod 755 -R /data

6.添加一块磁盘将永久挂载在/data目录上:

① 添加新磁盘重启虚拟机
image.png
② 划分分区

  1. # 查看新磁盘名字
  2. [root@nfs ~]# cat /proc/partitions
  3. major minor #blocks name
  4. 8 0 20971520 sda
  5. 8 1 512000 sda1
  6. 8 2 20458496 sda2
  7. 8 16 20971520 sdb
  8. 11 0 4228096 sr0
  9. 253 0 18317312 dm-0
  10. 253 1 2097152 dm-1
  1. [root@nfs ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 20G 0 disk
  4. ├─sda1 8:1 0 500M 0 part /boot
  5. └─sda2 8:2 0 19.5G 0 part
  6. ├─centos-root 253:0 0 17.5G 0 lvm /
  7. └─centos-swap 253:1 0 2G 0 lvm [SWAP]
  8. sdb 8:16 0 20G 0 disk
  9. sr0 11:0 1 4G 0 rom /mnt/centos
  1. [root@nfs ~]# fdisk /dev/sdb
  2. 欢迎使用 fdisk (util-linux 2.23.2)。
  3. 更改将停留在内存中,直到您决定将更改写入磁盘。
  4. 使用写入命令前请三思。
  5. Device does not contain a recognized partition table
  6. 使用磁盘标识符 0x525d1be7 创建新的 DOS 磁盘标签。
  7. 命令(输入 m 获取帮助):n
  8. Partition type:
  9. p primary (0 primary, 0 extended, 4 free)
  10. e extended
  11. Select (default p): p
  12. 分区号 (1-4,默认 1):
  13. 起始 扇区 (2048-41943039,默认为 2048):
  14. 将使用默认值 2048
  15. Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
  16. 将使用默认值 41943039
  17. 分区 1 已设置为 Linux 类型,大小设为 20 GiB
  18. 命令(输入 m 获取帮助):w
  19. The partition table has been altered!
  20. Calling ioctl() to re-read partition table.
  21. 正在同步磁盘。

进行查看

  1. [root@nfs ~]# fdisk /dev/sdb
  2. 欢迎使用 fdisk (util-linux 2.23.2)。
  3. 更改将停留在内存中,直到您决定将更改写入磁盘。
  4. 使用写入命令前请三思。
  5. 命令(输入 m 获取帮助):p
  6. 磁盘 /dev/sdb21.5 GB, 21474836480 字节,41943040 个扇区
  7. Units = 扇区 of 1 * 512 = 512 bytes
  8. 扇区大小(逻辑/物理):512 字节 / 512 字节
  9. I/O 大小(最小/最佳):512 字节 / 512 字节
  10. 磁盘标签类型:dos
  11. 磁盘标识符:0x525d1be7
  12. 设备 Boot Start End Blocks Id System
  13. /dev/sdb1 2048 41943039 20970496 83 Linux
  14. 命令(输入 m 获取帮助):w
  15. The partition table has been altered!
  16. Calling ioctl() to re-read partition table.
  17. 正在同步磁盘。
  18. [root@nfs ~]# mkfs.ext4 /dev/sdb1
  19. mke2fs 1.42.9 (28-Dec-2013)
  20. 文件系统标签=
  21. OS type: Linux
  22. 块大小=4096 (log=2)
  23. 分块大小=4096 (log=2)
  24. Stride=0 blocks, Stripe width=0 blocks
  25. 1310720 inodes, 5242624 blocks
  26. 262131 blocks (5.00%) reserved for the super user
  27. 第一个数据块=0
  28. Maximum filesystem blocks=2153775104
  29. 160 block groups
  30. 32768 blocks per group, 32768 fragments per group
  31. 8192 inodes per group
  32. Superblock backups stored on blocks:
  33. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
  34. 4096000
  35. Allocating group tables: 完成
  36. 正在写入inode表: 完成
  37. Creating journal (32768 blocks): 完成
  38. Writing superblocks and filesystem accounting information: 0/16完成

7.写入配置文件自动挂载

  1. [root@nfs ~]# vim /etc/fstab
  2. /dev/sdb1 /data ext4 defaults 0 0
  3. [root@nfs ~]# mount -a
  4. [root@nfs ~]# df -h
  5. 文件系统 容量 已用 可用 已用% 挂载点
  6. /dev/mapper/centos-root 18G 1.2G 17G 7% /
  7. devtmpfs 479M 0 479M 0% /dev
  8. tmpfs 489M 0 489M 0% /dev/shm
  9. tmpfs 489M 6.8M 483M 2% /run
  10. tmpfs 489M 0 489M 0% /sys/fs/cgroup
  11. /dev/sr0 4.1G 4.1G 0 100% /mnt/centos
  12. /dev/sda1 497M 124M 373M 25% /boot
  13. tmpfs 98M 0 98M 0% /run/user/0
  14. /dev/sdb1 20G 45M 19G 1% /data

8.配置nfs共享目录

  1. [root@nfs ~]# vim /etc/exports
  2. /data 192.168.200.0/24(rw,no_root_squash,async)
  3. [root@nfs ~]# exportfs -rv
  4. exporting 192.168.200.0/24:/data
  5. [root@nfs ~]# showmount -e 192.168.200.40
  6. Export list for 192.168.200.40:
  7. /data 192.168.200.0/24

调试配置

1.ftp节点配置

  1. [root@ftp ~]# yum install -y nfs-utils rpcbind
  2. [root@ftp ~]# mount -t nfs 192.168.200.40:/data /home/vsftpd/xmcsxy/
  3. [root@ftp ~]# cd /home/vsftpd/xmcsxy/
  4. [root@ftp xmcsxy]# mkdir yunyunwei dashujv xiaocheng
  5. [root@ftp xmcsxy]# ls
  6. dashujv lost+found xiaocheng yunyunwei

2.nfs编写脚本

  1. [root@nfs ~]# vim /usr/local/sbin/backup.sh
  2. a=`date '+%Y%m%d'` #定义时间
  3. b=/backup/weekbackup #定义备份目录路径
  4. c=/var/log/backup.log #定义输出日志路径
  5. pname=$(rpm -qa | grep rsync) #定义rsync安装包检查
  6. #判断rsync是否存在
  7. if [ $? -eq 0 ]
  8. then
  9. echo "软件包rsync已经安装。"
  10. else
  11. echo "软件包rsync没有安装"
  12. yum -y install rsync >> /dev/null
  13. if [ $? -eq 0 ];then
  14. echo "安装rsync完成。"
  15. else
  16. echo "安装rsync失败。"
  17. fi
  18. fi
  19. #判断备份目录是否存在,并增量备份。
  20. if [ ! -d "$b" ];then
  21. mkdir -p $b
  22. echo "$a Backup File missing!" >> /var/log/backup.log
  23. rsync -rvz /data $b/$a
  24. else
  25. rsync -rvz /data $b/$a
  26. if [ -d $b/$a ];then
  27. echo "$a Backup success." >> /var/log/backup.log
  28. find $b -mtime +14 | xargs rm -rf
  29. else
  30. echo "$a Backup failed." >> /var/log/backup.log
  31. fi
  32. fi

3.执行脚本

  1. [root@nfs ~]# yum install -y rsync
  2. [root@nfs ~]# sh -x /usr/local/sbin/backup.sh
  3. ++ date +%Y%m%d
  4. + a=20210924
  5. + b=/backup/weekbackup
  6. + c=/var/log/backup.log
  7. ++ rpm -qa
  8. ++ grep rsync
  9. + pname=rsync-3.1.2-10.el7.x86_64
  10. + '[' 0 -eq 0 ']'
  11. + echo $'\350\275\257\344\273\266\345\214\205rsync\345\267\262\347\273\217\345\256\211\350\243\205\343\200\202'
  12. 软件包rsync已经安装。
  13. + '[' '!' -d /backup/weekbackup ']'
  14. + rsync -rvz /data /backup/weekbackup/20210924
  15. sending incremental file list
  16. created directory /backup/weekbackup/20210924
  17. data/
  18. data/dashujv/
  19. data/lost+found/
  20. data/xiaocheng/
  21. data/yunyunwei/
  22. sent 178 bytes received 86 bytes 528.00 bytes/sec
  23. total size is 0 speedup is 0.00
  24. + '[' -d /backup/weekbackup/20210924 ']'
  25. + echo '20210924 Backup success.'
  26. + find /backup/weekbackup -mtime +14
  27. + xargs rm -rf

4.定时任务

  1. [root@nfs ~]# crontab -e
  2. * 21 */7 * * sh /usr/local/sbin/backup.sh # 每7天晚上21点执行一次脚本