ftp基本概念
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输,支持FTP协议的服务器就是FTP服务 器;TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。FTP的传输有两种方式:ASCII、二进制。
FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。
Port模式
FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
总结:ftp 是做文件上传下载的。。。而且还比较陈旧
安装:apt-get install vsftpd
安装完成后查看vsftpd各文件位置:dpkg –L vsftpd
基本配置信息
listen=YES #设定该Vsftpd服务工作在StandAlone模式下。 #所谓StandAlone模式就是该服务拥有自己的守护进程支持,在ps -A命令下我们将可用看到vsftpd的守护进程名。 #如果不想工作在StandAlone模式下,则可以选择SuperDaemon模式,在该模式下 vsftpd将没有自己的守护进程, #而是由超级守护进程Xinetd全权代理,与此同时,Vsftp服务的许多功能将得不到实现。
#listen_ipv6=YES # This directive enables listening on IPv6 sockets. By default, listening # on the IPv6 "any" address (::) will accept connections from both IPv6 # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6 # sockets. If you want that (perhaps because you want to listen on specific # addresses) then you must run two copies of vsftpd with two configuration # files.
anonymous_enable=NO #设定不允许匿名访 anon_upload_enable=NO #禁止匿名用户上传。 anon_mkdir_write_enable=NO #禁止匿名用户建立目录。 #chown_uploads=YES #chown_username=whoever # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! 还是针对匿名用户
local_enable=YES #设定本地用户可以访问,和允许匿名用户访问 两个选项必须开启一个 不然ftp就自闭了 #虚拟宿主用户,如果该项设定为NO那么所有虚拟用户将无法访问。 write_enable=YES #设定可以进行写操作 local_umask=022 #设定上传后文件的权限掩码。注意(umask决定目录和文件被创建时得到的初始权限 777-022=755 ) use_localtime=YES # If enabled, vsftpd will display directory listings with the time # in your local time zone. The default is to display GMT. The # times returned by the MDTM FTP command are also affected by this # option.
xferlog_enable=YES #设定开启日志记录功能 上传/下载 #xferlog_file=/var/log/vsftpd.log # You may override where the log file goes if you like. The default is shown # below. 可以自行设置日志记录地址 以上是默认地址
#idle_session_timeout=600 # You may change the default value for timing out an idle session. #设定空闲连接超时时间,这里使用默认。将具体数值留给每个具体用户具体指定,当然如果不指定的话,还是使用这里的默认值600,单位秒 #data_connection_timeout=120 # You may change the default value for timing out a data connection. #设定单次最大连续传输时间,这里使用默认。将具体数值留给每个具体用户具体指定,当然如果不指定的话,还是使用这里的默认值120,单位秒
#nopriv_user=ftpsecure # It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户。注意,一旦做出更改宿主用户后,必须注意一起与该服务相关的读写文件的读写赋权问题。比如日志文件就必须给与 该用户写入权限等。就是 ftp服务的操作 以该设置的用户来进行 安全限制
#async_abor_enable=YES #设定支持异步传输功能。 ascii_upload_enable=YES ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能
connect_from_port_20=YES #设定端口20进行数据连接 port模式 主动模式 #pasv_enable=YES #被动模式设置
#chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd.chroot_list # 这个控制用户切换到主目录外的其他目录 chroot_list_enable该指令控制chroot_list_file的有效性,chroot_list_file指定一个文件,记录用户名 #chroot_local_user为YES表示所有用户都*能*切换到主目录之外其他目录,但是除了chroot_list_file配置的文件列出的用户。chroot_local_user为NO表示所有用户都*不能*切换到主目录之外其他目录,但是除了chroot_list_file配置的文件列出的用户。也可以理解为,chroot_list_file列出的“例外情况”的用户
#userlist_deny=NO #userlist_enable=NO #userlist_file=/etc/vsftpd.user_list #userlist_enable 控制userlist_file 的有效性,userlist_enable为YES userlist_deny配置才有用,userlist_deny=NO 则userlist_file 配置中用户可访问 其他用户不可访问;userlist_deny=YES 则userlist_file 配置中用户不可访问 其他用户可访问
ls_recurse_enable=NO #禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁
pam_service_name=vsftpd #设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
tcp_wrappers=YES #设定支持TCP Wrappers
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO # This option specifies the location of the RSA certificate to use for SSL # encrypted connections.
# Uncomment this to indicate that vsftpd use a utf8 filesystem. #utf8_filesystem=YES
|
以上配置基本可以保证一个基本的ftp服务走系统用户 以下是虚拟用户的配置方式
nopriv_user=ftpsecure
*可以检查下以上配置中设置的文件存不存在以及相关权限设置,比如当指定了nopriv_user
那么 该用户就需要对 日志等ftp服务会操作的目录以及文件有读写权限
接下来要说的就是虚拟用户的设置(该操作可以根据不同虚拟用户设置不同配置)
准备
1.以上配置需要额外添加
guest_enable=YES
#设定启用虚拟用户功能。
guest_username=**
#指定虚拟用户的宿主用户。 这个就是限制虚拟用户的权限
virtual_use_local_privs=YES
#设定虚拟用户的权限符合他们的宿主用户。
user_config_dir=/etc/vsftpd/vconf
#设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将#存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的地方就是这些配置文件名#必须和虚拟用户名相同。
2.添加虚拟用户
习惯性 在 /etc/vsftpd/ 下创建一个 virtualusers 文件保存虚拟用户信息,一行用户名 一行密码的形式
这里需要用到 db-util 用来将上面的用户文件转换成 数据库文件 以供pam 验证 安装:apt-get install db-util
生成db 指令:db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
3.设置虚拟用户的验证方式
主配置中已经指定了pam校验设置vsftpd cat /etc/pam.d/vsftpd 再该文件 加上
auth sufficient pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient pam_userdb.so db=/etc/vsftpd/virtusers
这里的auth是指对用户的用户名口令进行验证。这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。其后的sufficient表示充分条件,也就是说,一旦在这里通过了验 证,那么也就不用经过下面剩下的验证步骤了
4.设置虚拟用户的ftp配置信息
可以看到和上面设置的虚拟用户的名称一致
szy的配置
zzr的配置
可以看到这里针对不同的虚拟用户 做了不同的设置
注意:1.这里的关键项是local_root这个配置,用来指定这个虚拟用户的FTP主路径。
2.更改虚拟用户的主目录的属主为虚拟宿主用户:也就是说虚拟用户的宿主用户需要对这个设置的loacl_root目录有操作权限
基本到这 vsftpd 的基本配置就差不多了
其他 vsftpd的一些指令
service vsftpd start/stop/stauts/restart
后续可能要考虑的就是网络问题。。。网络访问权限。。。编码问题
开发中遇到的问题:
- 根据绝对路径切换工作目录 ftpClient.changeWorkingDirectory 始终返回false
调整chroot_local_user相关配置确保当前ftp用户可以切换到主目录以外的目录
奇怪的是以相对路径来切换 可以正常切换 该方法返回true
Over