在Linux环境下设置FTP服务器和用Python实现FTP客户端的交互介绍
FTP文件传输协议(FTP File Transfer Protocol)是英文的简称。它基于传输层协议TCP,用于在互联网上双向传输(上传和下载)文件。和大多数互联网服务一样,FTP也是客户端/服务器系统,需要FTP服务器和FTP客户端的配合才能完成文件传输。
FTP协议使用两个TCP连接,一个是命令链接,用于FTP客户端和服务器之间传递命令;另一个是数据链路,用于上传或下载数据。FTP服务器/客户端架构如图所示:
FTP有两种工作模式:端口主动模式和PASV被动模式。无论哪种方式,首先客户端需要主动与远程主机上的FTP服务器建立命令链接。
端口连接过程:客户端从任意非特权端口M (m >: 023,0到1023用于绑定特定服务)连接。向FTP服务器的命令端口(默认为21)发送连接请求。服务器接受连接并建立命令链接。当需要传输数据时,客户端在命令链上向FTP服务器发送FTP命令“port M+1”。然后客户端开始**M+1端口,服务器会从自己的数据端口(默认为20)连接到客户端指定的数据端口(M+1),建立数据链路传输数据。
在PASV模式下,命令连接和数据连接都由客户端发起。当FTP连接打开时,客户端会打开两个任意的非特权本地端口(m >: 023和M +1)。第一个端口连接到服务器的端口21以建立命令链路,这与端口模式相同,但第二个端口以不同于端口模式的方式建立数据链路。当需要传输数据时,客户端向服务器提交PASV命令。因此,服务器将打开任意非特权端口(n >: 023),并向客户端发送PASV N命令。然后客户端发起从本地端口M+1到服务器端口N的连接,建立数据链路传输数据。
因为使用FTP传输文件时必须先登录,所以只有在远程主机上获得相应的权限后,才能上传和下载文件。除非您有用户ID和密码,否则无法传输文件。互联网上有成千上万的FTP主机,不可能要求每个用户在每台主机上都有一个账号,这违背了互联网的开放性。所以匿名FTP就是为了解决这个问题而产生的。
通过匿名FTP机制,用户可以连接到远程主机上传和下载文件,而无需注册帐户。系统管理员建立了一个名为anonymous的特殊用户ID,互联网上的任何人都可以在任何地方使用它。
构建FTP服务器的Linux平台
通常,在各种Linux发行版中,默认的FTP软件是vsftp。Vsftpd(非常安全的FTP守护程序)是一个运行在类Unix操作系统上的FTP服务器程序。这里我们用vsftp在Linux平台的ubuntu发行版上搭建一个ftp服务器,可以用Python客户端测试。
(1)使用#rpm -qa |grep vsftpd命令检查是否安装了vsftpd软件,或者使用#sudo apt-get install vsftpd命令安装vsftpd软件。
(2)使用#netstat -tnl命令检查端口服务是否打开。默认情况下,FTP服务器打开端口21。
(3)使用# servicevsftpd Start | stop | restart命令启动、停止和重新启动FTP。
(4)4)FTP的配置文件位于/etc/vsftpd/目录下,包括用户禁止登录列表ftpusers和user_list,主配置文件vsftpd.conf使用命令#sudo gedit /etc/vsftpd.conf修改配置文件vsftpd.conf,去掉配置项前的#号启动配置,修改配置文件后重新启动服务。
与匿名登录相关的配置如下:
ANOnymous_enable=YES #控制是否允许匿名用户登录,YES允许匿名登录,no不允许。默认值为是。
Write_enable=YES #是否允许登录用户拥有写权限。是一个全局设置,默认值为YES。
No _ anonymous _ password = yes #如果启用了此功能,则在使用匿名登录时不会询问密码。默认值是“否”
Ftp_username=ftp#定义匿名登录的用户名。默认值是ftp。
anon_root=/var/ftp
#使用匿名登录时,登录目录。默认值是/var/ftp。注意ftp目录不能是777的权限属性。
匿名上传启用=是
#如果设置为YES,则允许匿名记录器拥有上载文件(而不是目录)的权限,这仅在write_enable=YES时有效。前提是匿名用户必须有写上层目录的权限。默认值是“否”
anon _ world _ readable _ only =是
#如果设置为YES,则允许匿名记录器下载可读文件(可以下载到本地计算机进行读取,但不能在FTP服务器中直接打开进行读取)。默认值为是。
anon _ mkdir _ write _ enable =是
#如果设置为YES,则允许匿名记录器拥有添加目录的权限,这仅在write_enable=YES时有效。前提是匿名用户必须有写上层目录的权限。默认值是“否”
anon _ other _ write _ enable =是
#如果设置为“是”,则允许匿名记录器拥有比上传或创建目录更多的权限,如删除或重命名。(如果anonymous _ upload _ enable = no,匿名用户不能
上传文件,但您可以删除或重命名现有文件。如果anon_mkdir_write_enable=NO,则匿名用户不能上传或创建新文件夹,但可以删除或重命名现有文件夹。)默认值是“否”..
Chown_uploads=YES #设置是否更改匿名用户上传的文件(而不是目录)的所有者。默认值是“否”
Chown_username=username #设置匿名用户上传的文件(不是目录)的所有者名称。不建议将其设置为root。
anon_u***sk=022
#设置匿名记录器添加或上传文件时的掩码值。默认值为077。如果u***sk是022,那么创建一个权限为666的文件,文件的实际权限是666-022=***4。
拒绝电子邮件启用=是
#要启用此功能,您必须提供一个包含电子邮件地址内容的文件/etc/vsftpd/banner_e***ils。如果您使用匿名登录,您将被要求输入电子邮件地址。如果您输入电子邮件地址
在这个文件里,是不允许进入的。默认值是“否”
banned _ e***il _ file =/etc/vsftpd/banner _ e***ils #这个文件用来输入邮件。
地址,该文件仅在deny_e***il_enable=YES时使用。如果您使用匿名登录,您将被要求输入电子邮件。
地址,如果输入的电子邮件地址在此文件中,则不允许输入。
其他主要配置如下:
Listen= NO #服务器**。你想以独立的方式收听服务吗?
Local_enable=YES #允许本地用户访问
Local _ u***sk = 022 #上的本地文件权限,默认为077
#dirmessage_enable=YES #允许访问文件夹
Xerlog _ enable = yes #允许FTP日志记录
On connect _ from _ port _ 20 = yes #启用20号端口作为数据传输端口。
Xlog _ enable = yes #激活上传和下载的日志。
#xferlog_std_for***t=yes #使用标准日志格式。
#ftpd_banner=XXXXX #欢迎消息
Local_root=/var/*** #本地登录时登录的目录。
pasv_enable=YES #
如果是,则使用PASV工作模式;如果设置为否,则使用端口模式。默认值是YES,即使用PASV工作模式。
Pasv_min_port=30000 #在Pasv工作模式下,可用于数据连接的端口范围内最大的端口,0表示任意端口。默认值为0。
Pasv_***x_port=30999 #在Pasv工作模式下,可用于数据连接的端口范围内最小的端口,0表示任意端口。默认值为0。
(5)使用#sudo userdel uftp命令删除用户,使用# sudo apt-getremove-purge vsftpd命令彻底删除软件及相关文件。
(6)匿名登录目录的权限设置。默认情况下,匿名登录的根目录是/var/ftp(实际配置为/home/ftp)。出于安全考虑,该目录默认不允许设置为777权限,否则FTP将无法匿名访问。当我们想要匿名上传文件时,我们需要设置其他用户的写权限。
sudo chmod o+w /home/ftp
更改ftp目录的主要权限从默认的root权限更改为匿名ftp权限。参数-r表示启动递归处理和修改目录中所有文件的权限,包括修改子目录中文件的权限。修改后的ftp帐户可以访问ftp文件夹。
sudo chown ftp /home/ftp -R
sudo ls -l /home/
总剂量12
DrwXR-XR-x2 FTP Root 4096 2月15日19:09 ftp
DRWXR-XR-X2UFTP根4096年2月15日16:23 uftp
DrwXR-XR-X40元宵元宵4096二月十五日19: 22元宵
还可以使用vsftp在嵌入式Linux平台的LED发行版上搭建ftp服务器。
(1)将开发板连接到外部网络,通过opkg命令安装vsftp。
root @元宵:/etc/init.d# opkg更新
root@Yuanxiao:/etc/init.d# opkg安装vsftpd
(2)配置/etc/vsftpd.conf文件。配置选项的含义和方式与上面提到的ubuntu发行版上的vsftpd相同。如果匿名登录,需要设置/etc/vsftpd.conf文件的相应选项。
(3)更改/etc/vsftpd.conf文件的权限。
启动vsftpd进程时,将会提示一个错误,指示配置文件不属于正确的用户。
root @元宵:~# /etc/init.d/vsftpd start
500糟糕:配置文件不属于正确的用户,或者不是一个文件
解决方法是设置/etc/vsftpd.conf文件的访问用户(当前为root用户)
root @元宵:~# chown root /etc/vsftpd.conf
root @元宵:~# ls -l /etc/vsftpd.conf
-rwxrwxrwx 1 root root 840 Feb 15 13:48/etc/vsftpd . conf
(4)启动和停止vsftpd。
/etc/init.d/vsftpd start
/etc/init.d/vsftpd stop
基于Python的客户端FTP程序实例
# -*- coding: utf-8 -*-#python 27from ftplib import FTPftp = FTP() #创建FTP对象timeout = 30 port = 21ftp.connect('192.168.1.188',port,timeout) # 连接FTP服务器ftp.login('UserName','888888') # 使用帐号登录print ftp.getwelcome() # 获得欢迎信息ftp.cwd('file/test') # 设置FTP远程目录下当前路径list = ftp.nlst() # 获取目录下的文件列表 for name in list: print name#从FTP服务器下载文件bufsize=1024#设置的缓冲区大小filename="/usr/share/app/uboot.bin" #需要下载的文件及本地的存放位置file_handle=open(filename,"wb").write #以写模式在本地打开文件ftp.retrbinary("RETR uboot.bin",file_handle,bufsize) #下载服务器上的文件并写入本地文件#删除远程文件ftp.delete("art.bin") # 删除FTP服务器文件#上传文件至FTP服务器bufsize=1024#设置的缓冲区大小filename="/usr/share/app/***in.py" #需要上传的文件及本地的存放位置file_handle=open(filename,"rb") #以读模式在本地打开文件ftp.storbinary("STOR ***in.py",file_handle,bufsize) #将本地文件上传到FTP服务器ftp.quit()# 退出FTP服务器
本文来自不择手段投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/552137.html