首页 » 云计算 » 服务器 FTP 服务搭建与自动上传到IDC 机房

服务器 FTP 服务搭建与自动上传到IDC 机房

 

孩 老男孩 linux 培训项目实践- 真实服务器 FTP 服务搭建与自动上传到IDC 机房
: 版权声明: 老男孩培训内部资料,限VIP 学生学习参考
#####################################################
本文内容来自《老男孩 linux 运维实战培训》学生—吴迎松
QQ:605345413
E-mail:605345413@qq.com
#####################################################
老男孩 linux 运维实战培训中心
培训咨询: QQ:80042789 70271111
培训电话: 18600338340 18911718229
老男孩老师 QQ:49000448 31333741
网站地址:http://www.etiantian.org
老男孩博客:http://oldboy.blog.51cto.com
老男孩交流群:246054962 208160987 226199307 44246017
网站运维交流群:114580181 45039636 37081784
#####################################################
老男孩老师点评:
本文是老男孩培训机构内部第一阶段面授课程真实企业项目实践方案内容, 由老
师根据老男孩机构的实际需要提出需求,由学生讨论(老师指导)完成的项目。
本文档以企业专业解决方案的角度,从需求分析开始,完整的阐述了整个项目方
案的实施过程。仅仅用了不到2 天时间,该生是值得全体同学学习的榜样。
一、需求分析
平时老男孩培训的面授课程录制视频在课后都通过 U 盘以及手工上传到外网 ftp服务器
的方式实现给网络班学生共享,由于视频容量大且网络带宽有限,导致效率非常低下,要求
在本方案实施后,通过 FTP来实现培训机构内部视频共享,分内网 FTP 服务器(教室内)和外
网 FTP 服务器(IDC 机房),讲师只需将视频整理完毕后一次性上传到内网服务器即可,再由
内网服务器定时将视频同步到 IDC 的外网 FTP 服务器上供大家下载使用。 由于第一次发布是
局域网传输,会大大提升效率,然后在半夜定时由服务器通过 FTP 自动上传到 IDC 机房。
二、架构逻辑简图

1
三、详细规划

23

