linux文件服务器之ftp配置教程 第一部分
一、ftp相关知识
1,什么是ftp?
ftp 是file transferprotocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于internet上的控制文件的双向传输。同时,它也是一个应用程序(application)。基于不同的操作系统有不同的ftp应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在ftp的使用当中,用户经常遇到两个概念:"下载"(download)和"上传"(upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
2,实现该协议的软件
vsftp
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。[1]
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
在开源操作系统中常用的FTPD套件主要还有proftpd、PureFTPd和wuftpd等
tftp
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
3,ftp通讯原理
主动传输模式:客户端向服务端发送请求,服务器端同客户建立连接,在20端口传输数据(需要客户端可以在互联网上可以看到IP地址)
被动传输模式:服务器随机开一个端口向客户读发送数据;使用较多,端口随机,不好使用防火墙控制
传输数据
字符传输方式和二进制传输方式。
文本:二者皆可,假如是非文本,只能使用二进制传输方式,使用文本传输方式文件会损害。
服务器:默认是二进制模式
二、ftp——匿名用户
2.1 ftp——匿名用户下载
--第一步,安装vsftpd
[root@serv01 ~]# yum install vsftpd -y
--第二步,测试配置文件的参数——listen
[root@serv01 ~]# rpm -ql vsftpd
[root@serv01 ~]# cd /etc/vsftpd/
[root@serv01 vsftpd]# ll
[root@serv01 vsftpd]# mv vsftpd.confvsftpd.conf.bak
[root@serv01 vsftpd]# cp vsftpd.conf.bakvsftpd.conf
[root@serv01 vsftpd]# ll
#文件为空,启动失败
[root@serv01 vsftpd]# echo "" >vsftpd.conf
[root@serv01 vsftpd]# /etc/init.d/vsftpdstart
Starting vsftpd for vsftpd: 500 OOPS: vsftpd:not configured for standalone, must be started from inetd
[FAILED]
[root@serv01 vsftpd]# vim vsftpd.conf
[root@serv01 vsftpd]# cat vsftpd.conf
listen=yes
[root@serv01 vsftpd]# /etc/init.d/vsftpdstart
Starting vsftpd for vsftpd: [ OK ]
--第三步,Serv02安装ftp客户端
#ftp客户端
[root@serv02 ~]# yum install ftp -y
#匿名用户
[root@serv02 vsftpd]# ftp 192.168.1.11
Connected to 192.168.1.11 (192.168.1.11).
220 (vsFTPd 2.2.2)
Name (192.168.1.11:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> ?
Commands may be abbreviated. Commands are:
! debug mdir sendportsite
$ dir mget put size
account disconnect mkdir pwdstatus
append exit mls quit struct
asciiform mode quote system
bell get modtime recvsunique
binary globmput reget tenex
bye hashnewer rstatus tick
casehelpnmap rhelp trace
cd idle nlistrename type
cdup image ntrans reset user
chmod lcd open restart umask
close ls prompt rmdir verbose
cr macdef passive runique ?
delete mdelete proxy send
ftp> ls
227 Entering Passive Mode(192,168,1,11,93,120).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Aug 13 10:29 pub
226 Directory send OK.
[root@serv02 ~]# cd /var/ftp/pub/
[root@serv02 pub]# cp/boot/initramfs-2.6.32-131.0.15.el6.x86_64.img .
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode(192,168,1,11,149,33).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 12587318 Aug 13 10:29initramfs-2.6.32-131.0.15.el6.x86_64.img
226 Directory send OK.
ftp> getinitramfs-2.6.32-131.0.15.el6.x86_64.img
local:initramfs-2.6.32-131.0.15.el6.x86_64.img remote: initramfs-2.6.32-131.0.15.el6.x86_64.img
227 Entering Passive Mode(192,168,1,11,105,144).
150 Opening BINARY mode data connection forinitramfs-2.6.32-131.0.15.el6.x86_64.img (12587318 bytes).
226 Transfer complete.
12587318 bytes received in 0.0368 secs(341693.86 Kbytes/sec)
ftp> exit
221 Goodbye.
[root@serv02 vsftpd]# lsinitramfs-2.6.32-131.0.15.el6.x86_64.img
initramfs-2.6.32-131.0.15.el6.x86_64.img
2.2 ftp——匿名用户上传
[root@serv01 vsftpd]# man vsftpd.conf
#!ls:显示本机的文件和目录
#ls:显示服务器的文件和目录
--第一步,编辑配置文件,加上anon_upload_enable参数
[root@serv01 vsftpd]# vim vsftpd.conf
[root@serv01 vsftpd]# cat vsftpd.conf
listen=yes
anon_upload_enable=yes
--第二步,重启服务
[root@serv01 vsftpd]# /etc/init.d/vsftpdrestart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd:[ OK ]
--第三步,Serv02做测试
[root@serv02 ~]# ftp 192.168.1.11
Connected to 192.168.1.11 (192.168.1.11).
220 (vsFTPd 2.2.2)
Name (192.168.1.11:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> !ls
aa01.txt anaconda-ks.cfg initramfs-2.6.32-131.0.15.el6.x86_64.img install.log install.log.syslog
#上传文件,发生失败,权限拒绝
ftp> put aa01.txt
local: aa01.txt remote: aa01.txt
227 Entering Passive Mode(192,168,1,11,152,86).
550 Permission denied.
--第四步,修改ftp文件夹的权限,发现重新登录失败,把权限还原后登录正常(这样是安全考虑)
[root@serv01 var]# pwd
/var
[root@serv01 var]# chmod 777 ftp
[root@serv02 ~]# ftp 192.168.1.11
Connected to 192.168.1.11 (192.168.1.11).
220 (vsFTPd 2.2.2)
Name (192.168.1.11:root): ftp
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writableanonymous root
Login failed.
[root@serv01 var]# chmod 755 ftp/
[root@serv01 vsftpd]# /etc/init.d/vsftpdrestart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd:[ OK ]
[root@serv02 ~]# ftp 192.168.1.11
Connected to 192.168.1.11 (192.168.1.11).
220 (vsFTPd 2.2.2)
Name (192.168.1.11:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
--第五步,我们这样解决,新建一个文件夹,然后修改文件夹的权限,上传文件时上传到新建的目录里
[root@serv01 ftp]# pwd
/var/ftp
[root@serv01 ftp]# mkdir upload
[root@serv01 ftp]# chmod 777 upload
[root@serv01 ftp]# ls -ld upload/
drwxrwxrwx. 2 root root 4096 Aug 13 18:48upload/
--第六步,重新修改配置文件,加上write_enable参数,重启服务,然后重新测试,上传成功
[root@serv01 vsftpd]# vim vsftpd.conf
[root@serv01 vsftpd]# cat vsftpd.conf
listen=yes
write_enable=yes
anon_upload_enable=yes
[root@serv01 vsftpd]# /etc/init.d/vsftpdrestart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd:[ OK ]
[root@serv02 ~]# ftp 192.168.1.11
Connected to 192.168.1.11 (192.168.1.11).
220 (vsFTPd 2.2.2)
Name (192.168.1.11:root): ftp
331 Please specify the password.
Password: (www.jb200.com)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> !ls
aa01.txt anaconda-ks.cfg initramfs-2.6.32-131.0.15.el6.x86_64.img install.log install.log.syslog
ftp> ls
227 Entering Passive Mode(192,168,1,11,161,243).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Aug 13 10:29 pub
drwxrwxrwx 2 0 0 4096 Aug 13 10:48 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
#上传成功
ftp> put aa01.txt
local: aa01.txt remote: aa01.txt
227 Entering Passive Mode(192,168,1,11,214,139).
150 Ok to send data.
226 Transfer complete.
6 bytes sent in 0.000119 secs (50.42Kbytes/sec)