Ubuntu linux下vsftpd 安装配置

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
#pasv_max_port=30010
#pasv_min_port=30000 

#被动模式设置

 

#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

后续可能要考虑的就是网络问题。。。网络访问权限。。。编码问题

 

开发中遇到的问题:

  1. 根据绝对路径切换工作目录 ftpClient.changeWorkingDirectory 始终返回false

    调整chroot_local_user相关配置确保当前ftp用户可以切换到主目录以外的目录

    奇怪的是以相对路径来切换 可以正常切换 该方法返回true

Over

 

posted @ 2018-12-05 15:53  道林格雷  阅读(2020)  评论(0编辑  收藏  举报