使用vsftpd 搭建ftp服务

ftp 基础服务器基础知识

ftp有三种登录方式。匿名登录(所有用户)、本地用户、虚拟用户(guest)。

 

 

FTP工作模式

主动模式:服务端从20端口主动向客户端发起链接。 控制端口21;数据传输端口20

过程:客户端从一个任意的非特权端口N(N>1024)向FTP服务器的命令端口(默认是21)发送请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端开始监听端口N+1,并在命令链路上用PORT命令发送N+1端口到FTP服务器,于是服务器会从自己的数据端口(20)向客户端指定的数据端口(N+1)发送连接请求,建立一条数据链路来传送数据。

被动模式:服务端在指定范围内某个端口被动等待及客户端链接。 控制端口21;数据传输端口 随机

过程:客户端从一个任意的非特权端口N(N>1024)向FTP服务器的命令端口(默认是21)发送请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PASV命令发送。于是服务器会开启一个任意的非特权端口P(P>1024),并在命令链路上把端口发送给客户端,然后客户端从自己的数据端口(N+1)向服务器的数据端口(P)发送连接请求,建立一条数据链路来传送数据。

 

优缺点

主动FTP对服务器管理有利,但对客户端管理不利,因为会在客户端产生随机端口建立连接,可能会被防火墙阻止。

被动FTP对客户端管理有利,但对服务球管理不利,因为在服务端建立连接时为随机端口,也可能会被防火墙阻止。

 

设置方式

 

主动模式
Port_enable=YES               #开启主动模式
Connect_from_port_20=YES      #当主动模式开启的时候 是否启用默认的20端口监听
Ftp_date_port=%portnumber%    #上一选项使用NO参数时 指定数据传输端口


被动模式
PASV_enable=YES             #开启被动模式
PASV_min_port=%number%       #被动模式最低端口
PASV_max_port=%number%       #被动模式最高端口

 

传输方式 

文本模式:ASCII模式,以文本序列传输数据

二进制模式:Binary模式,以二进制序列传输数据

 

一、设置虚拟用户登录ftp服务器
  1. yum 安装 vsftpd 服务,启动。

  2. 创建本地用户指定 shell 和本地目录。方便映射虚拟用户

    useradd load -s /sbin/nologin -d /var/ftp/work
    chmod 755 /var/ftp/work
  3. 创建虚拟用户文件,并生成db文件,加入到pam 认证模块中

    vim /etc/vsftpd/v_users
    #这个文件中一行账户名,一行密码
    ​
    db_load -T -t hash -f v_users vusers.db
    ​
    vim /etc/pam.d/vsftpd   #注释上面的原文件,加入下面的配置
    auth        required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vusers
    account     required    /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vusers
  4. 创建虚拟用户的配置目录,管理不同的虚拟账号。

    #在主配置文件中设置虚拟用户的配置目录
    vim /etc/vsftpd/vsftpd.conf
    ser_config_dir=/etc/vsftpd/vconf.d
    ​
    allow_writeable_chroot=YES  ##允许对 禁锢的ftp根目录执行写入操作,而且不拒绝用户的登录请求

    再到目录中去创建和账号名一样的文件。

    vim /etc/vsftpd/vconf.d/userf
    guest_enable=YES                #允许这个虚拟账号访问
    guest_username=load             #此虚拟账号映射的本地账号
    local_root=/data/ftp/work       #可以设置登录后禁锢的目录,此项这次没有使用
    ​
    anon_world_readable_only=no     #下载的权限
    anon_upload_enable=YES          #上传的权限
    anon_mkdir_write_enable=YES     #创建文件夹
    anon_other_write_enable=YES     #删除和重命名
    ​
    ​
    ​
    #tips:在自己的配置文件中不允许有空格,特别是最后一行不能为空

 

二、xinetd模式和standalone模式的区别

 

  像其它守护程序一样,vsftpd提供了standalone和inetd(inetd或xinetd)两种运行模式。简单解释一下, standalone一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源,因此经常应用于对实时反应要求较高的 专业FTP服务器。inetd恰恰相反,由于只在外部连接发送请求时才调用FTP进程,因此不适合应用在同时连接数量较多的系统。此外,inetd模式不 占用系统资源。除了反应速度和占用资源两方面的影响外,vsftpd还提供了一些额外的高级功能,如inetd模式支持per_IP(单一IP)限制,而 standalone模式则更有利于PAM验证功能的应用。 

1.xinetd运行模式

大多数较新的系统采用的是xinetd超级服务守护进程。使用“vi /etc/xinetd.d/vsftpd” 看一下它的内容,如下:
disable = no 
socket_type = stream
wait = no
# 这表示设备是激活的,它正在使用标准的TCP Sockets。
如果“/etc/vsftpd.conf”中的有选项为“listen=YES”,注销它
最后,重启xinetd,命令如下:
$ /etc/rc.d/init.d/xinetd restart
需要注意的是,“/etc/xinetd.d”目录中仅能开启一个FTP服务。
2.standalone模式
  standalone模式便于实现PAM验证功能。进入这种模式首先要关闭xinetd下的vsftpd,设置
