案例需求
以工坊单位为基础,每个工坊设立一个单独共享资源目录,创建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 |
基础搭建
修改主机名:(两台都系要配置以下内容)
[root@localhost ~]# hostnamectl set-hostname ftp
[root@localhost ~]# su
[root@ftp ~]#
[root@localhost ~]# hostnamectl set-hostname nfs
[root@localhost ~]# su
[root@nfs ~]#
# 配置yum源
[root@ftp ~]# mv /etc/yum.repos.d/* /media/
[root@ftp ~]# mount /dev/sr0 /opt/centos/
mount: /dev/sr0 is write-protected, mounting read-only
[root@ftp ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
centos | 3.6 kB 00:00
(1/2): centos/group_gz | 165 kB 00:00
(2/2): centos/primary_db | 3.2 MB 00:00
repo id repo name status
centos centos 4,067
repolist: 4,067
[root@ftp ~]# systemctl stop firewalld
[root@ftp ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@ftp ~]# setenforce 0
[root@ftp ~]# vim /etc/selinux/config
FTP部署
1.yum安装FTP:
[root@ftp ~]# yum -y install vsftpd
2.启动ftp并设置开机自启:
[root@ftp ~]# systemctl start vsftpd
[root@ftp ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
3.创建虚拟用户账号:
[root@ftp ~]# vim /etc/vsftpd/users.conf
yunyunwei
000000
dashujv
000000
xiaochengxv
000000
4.转化为 Berkeley DB 格式的数据文件:
[root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db
5.设置DB文件权限提高安全性:
[root@ftp ~]# chmod 600 /etc/vsftpd/users.db
6.创建 FTP 根目录及虚拟用户映射的系统用户:
[root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin
[root@ftp ~]# mkdir -p /home/vsftpd/xmcsxy
[root@ftp ~]# chmod -R 777 /home/vsftpd
7.建立支持虚拟用户的PAM认证文件:
[root@ftp ~]# vim /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
8.添加虚拟用户支持修改配置文件/etc/vsftpd/vsftpd.conf:
[root@ftp ~]# vim /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
9.为不同的虚拟用户建立独立的配置文件:
[root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_conf
[root@ftp ~]# cd !$
cd /etc/vsftpd/vsftpd_conf
[root@ftp vsftpd_conf]# vim yunyunwei
local_root=/home/vsftpd/xmcsxy/yunyunwei
write_enable=YES
anon_upload_enable=NO
anon_max_rate=60000
[root@ftp vsftpd_conf]# vim dashujv
local_root=/home/vsftpd/xmcsxy/dashujv
write_enable=YES
anon_upload_enable=NO
anon_max_rate=60000
[root@ftp vsftpd_conf]# vim xiaochengxv
local_root=/home/vsftpd/xmcsxy/xiaochengxv
write_enable=YES
anon_upload_enable=NO
anon_max_rate=60000
10.创建工作目录
[root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/yunyunwei
[root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/dashujv
[root@ftp vsftpd_conf]# mkdir -p /home/vsftpd/xmcsxy/xiaochengxv
11.重启服务生效配置文件:
[root@ftp vsftpd_conf]# systemctl restart vsftpd
NFS部署
1.检查环境(两台都需要):
安装nfs依赖包(两台都需要):
[root@nfs ~]# uname -a
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
[root@nfs ~]# yum install -y nfs-utils rpcbind
[root@ftp ~]# yum install -y nfs-utils rpcbind
2.查看nfsnobody用户在不在(两台都需要):
[root@nfs ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
3.启动nfs相关服务(两台都需要)
启动rpc服务:
启动nfs服务:
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
4.查看rpc端口:
[root@ftp ~]# netstat -lntp | grep rpc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 12578/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 12637/rpc.mountd
tcp 0 0 0.0.0.0:41169 0.0.0.0:* LISTEN 12629/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 12578/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 12637/rpc.mountd
tcp6 0 0 :::57821 :::* LISTEN 12629/rpc.statd
查看端口映射情况:(注:这里nfs服务没启动,看不到nfs端口的映射情况)
[root@ftp ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 49853 status
100024 1 tcp 41169 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 44110 nlockmgr
100021 3 udp 44110 nlockmgr
100021 4 udp 44110 nlockmgr
100021 1 tcp 44284 nlockmgr
100021 3 tcp 44284 nlockmgr
100021 4 tcp 44284 nlockmgr
5.创建共享目录及更改共享目录权限:
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody:nfsnobody /data/
[root@nfs ~]# chmod 755 -R /data
6.添加一块磁盘将永久挂载在/data目录上:
① 添加新磁盘重启虚拟机
② 划分分区
# 查看新磁盘名字
[root@nfs ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 512000 sda1
8 2 20458496 sda2
8 16 20971520 sdb
11 0 4228096 sr0
253 0 18317312 dm-0
253 1 2097152 dm-1
[root@nfs ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-root 253:0 0 17.5G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4G 0 rom /mnt/centos
[root@nfs ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x525d1be7 创建新的 DOS 磁盘标签。
命令(输入 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 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x525d1be7
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@nfs ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 0/16完成
7.写入配置文件自动挂载
[root@nfs ~]# vim /etc/fstab
/dev/sdb1 /data ext4 defaults 0 0
[root@nfs ~]# mount -a
[root@nfs ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 1.2G 17G 7% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 483M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sr0 4.1G 4.1G 0 100% /mnt/centos
/dev/sda1 497M 124M 373M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 20G 45M 19G 1% /data
8.配置nfs共享目录
[root@nfs ~]# vim /etc/exports
/data 192.168.200.0/24(rw,no_root_squash,async)
[root@nfs ~]# exportfs -rv
exporting 192.168.200.0/24:/data
[root@nfs ~]# showmount -e 192.168.200.40
Export list for 192.168.200.40:
/data 192.168.200.0/24
调试配置
1.ftp节点配置
[root@ftp ~]# yum install -y nfs-utils rpcbind
[root@ftp ~]# mount -t nfs 192.168.200.40:/data /home/vsftpd/xmcsxy/
[root@ftp ~]# cd /home/vsftpd/xmcsxy/
[root@ftp xmcsxy]# mkdir yunyunwei dashujv xiaocheng
[root@ftp xmcsxy]# ls
dashujv lost+found xiaocheng yunyunwei
2.nfs编写脚本
[root@nfs ~]# vim /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已经安装。"
else
echo "软件包rsync没有安装"
yum -y install rsync >> /dev/null
if [ $? -eq 0 ];then
echo "安装rsync完成。"
else
echo "安装rsync失败。"
fi
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
3.执行脚本
[root@nfs ~]# yum install -y rsync
[root@nfs ~]# sh -x /usr/local/sbin/backup.sh
++ date +%Y%m%d
+ a=20210924
+ b=/backup/weekbackup
+ c=/var/log/backup.log
++ rpm -qa
++ grep rsync
+ pname=rsync-3.1.2-10.el7.x86_64
+ '[' 0 -eq 0 ']'
+ 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'
软件包rsync已经安装。
+ '[' '!' -d /backup/weekbackup ']'
+ rsync -rvz /data /backup/weekbackup/20210924
sending incremental file list
created directory /backup/weekbackup/20210924
data/
data/dashujv/
data/lost+found/
data/xiaocheng/
data/yunyunwei/
sent 178 bytes received 86 bytes 528.00 bytes/sec
total size is 0 speedup is 0.00
+ '[' -d /backup/weekbackup/20210924 ']'
+ echo '20210924 Backup success.'
+ find /backup/weekbackup -mtime +14
+ xargs rm -rf
4.定时任务
[root@nfs ~]# crontab -e
* 21 */7 * * sh /usr/local/sbin/backup.sh # 每7天晚上21点执行一次脚本