公司运营部同事需要一个文件服务器用来存储保单影像资料。由于公司没有现成的环境,于是决定自己搞一下。大致思路:

1.先创建一个ftp用户,用来上传文件。

2.由于ftp用户没有ssh和telnet权限,需要创建另外一个用户用来做备份操作。

3.使用crontab定时任务实现每天晚上自动将文件打包后传输到另一台服务器上备份。

一、创建FTP用户

在linux中添加ftp用户,并设置该用户不能登录且只能访问自己的目录,操作步骤如下:
1、环境:ftp为vsftp。被限制用户名为yunying。被限制路径为/home/yunying

2、建用户

在root用户下添加ftp用户,操作步骤如下:

useradd -d /home/yunying yunying -s /sbin/nologin
 /sbin/nologin 限定用户不能telnet,只能ftp

更改用户相应的权限设置:
usermod -s /sbin/nologin  //限定用户test不能telnet,只能ftp
usermod -s /sbin/bash test //用户test恢复正常
usermod -d /test test //更改用户test的主目录为/test
3、限制用户只能访问/home/yunying,不能访问其他路径
修改/etc/vsftpd/vsftpd.conf如下: 
chroot_local_user=YES #
chroot_list_enable=YES #
chroot_list_file=/etc/vsftpd/chroot_list #设定受限制
allow_writeable_chroot=YES #允许在用户自身目录下执行write操作,限定只能访问自身目录后默认不能write操作
参数说明可参考: https://blog.csdn.net/Andy86869/article/details/78691035

4.重启ftp服务
[root@linuxsir001 root]# /etc/init.d/vsftpd restart
5、如果需要允许用户修改密码,但是又没有telnet登录系统的权限:
usermod -s /usr/bin/passwd test //用户telnet后将直接进入改密界面passwd test //为test设置密码

二、备份

1.编写备份脚本
#作者:lzy
#该脚本用来将190服务器上的运营影像资料压缩并传输到189服务器上存储
#2018-05-29
BACK_DIR="/home/backdata"
DATE=`date +%Y%m%d` 
LOG=$BACK_DIR"/"$DATE".log"
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
echo $DATE_TIME"   start" >> $LOG
echo $DATE_TIME"   开始压缩文件" >> $LOG
tar -czvf $BACK_DIR"/"$DATE".tar.gz" /home/yunying/
echo $DATE_TIME"   开始删除上次备份的文件" >> $LOG
find $BACK_DIR -mtime +1 -name '*.*' -exec rm -rf {} \;
echo $DATE_TIME"   删除上次备份的文件结束" >> $LOG
echo $DATE_TIME"    开始上传到189服务器" >> $LOG
scp -p $BACK_DIR"/"$DATE".tar.gz" backdata@192.168.104.189:~/
echo $DATE_TIME"   上传到189服务器结束" >> $LOG
ssh -t backdata@192.168.104.189 "find /home/backdata -mtime +1 -name '*.*' -exec rm -rf {} \;"
echo $DATE_TIME"   删除189服务器上昨天的文件" >> $LOG
echo $DATE_TIME"   end" >> $LOG
2.ssh免密码

远程主机不是root用户(比如普通用户test)登陆方法
A为本地主机(即用于控制其他主机的机器) ;
B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;
A和B的系统都是Linux
在A上运行命令:
# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh test@192.168.60.110 "mkdir .ssh" (需要输入密码)
# scp ~/.ssh/id_rsa.pub test@192.168.60.110:.ssh/id_rsa.pub (需要输入密码)
在B上的命令:
# touch /home/test/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
# cat /home/test/.ssh/id_rsa.pub >> /home/test/.ssh/authorized_keys (将id_rsa.pub的内容追加到authorized_keys 中)

修改test/.ssh和authorized_keys的权限

#chmod 700 test
#chmod 700 .ssh
#chmod 600 authorized_keys
回到A机器:
# ssh test@192.168.60.110 (不需要密码, 登录成功)

三.crontab设置定时任务

1.crontab命令介绍
以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数  
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

2.增加定时任务
登录需要执行crontab的用户,使用crontab -e 进入设置编辑,输入如下命令实现每天凌晨1点执行脚本。
00 01 * * * sh /home/backdata/shell/backftp.sh

crontab时间格式及相关知识见:https://www.cnblogs.com/longjshz/p/5779215.html

Logo

更多推荐