案例需求

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

环境准备

IP 节点 版本
192.168.100.10 FTP centos7.5-2003
192.168.100.20 NFS centos7.5-2003

实施

FTP配置

基础环境准备

  1. [root@localhost ~]# hostnamectl set-hostname ftp
  2. [root@localhost ~]# bash
  3. [root@ftp ~]# mv /etc/yum.repos.d/* /media/
  4. [root@ftp ~]# mkdir -p /opt/centos
  5. [root@ftp ~]# mount /dev/sr0 /opt/centos/
  6. mount: /dev/sr0 写保护,将以只读方式挂载
  7. [root@ftp ~]# vim /etc/yum.repos.d/local.repo
  8. [centos]
  9. name=centos
  10. baseurl=file:///opt/centos
  11. gpgcheck=0
  12. enabled=1
  13. [root@ftp ~]# yum repolist
  14. 已加载插件:fastestmirror
  15. Loading mirror speeds from cached hostfile
  16. centos | 3.6 kB 00:00:00
  17. (1/2): centos/group_gz | 153 kB 00:00:00
  18. (2/2): centos/primary_db | 3.3 MB 00:00:00
  19. 源标识 源名称 状态
  20. centos centos 4,071
  21. repolist: 4,071
  22. [root@ftp ~]#

ftp安装配置

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

配置用户密码

  1. [root@ftp ~]# vim /etc/vsftpd/users.conf
  2. yunyunwei
  3. 123456
  4. dashuju
  5. 123456
  6. sxb
  7. 123456

生成hash文件

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

配置权限

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

