介绍Linux环境下FTP服务器的构建和Python实现FTP客户端交互。
FTP是基于传输层协议TCP的文件传输协议(File Transfer Protocol)的英文缩写,用于在internet上双向传输(上载和下载)文件。与大多数internet服务一样,FTP是需要FTP服务器和FTP客户端合作才能完成文件传输的客户端/服务器系统。
FTP协议使用两个TCP连接。一个是在FTP客户端和服务器之间传递命令的命令链接。另一个是可以上传或下载数据的数据链接。FTP服务器/客户端体系结构如下:
FTP协议有两种工作方式:端口主动和PASV被动。无论这两种工作方式如何,客户端都必须主动与远程主机的FTP服务器建立命令链接。
端口连接过程:客户端将连接请求从未经授权的端口M (M1023,0至1023用于绑定特定服务)发送到FTP服务器上的命令端口(默认值为21),服务器接受连接,并建立命令链接。需要传输数据时,客户端在命令链中向FTP服务器发送FTP命令“port M 1”。然后,客户端开始侦听端口M 1,服务器从自己的数据端口(默认值为20)连接到客户端指定的数据端口(M 1),以建立发送数据的数据链路。
在PASV方法中,命令连接和数据连接均由客户端启动,打开FTP连接后,客户端将打开两个未经授权的本地端口(M 1023和M 1)。第一个端口连接到服务器上的21个端口,并以与PORT相同的方式建立命令链路,而第二个端口以与PORT不同的方式建立数据链路。需要传输数据时,客户端向服务器提交PASV命令,以打开服务器未授权的端口(N 1023),并将PASV N命令发送给客户端。因此,客户端开始从本地端口M 1到服务器端口N的连接,为数据传输建立数据链路。
使用FTP传输文件时,必须先登录,因此必须在远程主机上授予相应的权限,才能上载和下载文件。没有用户ID和密码,文件无法传输。互联网上的FTP主机有数千个,不可能要求所有用户都在所有主机上拥有帐户。这违背了网络的开放性。所以通过制作匿名FTP解决了这个问题。
匿名FTP机制允许用户连接到远程主机进行文件上传和下载,而无需注册帐户。系统管理员创建了一个名为Anonymous的特殊用户ID,internet上的所有人都可以在任何地方使用。
Linux平台构建FTP服务器。
一般来说,各种Linux发行版中内置的FTP软件是vsftp。VsFTPd(Very Secure FTP Daemon)是在UNIX操作系统上运行的FTP服务器程序。在Linux平台Ubuntu发行版中,使用vsftp构建了可与Python实施客户端一起测试的ftp服务器。
(1)使用#rpm -qa |grep vsftpd命令检查是否安装了vsftpd软件;如果未安装,请使用#sudo apt-get install vsftpd命令安装vsftpd软件
(2)使用#netstat -tnl命令确认端口服务已打开,FTP服务器默认打开21个端口。
(3)使用# servicevsFTPdstart | stop | restart命令启动、停止和重新启动FTP。
(4)FTP配置文件位于/etc/vsftpd/目录中,包含禁止用户登录列表ftpusers和user_list以及主配置文件v。必须使用#sudo gedit /etc/v命令修改配置文件v,删除配置条目前面的#符号以打开配置,修改配置文件,然后重新启动服务。
与匿名登录相关的配置如下:
ANOnymous_enable=YES #控制是否允许匿名用户登录。YES允许匿名登录,no不允许。默认值为YES。
Write_enable=YES #是否允许登录用户具有写权限。属于全局设置,默认值为YES。
No_anon_password=YES #如果启用此功能,则在使用匿名登录时不会提示输入密码。默认值为“否”。
Ftp_username=ftp#定义匿名登录用户名。默认值为FTP。
Anon_root=/var/ftp
#匿名登录时登录的目录。默认值为/var/ftp。Ftp目录不能是777权限属性。
Anon_upload_enable=YES
如果设置为# YES,匿名注册者可以上载文件(不是目录)。仅当write_enable=YES时有效。匿名用户必须对父目录具有写权限。默认值为“否”。
Anon_world_readable_only=YES
如果设置为# YES,则可以下载匿名注册者可以读取的文件(可以在本地下载,但不能直接在FTP服务器上打开)。默认值为YES。
Anon_mkdir_write_enable=YES
如果设置为# YES,匿名注册者将有权添加目录。仅当write_enable=YES时有效。匿名用户必须对父目录具有写权限。默认值为“否”。
Anon_other_write_enable=YES
如果设置为# YES,匿名注册者可以授予除上传或创建目录之外的更多权限(例如,删除或重命名)。(anon_upload_enable=NO时,匿名用户不能
上载文件,但可以删除或重命名现有文件。如果Anon_mkdir_write_enable=NO,匿名用户不能上载或创建新文件夹,但可以删除或重命名现有文件夹。)缺省值为NO。
Chown_uploads=YES #设置是否更改匿名用户上载文件(不是目录)的所有者。默认值为“否”。
Chown_username=username #设置匿名用户上载文件(不是目录)的所有者名称。建议不要设置为Root。
Anon_umask=022
#匿名注册者在添加或上载文件时设置掩码值。默认值为077。如果Umask为022,则创建权限666文件,实际权限为666-022=644。
Deny_email_enable=YES
#如果启用了此功能,则必须提供/etc/vsftpd/banner_emails文件(电子邮件地址)。如果以匿名方式登录,则必须输入电子邮件地址;如果输入电子邮件地址,则必须输入电子邮件地址
不能从这个文件进入。默认值为“否”。
banned _ email _ file=/etc/vsf tpd/banner _ emails #此文件用于输入电子邮件
只有在Address-deny_email_enable=YES时才使用此文件。如果使用匿名登录,系统会提示您输入电子邮件
Address,如果输入的电子邮件地址在此文件中,则无法进入。
其他主要配置包括:
Listen=NO #接收服务器,服务是否独立运行
Local_enable=YES #是否允许本地用户访问
Local_umask=022 # FTP的本地文件权限。默认值为077
#dirmessage_enable=YES #允许进入文件夹
Xferlog_enable=YES #允许FTP记录
Onnect _ from _ port _ 20=启用端口YES # 20作为数据传输端口
Xferlog_enable=yes #启用上传和下载的日志
#xferlog_std_format=yes #使用标准日志格式
#ftpd_banner=XXXXX #欢迎信息
Local_root=/var/www #使用本地登录时登录的目录。
Pasv_enable=YES #
如果设置为“是”,则使用PASV操作模式。如果设置为NO,则使用PORT模式。默认值为YES,使用PASV操作模式。
PASV_min_port=30000 #在PASV操作模式下,数据连接可用的端口范围的最大端口0表示所有端口。默认值为0。
PASV_max_port=30999 # pasv操作模式下数据连接可用的端口范围的最小端口,0表示所有端口。默认值为0。
(5)使用#sudo userdel uftp命令删除用户,使用# sudoapt-getremove - purgevsftpd命令完全删除软件和相关文件
(6)设置匿名登录目录的权限。默认情况下,匿名登录的根目录是/var/ftp(实际上由/home/ftp组成)。出于安全考虑,默认情况下,此目录不能设置为777权限。否则,FTP无法匿名访问。如果想匿名上传文件,必须设置其他用户的写入权限。
Sudo chmod o w /home/ftp
更改Ftp目录所有者权限默认根权限中的匿名FTP权限,而-root参数启动迭代处理,并修改一个目录中所有文件的权限,包括修改子目录中的文件权限。修改后,FTP帐户可以访问FTP文件夹。
Sudo chown FTP /home/ftp -R
Sudo ls -l /home/
总使用量12
Drwxr-xr-x2 FTP根4096 2月15日19:09 FTP
Drwxr-xr-x2 uftp根4096 2月15日16:23 uftp
Drwxr-xr-x40元小元小4096 2月15日19:22元小
在嵌入式Linux平台Linux发行版中,还可以使用vsftp创建ftp服务器。
(1)将开发板连接到外部网络,并通过opkg命令安装vsftp。
root @ yuanxiao :/etc opkgupdate
root @ yuanxiao :/etc opkg install vsf tpd
(2)配置/etc/v文件。配置选项的含义和方法与上述Ubuntu发行版中的vsftpd相同。需要通过匿名登录设置/etc/v文件映射选项。
(3)更改/etc/v文件的权限。
启动Vsftpd进程时,出现错误消息,指出配置文件不属于正确的用户。
Root@Yuanxiao:~# /etc start
500 oops : config file not owned by correct user,or not a file
解决方法是设置对/etc/v文件的访问用户(当前root用户)
Root @ yuanxiao:到# chownroot/etc/v
Root@Yuanxiao:到# ls -l /etc/v
-rwxrwxrwx1根根840 feb15 13:48/etc/v
(4)启动和停止vsftpd。
/etc start
/etc stop
基于python的客户端FTP程序示例
#-*-代码: utf-8-*-
# python 27
ftplib导入FTP
FTP=FTP() #创建FTP对象
Timeout=30
Port=21
(' 192.168.1.188 ',port,timeout) #连接到FTP服务器
(' username ',' 88888') #使用帐户登录
Print () #收到欢迎信息
(' file/test') #设置FTP远程目录下的当前路径
从List=() #目录获取文件列表
For name in list:
Print name
#从FTP服务器下载文件
Bufsize=1024#设置的缓冲区大小
filename='/usr/share/a;#需要下载的文件和本地存储位置
File _ handle=open(文件名,' WB ')。以write #写模式在本地打开文件
(' retruboot.bin ',file _ handle,bufsize) #从服务器下载文件并将其写入本地文件
#删除远程文件
(' art.bin') #删除FTP服务器文件
#将文件上载到FTP服务器
Bufsize=1024#设置的缓冲区大小
filename='/usr/share/a;#需要上传的文件和本地存储位置
File _ handle=open (filename,' Rb') #以读模式在本地打开文件
(' stormain.py ',file _ handle,bufsize) #将本地文件上载到FTP服务器
()#关闭FTP服务器
大家学习的时候有什么不清楚的地方,请留言!
1.《Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1954899.html