“disable = yes”,或者注销掉“/etc/inetd.conf”中相应的行。然后修改“/etc/vsftpd.con
f”中的选项为“listen=YES”。
 
vsftpd 打开standalone 模式需要在 vsftpd.conf 配置文件中 开启开关

# 当启用“listen”指令时,vsftpd 以standalone mode(独立模式)运行,并且
# 侦听 IPv4 套接字。 该指令不能结合使用 listen_ipv6 指令。

# 开启独立运行模式,没有xinit进程一起运行,会提升ftp的效率,这个模式下有影响的参数
# 有两个, max_clients , max_per_ip 
listen = NO  			#默认是关闭的,因为开启这个只能监听ipv4
listen_ipv6 = YES 		#默认是开启的,因为可以同时监听ipv4 和 ipv6 ,开启后也是独立模式运行的。所以vsftpd的默认配置都是以独立模式运行。

#max_clients  此模式下的默认值是2000
#max_per_ip   此模式下的默认值是50

 

  以xinetd模式运行的服务表示该服务进程并不以 守护进程执行,以FTPD进程为例吧,以xinetd模式运行这个服务,情况是这样的,本身FTP服务是会监听21号端口的,但是以这种模式运行这个服务 的话,21号端口则由xinetd进程来监听(此时FTPD服务并没有运行),如果你的网卡接收到有21号端口请求,则有xinetd进程会去调用 FTPD程序,将在21号端口接收到的请求数据移交给FTPD进程去处理,处理完后FTPD进程退出,而xinetd进程继续监听21号端口,这有点类似 windows的svhost进程;而以 standalone模式运行的服务则是服务进程,如ftpd以守护进程在内存中运行,接收到21号端口的请求后由FTPD进程fork出一个子进程进行 处理,而原进程继续监听21号端口。

 

三、配置文件中启用双份日志,一个查看上传下载的信息,另一个查看连接信息。
如果启用,将并行生成两个日志文件,默认为 /var/log/xfer-log 和 /var/log/vsftpd.log。
前者是 wu-ftpd 风格的传输日志,可通过标准工具解析。 后者是vsftpd自己的风格日志。

#dual_log_enable = NO , 默认是no。

下面是开启双份日志的设置。

dual_log_enable = YES


xferlog_enable=YES  #默认开启上传和下载的日志信息,位置可能保存在vsftp.log 里,但是设置了xferlog_file 就会保存在自己设定的位置
xferlog_file=/var/log/xferlog		#设置xferlog保存的位置
xferlog_std_format=YES				#使用标准的xferlog 格式保存位置


#设置vsftpd.log的日志位置
vsftpd_log_file=/var/log/vsftpd.log

 

四、用户访问控制


user_lists 文件由 userlist_enabele控制是否使用,为NO 时取消使用 user_list 文件,为YES时启用。

启用后可以设置白名单,也可以设置为黑名单。由下面的userlist_deny开关控制

# If userlist_deny=NO, only allow users in this file,黑名单设置
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password. 白名单设置 

 

最后说一句,文件 ftpusers 里的用户都是被禁用的,如果需要启用(一般可能是root用户),注释掉即可,同时不要忘记了 user_list 文件是否有设置黑名单,如果有,一并取消即可。

 

五、vsftpd 匿名用户的权限配置

1、vsftpd.conf文件的配置(vi /etc/vsftpd/vsftpd.conf)

  #允许匿名用户登录FTP

  anonymous_enable=YES

  #设置匿名用户的登录目录(如需要,需自己添加并修改)

  anon_root=/var/ftp/pub

  #打开匿名用户的上传权限

  anon_upload_enable=YES

  #打开匿名用户创建目录的权限

  anon_mkdir_write_enable=YES

  #打开匿名用户删除和重命名的权限(如需要,需自己添加)

  anon_other_write_enable=YES

  #匿名用户的掩码(如需要,需自己添加,含义:如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644)

  anon_umask=022
  

  如果使用匿名用户还是报错,就设置服务器上ftp目录权限 777。

 

六、vsftpd 连接相关设置

connect_timeout=60
单位是秒,如果 client 尝试连接我们的 vsftpd 命令通道(21端口)超过 60 秒,
则不等待,强制断线。

accept_timeout=60
当使用者以被动式 PASV 来进行数据传输时,如果主机启用 passive port
并等待 client 超过 60 秒,那么就给他强制断线!您可以修改 60 这个数值。

data_connection_timeout=300
如果 client 与 Server 间的数据传送在 300 秒内都无法传送成功,
那 Client 的联机就会被我们的 vsftpd 强制剔除!

idle_session_timeout=300
如果使用者在 300 秒内都没有命令动作,强制离线!

max_clients=0
如果 vsftpd 是以 stand alone 方式启动的,那么这个设定项目可以设定
同一时间,最多有多少 client 可以同时连上 vsftpd 哩!?

max_per_ip=0
与上面 max_clients 类似,这里是同一个 IP 同一时间可允许多少联机

 

posted @ 2021-09-05 18:39  风风羊  阅读(345)  评论(0编辑  收藏  举报