共享资源库系统
-----------------------------案例需求-----------------------------
①以工坊单位为基础,每个工坊设立一个单独共享资源目录,创建FTP虚拟用户名为zhang1-6;
②权限限制只有下载没有上传的权限,限制最大带宽60KB;
③zhang1-6用户的家目录名称对应6个不同的工坊名词缩写;
④新建的一块20G存储磁盘必须挂载在nfs的共享目录上,每7天晚上21点要求增量备份一次nfs的共享数据,到/backup/weekbackup目录下,存放在以日期命名的目录;
⑤每14天清除上上一周的备份数据。
基础准备:
部署服务的节点规划
IP 主机名 节点
192.168.200.11 FTP FTP服务器、NFS客户端
192.168.200.12 NFS NFS服务器
[root@ftp ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.11
PREFIX=24
GATEWAY=192.168.200.2
DNS1=8.8.8.8
[root@nfs ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.12
PREFIX=24
GATEWAY=192.168.200.2
DNS1=8.8.8.8
两台虚拟机关闭防火墙:
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
两台虚拟机安装并启动NFS服务:
# yum install -y nfs-utils rpcbind
# systemctl start nfs
# systemctl enable nfs
# systemctl start rpcbind
# systemctl enable rpcbind
安装完后查看nfsnobody用户在不在:
[root@nfs ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
安装并启动vsftp服务:
[root@ftp ~]# yum install -y vsftpd
[root@ftp ~]# systemctl start vsftpd
[root@ftp ~]# systemctl enable vsftpd
需求①
设立一个单独共享资源目录:
[root@nfs ~]# mkdir /data //创建共享目录
[root@nfs ~]# chown -R nfsnobody:nfsnobody /data //更改共享目录权限
[root@nfs ~]# chmod -R 755 /data
创建FTP虚拟用户名为zhang1-6:
[root@ftp ~]# vi /etc/vsftpd/users.conf //创建FTP虚拟用户账号数据
zhang1 //奇数行为用户名
000000 //偶数行为上一行用户对应的密码
zhang2
000000
zhang3
000000
zhang4
000000
zhang5
000000
zhang6
000000
[root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db //转化为 Berkeley DB 格式的数据文件
[root@ftp ~]# chmod 600 /etc/vsftpd/users.* //文件权限设置为600,以免数据外泄。
[root@ftp ~]# ls -lh /etc/vsftpd/users.*
-rw------- 1 root root 84 Nov 11 20:46 /etc/vsftpd/users.conf
-rw------- 1 root root 12K Nov 11 20:46 /etc/vsftpd/users.db
要求②
在/etc/vsftpd/vsftpd_user_conf 目录中为每个虚拟用户分别建立配置文件
[root@ftp ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf
[root@ftp ~]# cd /etc/vsftpd/vsftpd_user_conf
[root@ftp vsftpd_user_conf]# vi zhang1
local_root=/home/vsftpd/yunwei1 # 当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
anon_upload_enable=NO #是否允许登陆用户有上传权限。
local_max_rate=60000 #限制最大下载带宽
[root@ftp vsftpd_user_conf]# vi zhang2
local_root=/home/vsftpd/yunwei2
anon_upload_enable=NO
local_max_rate=60000
[root@ftp vsftpd_user_conf]# vi zhang3
local_root=/home/vsftpd/yunwei3
anon_upload_enable=NO
local_max_rate=60000
[root@ftp vsftpd_user_conf]# vi zhang4
local_root=/home/vsftpd/yunwei4
anon_upload_enable=NO
local_max_rate=60000
[root@ftp vsftpd_user_conf]# vi zhang5
local_root=/home/vsftpd/yunwei5
anon_upload_enable=NO
local_max_rate=60000
[root@ftp vsftpd_user_conf]# vi zhang6
local_root=/home/vsftpd/yunwei6
anon_upload_enable=NO
local_max_rate=60000
需求③
[root@ftp ~]# useradd vsftpd -d /home/vsftpd -s /sbin/nologin //创建vsftpd系统用户,指定家目录。
[root@ftp ~]# mkdir -p /home/vsftpd/yunwei1 //zhang1-6用户的家目录
[root@ftp ~]# mkdir -p /home/vsftpd/yunwei2
[root@ftp ~]# mkdir -p /home/vsftpd/yunwei3
[root@ftp ~]# mkdir -p /home/vsftpd/yunwei4
[root@ftp ~]# mkdir -p /home/vsftpd/yunwei5
[root@ftp ~]# mkdir -p /home/vsftpd/yunwei6
[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
在 vsftpd.conf 文件中添加虚拟用户支持配置:
[root@ftp ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名用户登录
增加下面配置参数:
chroot_local_user=YES #禁止用户访问除主目录以外的目录
guest_enable=YES #启用虚拟用户
allow_writeable_chroot=YES # 允许写入用户主目录
user_config_dir=/etc/vsftpd/vsftpd_user_conf #虚拟用户使用的配置文件目录
重启服务:
[root@ftp ~]# systemctl restart vsftpd
[root@ftp ~]# systemctl enable vsftpd
需求④
NFS虚拟机创建一块新的20G存储磁盘:
[root@nfs ~]# mkdir -p /backup/weekbackup //创建备份共享目录
[root@nfs ~]# mkfs.xfs /dev/sdb1 //格式化磁盘
[root@nfs ~]# mkfs.xfs /dev/sdb2
[root@nfs ~]# mount /dev/sdb1 /data/ //挂载
[root@nfs ~]# mount /dev/sdb2 /backup/weekbackup/
[root@nfs ~]# lsblk //查看挂载情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─centos-root 253:0 0 37G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 10G 0 part /data
└─sdb2 8:18 0 10G 0 part /backup/weekbackup
sr0 11:0 1 4.2G 0 rom
[root@nfs ~]# df -hT
/dev/sdb1 xfs 10G 33M 10G 1% /data
/dev/sdb2 xfs 10G 33M 10G 1% /backup/weekbackup
[root@nfs ~]# vi /etc/fstab
/dev/sdb1 /data ext4 defaults 0 0
/dev/sdb2 /backup/weekbackup ext4 defaults 0 0
ftp虚拟机磁盘挂载:
[root@ftp ~]# mount -t nfs 192.168.200.12:/data /home/vsftpd/ //挂载到服务端上
[root@ftp ~]# vi /etc/fstab
192.168.200.12:/data /home/vsftpd nfs4 defaults 0 0
[root@ftp ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
192.168.200.12:/data nfs4 20G 44M 19G 1% /home/vsftpd
编辑nfs配置文件:
[root@nfs ~]# vi /etc/exports
/data 192.168.200.0/24(rw,no_root_squash)
生效配置:
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# showmount -e 192.168.200.12 //查看共享目录列表
Export list for 192.168.200.12:
/data 192.168.200.0/24
定时计划与备份脚本:
检验是否安装crontab:
[root@nfs ~]# rpm -qa | grep crontabs
crontabs-1.11-6.20121102git.el7.noarch
如果未安装crontab,运用本地yum安装部署:
# yum install crontabs
启动服务并检查服务状态:
[root@nfs ~]# systemctl start crond
[root@nfs ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-11-12 03:11:24 EST; 17min ago
Main PID: 690 (crond)
Tasks: 1
Memory: 700.0K
CGroup: /system.slice/crond.service
└─690 /usr/sbin/crond -n
Nov 12 03:11:24 nfs crond[690]: (CRON) INFO (RANDOM_DELAY will be scaled wi....)
Nov 12 03:11:24 nfs crond[690]: (CRON) INFO (running with inotify support)
Nov 12 03:11:24 nfs systemd[1]: Started Command Scheduler.
Nov 12 03:11:24 nfs systemd[1]: Starting Command Scheduler...
Hint: Some lines were ellipsized, use -l to show in full.
备份脚本:
[root@nfs ~]# cat /usr/local/sbin/backup.sh
a=`date '+%Y%m%d'`
b=/backup/weekbackup
c=/var/log/backup.log
pname=$(rpm -qa | grep 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
[root@nfs ~]# chmod 755 /usr/local/sbin/backup.sh
脚本添加可执行权限:
[root@nfs ~]# chmod 755 /usr/local/sbin/backup.sh
需求⑤
添加定时任务:(每7天21点执行一次脚本)
[root@nfs ~]# crontab -e
* 21 */7 * * sh /usr/local/sbin/backup.sh
[root@nfs ~]# crontab -l
* 21 */7 * * /bin/bash /usr/local/sbin/backup.sh