四、项目实施
该环境中,我们共需要准备 3 台 linux 虚拟机,分别为本地 FTP 服务、远程 IDC 机房 FTP
服务器、iptables 网关,下面我们进行环境搭建。
1、iptables 网关搭建
(略)见老男孩 linux 培训的高级安全专题课程。
2、本地 FTP SERVER 搭建
操作系统安装 及优化 (略) 见老男孩 linux 培训的高级优化专题课程。
配置主机名
[root@wuyingsong ~]# hostname oldboy-local-ftp
[root@wuyingsong ~]# sed -i ‘s/HOSTNAME.*/HOSTNAME=oldboy-local-ftp/g’ /etc/sysconfig/network
[root@wuyingsong ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=oldboy-local-ftp
#配置完成退出重新登录
配置 IP 地址
[root@oldboy-local-ftp ~]# cat>/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=192.168.1.21
NETMASK=255.255.255.0
HWADDR=00:0c:29:7b:ed:d4
GATEWAY=192.168.1.1
EOF
[root@oldboy-local-ftp ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=192.168.1.21
NETMASK=255.255.255.0
HWADDR=00:0c:29:7b:ed:d4
GATEWAY=192.168.1.1
[root@oldboy-local-ftp ~]#/etc/init.d/network restart
上传软件包并安装
[root@oldboy-local-ftp ~]# mkdir /server/ soft –p
#通过 rz 命令上传,如果找不到命令的请安装 lrzsz 工具包
[root@oldboy-local-ftp soft]# ll
total 4216
-rw-r–r– 1 root root 920675 Sep 6 07:16 db4-4.3.29-10.el5_5.2.x86_64.rpm
-rw-r–r– 1 root root 2116573 Sep 6 07:14 db4-devel-4.3.29-10.el5_5.2.x86_64.rpm
-rw-r–r– 1 root root 125577 Sep 6 07:19 db4-utils-4.3.29-10.el5_5.2.x86_64.rpm
-rw-r–r– 1 root root 980336 Sep 6 07:11 lftp-3.7.11-7.el5.x86_64.rpm
-rw-r–r– 1 root root 144752 Sep 6 07:14 vsftpd-2.0.5-24.el5.x86_64.rpm
[root@oldboy-local-ftp soft]# rpm -qa | grep -E “vsftpd|db4|lftp” #查看软件包安装情况,没
装的需要手动执行 rpm 安装
lftp-3.7.11-7.el5
db4-devel-4.3.29-10.el5_5.2
db4-4.3.29-10.el5_5.2
[root@oldboy-local-ftp soft]# rpm -ivh vsftpd-2.0.5-24.el5.x86_64.rpm
Preparing… ########################################### [100%]
1:vsftpd ########################################### [100%]
[root@oldboy-local-ftp soft]# rpm -ivh db4-utils-4.3.29-10.el5_5.2.x86_64.rpm
Preparing… ########################################### [100%]
1:db4-utils ########################################### [100%]
建立虚拟用户对应的系统用户
[root@oldboy-local-ftp soft]# mkdir /data
[root@oldboy-local-ftp soft]# useradd -d /data/ftproot virtual
[root@oldboy-local-ftp soft]# ls -l /data
total 4
drwx—— 3 virtual virtual 4096 Sep 7 22:23 ftproot
建立虚拟用户数据库
[root@oldboy-local-ftp soft]# cat >/data/ftp_user.txt<<EOF #第一次覆盖,以后可以使
用>>附加,一行用户名,一行密码
wuyingsong
123456
oldboy
123456
EOF
[root@oldboy-local-ftp ~]# db_load -T -t hash -f /data/ftp_user.txt /etc/vsftpd/vsftpd_login.db
#生成数据库文件
[root@oldboy-local-ftp ~]# chmod 600 /etc/vsftpd/vsftpd_login.db
[root@oldboy-local-ftp ~]# ll /etc/vsftpd/vsftpd_login.db
-rw——- 1 root root 12288 Sep 7 22:28 /etc/vsftpd/vsftpd_login.db
创建 PAM 验证文件
[root@oldboy-local-ftp ~]# cat >/etc/pam.d/ftp<<EOF
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #这里的文件名
不需要加.db,如果是 32 位系统需要注意路径,可能是 lib 而非 lib64
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
EOF
[root@oldboy-local-ftp ~]# cat /etc/pam.d/ftp
auth required /lib64/security/pam_userdb.so db=/vsftpd_login
account required /lib64/security/pam_userdb.so db=/vsftpd_login
配置 FTP服务器
[root@oldboy-local-ftp ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-20130907 #备份
默认的配置文件
[root@oldboy-local-ftp ~]# cat >/etc/vsftpd/vsftpd.conf<<EOF
anonymous_enable=NO
local_enable=YES
guest_enable=YES
write_enable=YES
guest_username=virtual
listen=YES
pasv_min_port=30000
pasv_max_port=30999
user_config_dir=/etc/vsftpd/user_conf
virtual_use_local_privs=NO
anon_world_readable_only=NO
anon_upload_enable=NO
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
EOF
主配置文件参数说明:
[root@oldboy-local-ftp ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #是否允许匿名用户登录,由于我们这里采用用户
验证,所以设置为 NO
local_enable=YES #设定为 YES 时,在 /etc/passwd 内的账号才能以
实体用户的方式登入我们的 vsftpd 主机
guest_enable=YES #这个值设定为 YES 时,那么任何非 anonymous
登入的账号,均会被假设成为 guest(本例中就是我们下面设置的 virtual)用户身份
write_enable=YES #是否允许使用者具有写入的权限,包括删除与修
改等功能
guest_username=virtual #设置 guest 对应的实体用户
listen=YES #若设定为 YES 表示 vsftpd 是以 standalone 的
方式来启动的
pasv_min_port=30000 #指定使用被动模式连接时的端口范围
pasv_max_port=30999
user_config_dir=/etc/vsftpd/user_conf #定义用户设定文件所在的目录, 优先级高于主配
置文件
virtual_use_local_privs=NO #当设置为 NO 虚拟用户和匿名用户有相同的权
限,否则则有本地用户(virtual)相同的权限,默认为 NO
anon_world_readable_only=NO #当启用时,每个用户只能下载自己上传的文件
anon_upload_enable=NO #不许虚拟用户上传
xferlog_enable=YES #开启日志
xferlog_file=/var/log/vsftpd.log #指定日志位置
anon_mkdir_write_enable=NO #是否允许建立目录,默认为 NO
[root@oldboy-local-ftp ~]# mkdir /etc/vsftpd/user_conf #创建用户配置文件目录
[root@oldboy-local-ftp ~]# ll -d /etc/vsftpd/user_conf/
drwxr-xr-x 2 root root 4096 Sep 7 23:01 /etc/vsftpd/user_conf/
[root@oldboy-local-ftp ~]# cat>/etc/vsftpd/user_conf/wuyingsong<<EOF
virtual_use_local_privs=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
write_enable=YES #主配置文件中已设置,此处可以不再设置
anon_world_readable_only=NO
anon_upload_enable=YES
EOF
[root@oldboy-local-ftp ~]# cat /etc/vsftpd/user_conf/wuyingsong
virtual_use_local_privs=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
启动服务
[root@oldboy-local-ftp ~]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@oldboy-local-ftp ~]# netstat -nltp | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
3469/vsftpd
[root@oldboy-local-ftp ~]# lsof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 3469 root 3u IPv4 8167 0t0 TCP *:ftp (LISTEN)
测试管理员权限
[root@oldboy-local-ftp ftproot]#cd /data/ftproot
[root@oldboy-local-ftp ftproot]# touch {1,2,3,4,5,6}
[root@oldboy-local-ftp ~]# ftp localhost #以管理员用户登录
Connected to wuyingsong.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): wuyingsong
331 Please specify the password.
Password: #输入密码 123456
230 Login successful. #登录成功
Remote system type is UNIX.
Using binary mode to transfer files
ftp> ls
227 Entering Passive Mode (127,0,0,1,119,9)
150 Here comes the directory listing. #可以查看文件
-rw-r–r– 1 0 0 0 Sep 07 15:18 1
-rw-r–r– 1 0 0 0 Sep 07 15:18 2
-rw-r–r– 1 0 0 0 Sep 07 15:18 3
-rw-r–r– 1 0 0 0 Sep 07 15:18 4
-rw-r–r– 1 0 0 0 Sep 07 15:18 5
-rw-r–r– 1 0 0 0 Sep 07 15:18 6
226 Directory send OK.
ftp> get 2 #下载文件测试成功
local: 2 remote: 2
227 Entering Passive Mode (127,0,0,1,117,240)
150 Opening BINARY mode data connection for 2 (0 bytes).
226 File send OK.
ftp> !ls
2
ftp> del 1 #删除文件测试成功
250 Delete operation successful.
ftp> mkdir test #创建目录测试成功
257 “/test” created
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,204)
150 Here comes the directory listing.
-rw-r–r– 1 0 0 0 Sep 07 15:18 2
-rw-r–r– 1 0 0 0 Sep 07 15:18 3
-rw-r–r– 1 0 0 0 Sep 07 15:18 4
-rw-r–r– 1 0 0 0 Sep 07 15:18 5
-rw-r–r– 1 0 0 0 Sep 07 15:18 6
drwx—— 2 500 501 4096 Sep 07 15:21 test
226 Directory send OK.
ftp> lcd /etc #切换本地目录到 etc
Local directory now /etc
ftp> put services #上传文件测试成功
local: services remote: services
227 Entering Passive Mode (127,0,0,1,117,222)
150 Ok to send data.
226 File receive OK.
362031 bytes sent in 0.034 seconds (1e+04 Kbytes/s)
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,228)
150 Here comes the directory listing.
-rw-r–r– 1 0 0 0 Sep 07 15:18 2
-rw-r–r– 1 0 0 0 Sep 07 15:18 3
-rw-r–r– 1 0 0 0 Sep 07 15:18 4
-rw-r–r– 1 0 0 0 Sep 07 15:18 5
-rw-r–r– 1 0 0 0 Sep 07 15:18 6
-rw——- 1 500 501 362031 Sep 07 15:22 services
drwx—— 2 500 501 4096 Sep 07 15:21 test
226 Directory send OK.
ftp> rename services abc #文件重命名测试成功
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,61)
150 Here comes the directory listing.
-rw-r–r– 1 0 0 0 Sep 07 15:18 2
-rw-r–r– 1 0 0 0 Sep 07 15:18 3
-rw-r–r– 1 0 0 0 Sep 07 15:18 4
-rw-r–r– 1 0 0 0 Sep 07 15:18 5
-rw-r–r– 1 0 0 0 Sep 07 15:18 6
-rw——- 1 500 501 362031 Sep 07 15:22 abc
drwx—— 2 500 501 4096 Sep 07 15:21 test
226 Directory send OK.
ftp> bye #退出登录
221 Goodbye.
测试普通用户权限
[root@oldboy-local-ftp ~]# ftp localhost
Connected to wuyingsong.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): oldboy #以普通用户 oldboy 身份登录
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,119,35)
150 Here comes the directory listing.
-rw-r–r– 1 0 0 0 Sep 07 15:18 2
-rw-r–r– 1 0 0 0 Sep 07 15:18 3
-rw-r–r– 1 0 0 0 Sep 07 15:18 4
-rw-r–r– 1 0 0 0 Sep 07 15:18 5
-rw-r–r– 1 0 0 0 Sep 07 15:18 6
-rw——- 1 500 501 362031 Sep 07 15:22 abc
drwx—— 2 500 501 4096 Sep 07 15:21 test001
226 Directory send OK.
ftp> !ls /tmp
ftp> get 4 /tmp/4
local: /tmp/4 remote: 4
227 Entering Passive Mode (127,0,0,1,118,68)
150 Opening BINARY mode data connection for 4 (0 bytes).
226 File send OK.
ftp> !ls /tmp #文件下载测试成功
4
ftp> lcd /etc/
Local directory now /etc
ftp> put hosts #文件上传测试失败
local: hosts remote: hosts
227 Entering Passive Mode (127,0,0,1,119,47)
550 Permission denied.
ftp> del abc #文件删除测试失败
550 Permission denied.
ftp> mkdir oldboy #文件夹创建失败
550 Permission denied.
ftp> rename abc def #文件重命名失败
550 Permission denied.
ftp> rename test001 test #文件夹重命名失败
550 Permission denied.
ftp> bye #退出登录
221 Goodbye.
3、IDC 机房 FTP SERVER 搭建
地 搭建过程与本地 FTP SERVER 雷同,不再赘述( 本次将搭建过程写成一键安装脚本
auto_install_ftp.sh , 在服务器上执行即可)
[root@remote-ftp-server ~]# ll
total 4220
-rw-r–r– 1 root root 2344 Sep 7 15:38 auto_install_ftp.sh
-rw-r–r– 1 root root 920675 Sep 6 07:16 db4-4.3.29-10.el5_5.2.x86_64.rpm
-rw-r–r– 1 root root 2116573 Sep 6 07:14 db4-devel-4.3.29-10.el5_5.2.x86_64.rpm
-rw-r–r– 1 root root 125577 Sep 6 07:19 db4-utils-4.3.29-10.el5_5.2.x86_64.rpm
-rw-r–r– 1 root root 980336 Sep 6 07:11 lftp-3.7.11-7.el5.x86_64.rpm
-rw-r–r– 1 root root 144752 Sep 6 07:14 vsftpd-2.0.5-24.el5.x86_64.rpm
[root@remote-ftp-server ~]# sh auto_install_ftp.sh #执行安装脚本进行配置
Preparing… ########################################### [100%]
1:vsftpd ########################################### [100%]
create directory /server/scripts [ OK ]
create directory /data [ OK ]
create directory /etc/vsftpd/user_conf [ OK ]
create user virtual [ OK ]
create ftp user db [ OK ]
create pam auth file [ OK ]
rename /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.2013 [ OK ]
create file /etc/vsftpd/vsftpd.conf [ OK ]
create user config file /etc/vsftpd/user_conf/wuyingsong [ OK ]
Starting vsftpd for vsftpd: [ OK ] #完成
会自动启动 FTP 服务
[root@remote-ftp-server ~]# netstat -nltp | grep 21 #检查服务启动情况
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
2732/vsftpd
[root@remote-ftp-server ~]# lsof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 2732 root 3u IPv4 7575 0t0 TCP *:ftp (LISTEN)
测试步骤同上,这里就不在浪费文笔
4、自动同步脚本
[root@oldboy-local-ftp ~]# mkdir -p /server/scripts/ #创建一个目录用来存放脚本
[root@oldboy-local-ftp ~]# cat> /server/scripts/auto_upload.sh<<EOF
/usr/bin/lftp <<END
open ftp://wuyingsong:123456@192.168.159.21
lcd /data/ftproot
mirror -R .
END
EOF
[root@oldboy-local-ftp ftproot]# ll #本地 FTP 服务器,有数据
total 364
-rw-r–r– 1 root root 0 Sep 7 23:18 2
-rw-r–r– 1 root root 0 Sep 7 23:18 3
-rw-r–r– 1 root root 0 Sep 7 23:18 4
-rw-r–r– 1 root root 0 Sep 7 23:18 5
-rw-r–r– 1 root root 0 Sep 7 23:18 6
-rw——- 1 virtual virtual 362031 Sep 7 23:22 abc
drwx—— 2 virtual virtual 4096 Sep 7 23:21 test001
[root@remote-ftp-server ftproot]# ls –l #远程 FTP 服务器,无数据
total 0
[root@oldboy-local-ftp ftproot]# sh /server/scripts/auto_upload.sh #执行自动同步脚本
[root@remote-ftp-server ftproot]# ls –l #数据全部同步过来了
total 364
-rw——- 1 virtual virtual 0 Sep 8 00:05 2
-rw——- 1 virtual virtual 0 Sep 8 00:05 3
-rw——- 1 virtual virtual 0 Sep 8 00:05 4
-rw——- 1 virtual virtual 0 Sep 8 00:05 5
-rw——- 1 virtual virtual 0 Sep 8 00:05 6
-rw——- 1 virtual virtual 362031 Sep 8 00:05 abc
drwx—— 2 virtual virtual 4096 Sep 8 00:05 test001
[root@oldboy-local-ftp ftproot]# cat>>/var/spool/cron/root<<EOF #将脚本添加
到定时任务
#Everyday 00:00 auto sync ftp data
00 00 * * * /bin/sh /server/scripts/auto_upload.sh >/dev/null 2>&1
EOF
[root@oldboy-local-ftp ftproot]# crontab -l
#Everyday 00:00 auto sync ftp data
00 00 * * * /bin/sh /server/scripts/auto_upload.sh >/dev/null 2>&1
定时任务调试,我们可以修改执行频率为 1 分钟测试一次
[root@oldboy-local-ftp ftproot]# crontab -l
#Everyday 00:00 auto sync ftp data
*/1 * * * * /bin/sh /server/scripts/auto_upload.sh >/dev/null 2>&1
[root@remote-ftp-server ftproot]# rm -rf * #删除远程服务器数据
[root@remote-ftp-server ftproot]# ls -l
total 0
[root@oldboy-local-ftp ftproot]# tail /var/log/cron #从日志中可以看出定时任务已经执行,
我们去服务器上看数据是否同步成功
Sep 8 00:00:01 wuyingsong crond[3693]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 8 00:01:01 wuyingsong crond[3696]: (root) CMD (run-parts /etc/cron.hourly)
Sep 8 00:06:54 wuyingsong crontab[3709]: (root) LIST (root)
Sep 8 00:08:28 wuyingsong crontab[3710]: (root) BEGIN EDIT (root)
Sep 8 00:08:37 wuyingsong crontab[3710]: (root) REPLACE (root)
Sep 8 00:08:37 wuyingsong crontab[3710]: (root) END EDIT (root)
Sep 8 00:08:42 wuyingsong crontab[3712]: (root) LIST (root)
Sep 8 00:09:01 wuyingsong crond[2040]: (root) RELOAD (cron/root)
Sep 8 00:09:01 wuyingsong crond[3714]: (root) CMD (/bin/sh
/server/scripts/auto_upload.sh >/dev/null 2>&1) #注意这里执行的时间
[root@remote-ftp-server ftphome]# ls –l #可以看出文件的时间和我们定时任务执行的时
间一致,同步完成
total 364
-rw——- 1 virtual virtual 0 Sep 8 00:09 2
-rw——- 1 virtual virtual 0 Sep 8 00:09 3
-rw——- 1 virtual virtual 0 Sep 8 00:09 4
-rw——- 1 virtual virtual 0 Sep 8 00:09 5
-rw——- 1 virtual virtual 0 Sep 8 00:09 6
-rw——- 1 virtual virtual 362031 Sep 8 00:09 abc
drwx—— 2 virtual virtual 4096 Sep 8 00:09 test001
测试完成将定时任务改回每天凌晨执行一次
至此配置完成!
说明:本文因内网部署,需要 1-2 个共同下载账号即可,所以采用的是简单的虚拟 FTP 用
户,在老男孩 linux 培训的机房是所有服务器均通过 LDAP 统一一套账户密码认证机制实
现的,这个后期大家可以学习老男孩老师的高级课程获取相关 LDAP 高级知识。

原文链接:服务器 FTP 服务搭建与自动上传到IDC 机房,转载请注明来源!

0