创建用户,指定目录

  1. [root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin
  2. [root@ftp ~]#

创建工作目录、授权

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

指定验证文件

  1. [root@ftp ~]# vim /etc/pam.d/vsftpd
  2. 在第二行插入下面两行
  3. auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users
  4. account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/users

修改配置文件、指定子文件

  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
  7. 切记不要多打空格

创建子配置文件目录

  1. [root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_conf
  2. [root@ftp ~]# cd !$
  3. cd /etc/vsftpd/vsftpd_conf
  4. [root@ftp vsftpd_conf]# ls
  5. [root@ftp vsftpd_conf]#

创建云运维用户配置文件

  1. [root@ftp vsftpd_conf]# vim yunyunwei
  2. local_root=/home/vsftpd/xmcsxy/yunyunwei
  3. write_enable=YES
  4. anon_upload_enable=NO
  5. anon_max_rate=60000
  6. [root@ftp vsftpd_conf]# vim dashuju
  7. local_root=/home/vsftpd/xmcsxy/dashuju
  8. write_enable=YES
  9. anon_upload_enable=NO
  10. anon_max_rate=60000
  11. [root@ftp vsftpd_conf]# vim sxb
  12. local_root=/home/vsftpd/xmcsxy/sxb
  13. write_enable=YES
  14. anon_upload_enable=NO
  15. anon_max_rate=60000

创建工作目录

  1. [root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/yunyunwei
  2. [root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/dashuju
  3. [root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/sxb
  4. [root@ftp vsftpd_conf]#

重启生效

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

NFS部署

基本环境准备

  1. [root@localhost ~]# hostnamectl set-hostname nfs
  2. [root@localhost ~]# bash
  3. [root@nfs ~]#
  4. [root@nfs ~]# systemctl stop firewalld
  5. [root@nfs ~]# systemctl disable firewalld
  6. Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
  7. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  8. [root@nfs ~]# setenforce 0
  9. [root@nfs ~]# vi /etc/selinux/config
  10. [root@nfs ~]# mv /etc/yum.repos.d/* /media/
  11. [root@nfs ~]# vim /etc/yum.repos.d/local.repo
  12. [centos]
  13. name=centos
  14. baseurl=file:///opt/centos
  15. gpgcheck=0
  16. enabled=1
  17. [root@nfs ~]# mkdir -p /opt/centos
  18. [root@nfs ~]# mount /dev/sr0 /opt/centos/
  19. mount: /dev/sr0 写保护,将以只读方式挂载
  20. [root@nfs ~]# yum repolist
  21. 已加载插件:fastestmirror
  22. Determining fastest mirrors
  23. centos | 3.6 kB 00:00:00
  24. (1/2): centos/group_gz | 153 kB 00:00:00
  25. (2/2): centos/primary_db | 3.3 MB 00:00:00
  26. 源标识 源名称 状态
  27. centos centos 4,071
  28. repolist: 4,071
  29. [root@nfs ~]#

NFS配置

  1. [root@nfs ~]# yum install -y nfs-utils rpcbind

确认是否有这个用户

  1. [root@nfs ~]# id nfsnobody
  2. uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
  3. [root@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.
  6. [root@nfs ~]# netstat -ntlp | grep rpc
  7. tcp 0 0 0.0.0.0:60417 0.0.0.0:* LISTEN 1863/rpc.statd
  8. tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1805/rpcbind
  9. tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1882/rpc.mountd
  10. tcp6 0 0 :::47791 :::* LISTEN 1863/rpc.statd
  11. tcp6 0 0 :::111 :::* LISTEN 1805/rpcbind
  12. tcp6 0 0 :::20048 :::* LISTEN 1882/rpc.mountd
  13. [root@nfs ~]#

创建存放数据目录

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

添加磁盘分区挂载

  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 1G 0 part /boot
  5. └─sda2 8:2 0 19G 0 part
  6. ├─centos-root 253:0 0 17G 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 4.5G 0 rom
  10. [root@nfs ~]# fdisk /dev/sdb
  11. 欢迎使用 fdisk (util-linux 2.23.2)。
  12. 更改将停留在内存中,直到您决定将更改写入磁盘。
  13. 使用写入命令前请三思。
  14. Device does not contain a recognized partition table
  15. 使用磁盘标识符 0xcfb070b3 创建新的 DOS 磁盘标签。
  16. 命令(输入 m 获取帮助):n
  17. Partition type:
  18. p primary (0 primary, 0 extended, 4 free)
  19. e extended
  20. Select (default p):
  21. Using default response p
  22. 分区号 (1-4,默认 1):
  23. 起始 扇区 (2048-41943039,默认为 2048):
  24. 将使用默认值 2048
  25. Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
  26. 将使用默认值 41943039
  27. 分区 1 已设置为 Linux 类型,大小设为 20 GiB
  28. 命令(输入 m 获取帮助):p
  29. 磁盘 /dev/sdb21.5 GB, 21474836480 字节,41943040 个扇区
  30. Units = 扇区 of 1 * 512 = 512 bytes
  31. 扇区大小(逻辑/物理):512 字节 / 512 字节
  32. I/O 大小(最小/最佳):512 字节 / 512 字节
  33. 磁盘标签类型:dos
  34. 磁盘标识符:0xcfb070b3
  35. 设备 Boot Start End Blocks Id System
  36. /dev/sdb1 2048 41943039 20970496 83 Linux
  37. 命令(输入 m 获取帮助):w
  38. The partition table has been altered!
  39. Calling ioctl() to re-read partition table.
  40. 正在同步磁盘。
  41. [root@nfs ~]#
  42. 格式化
  43. [root@nfs ~]# mkfs.ext4 /dev/sdb1
  44. mke2fs 1.42.9 (28-Dec-2013)
  45. 文件系统标签=
  46. OS type: Linux
  47. 块大小=4096 (log=2)
  48. 分块大小=4096 (log=2)
  49. Stride=0 blocks, Stripe width=0 blocks
  50. 1310720 inodes, 5242624 blocks
  51. 262131 blocks (5.00%) reserved for the super user
  52. 第一个数据块=0
  53. Maximum filesystem blocks=2153775104
  54. 160 block groups
  55. 32768 blocks per group, 32768 fragments per group
  56. 8192 inodes per group
  57. Superblock backups stored on blocks:
  58. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
  59. 4096000
  60. Allocating group tables: 完成
  61. 正在写入inode表: 完成
  62. Creating journal (32768 blocks): 完成
  63. Writing superblocks and filesystem accounting information: 完成
  64. [root@nfs ~]#

写入配置文件自动挂载

  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. devtmpfs 898M 0 898M 0% /dev
  7. tmpfs 910M 0 910M 0% /dev/shm
  8. tmpfs 910M 9.6M 901M 2% /run
  9. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  10. /dev/mapper/centos-root 17G 1.5G 16G 9% /
  11. /dev/sda1 1014M 150M 865M 15% /boot
  12. tmpfs 182M 0 182M 0% /run/user/0
  13. /dev/sdb1 20G 45M 19G 1% /data
  14. [root@nfs ~]#

配置nfs共享目录

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

调试配置

ftp节点配置

  1. [root@ftp vsftpd_conf]# yum install -y nfs-utils rpcbind
  2. [root@ftp vsftpd_conf]# mount -t nfs 192.168.100.20:/data /home/vsftpd/xmcsxy/
  3. [root@ftp vsftpd_conf]# df -h
  4. 文件系统 容量 已用 可用 已用% 挂载点
  5. devtmpfs 898M 0 898M 0% /dev
  6. tmpfs 910M 0 910M 0% /dev/shm
  7. tmpfs 910M 9.6M 901M 2% /run
  8. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  9. /dev/mapper/centos-root 17G 1.5G 16G 9% /
  10. /dev/sda1 1014M 150M 865M 15% /boot
  11. tmpfs 182M 0 182M 0% /run/user/0
  12. /dev/sr0 4.5G 4.5G 0 100% /opt/centos
  13. 192.168.100.20:/data 20G 44M 19G 1% /home/vsftpd/xmcsxy
  14. [root@ftp vsftpd_conf]# cd /home/vsftpd/xmcsxy/
  15. [root@ftp xmcsxy]# ls
  16. lost+found
  17. [root@ftp xmcsxy]# mkdir yunyunwei dashuju sxb
  18. [root@ftp xmcsxy]# ls
  19. dashuju lost+found sxb yunyunwei
  20. [root@ftp xmcsxy]#

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

执行脚本

  1. [root@nfs ~]# sh -x /usr/local/sbin/backup.sh
  2. 如果脚本执行错误是因为上面添加了一块硬盘关闭了虚拟机,需要重新挂载即可
  3. [root@nfs ~]# mount /dev/sr0 /opt/centos/

定时任务

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

至此,完成