Top

ftp

参考:FreeBSD手册30.9. File Transfer Protocol (FTP)

FTP(File Transfer Protocol,文件传输协议)给用户从FTP服务器获取文件的简单方法。
FreeBSD在基础系统中包含FTP服务器软件:ftpd。

FreeBSD提供了一些配置文件来控制对FTP服务器的访问。

配置

在/etc/ftpusers文件中列出了不允许访问FTP的用户。默认情况下,它包含所有系统账户,包括root。
在某些情况下,可能需要限制某些用户的访问,而不是完全阻止他们使用FTP。可以通过创建/etc/ftpchroot来完成。

要允许匿名访问FTP,需要创建一个名为ftp的系统账户。用户就可以使用账号ftp或anonymous来登录FTP服务器。
当匿名访问时会提示输入密码,任何字符都可以接受。但按照惯例,应使用电子邮件地址当作密码。
匿名用户登录时,FTP服务器将调用chroot,以限制只能访问用户ftp的主目录。

可以创建两个文件来指定用户登录时显示的欢迎信息。 以上配置完成后,需要在/etc/rc.conf中加入以下行
ftpd_enable="YES"
如果要立即启动ftp服务,可以运行以下命令:
# service ftpd start
默认情况下,ftpd的日志保存在/var/log/xferlog中,可以通过修改/etc/syslog.conf中的以下行来修改FTP日志的位置:
ftp.info /var/log/xferlog

搭建FTP需要注意两点:

vsftpd

vsftpd号称是非常安全的ftp(very secure ftp)。
安装方法:
# pkg install vsftpd-ssl
简单配置:
编辑/usr/local/etc/vsftpd.conf文件,将最后两行取消注释:
listen=YES
background=YES
然后在/etc/rc.conf中加入以下行:
vsftpd_enable="YES"
启动vsftpd服务:
# service vsftpd start

vsftp支持两种虚拟用户: 以上两种方法有待进一步学习。

proftpd

Professional FTP daemon,FreeBSD的pkg中有proftpd-mod_clamav,似乎支持集成杀毒软件。
另外还有ldap、sql_mysql等模块,应该可以跟ldap和数据库等集成。看起来比vsftpd功能更强大。

proftpd相关的模块有: 安装完成后使用以下命令将proftpd加入到开机自启动:
service proftpd enable
proftpd的配置文件为/usr/local/etc/proftpd.conf,/usr/local/etc/proftpd/中保存两类特殊配置文件: 启动proftpd服务时会遇到以下提示:
root@X61s:~ # service proftpd start
Starting proftpd.
2022-12-07 13:46:59,016 X61s proftpd[863]: warning: unable to determine IP address of 'X61s'
2022-12-07 13:46:59,016 X61s proftpd[863]: error: no valid servers configured
2022-12-07 13:46:59,016 X61s proftpd[863]: fatal: error processing configuration file '/usr/local/etc/proftpd.conf'
/usr/local/etc/rc.d/proftpd: WARNING: failed to start proftpd
这个应该是因为proftpd仅获取到主机的hostname,并未获取到主机的IP,可以通过修改/etc/hosts文件解析本机的IP:
127.0.0.1     localhost localhost.my.domain X61s
然后就可以正常启动proftpd服务了。

proftpd的配置文件/usr/local/etc/proftpd.conf初始内容如下(经过整理,便于阅读):
#
# For more information about Proftpd configuration
# see http://www.proftpd.org/
#
# This is a basic ProFTPD configuration file (rename it to 'proftpd.conf' for actual use).  
# It establishes a single server and a single anonymous login.  
# It assumes that you have a user/group "nobody" and "ftp" for normal operation and anon.
# ProFTPD需要系统内有一个用户/组nobody和ftp,实际上FreeBSD只有nobody用户/组,所以若要允许匿名登录,则需创建账号ftp。

ServerName                      "ProFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on
ScoreboardFile          /var/run/proftpd/proftpd.scoreboard

# Port 21 is the standard FTP port.
Port                            21

# Use IPv6 support by default.
UseIPv6                         on

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances                    30

CommandBufferSize       512

# Set the user and group under which the server will run.
User                            nobody
Group                           nogroup

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~

# Normally, we want files to be overwriteable.
AllowOverwrite          on

# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
</Limit>

# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.

#########################################################################
#                                                                       #
# Uncomment lines with only one # to allow basic anonymous access       #
#                                                                       #
#########################################################################

#<Anonymous ~ftp>
#   User                                ftp
#   Group                               ftp

  ### We want clients to be able to login with "anonymous" as well as "ftp"
  # UserAlias                   anonymous ftp

  ### Limit the maximum number of anonymous logins
  # MaxClients                  10

  ### We want 'welcome.msg' displayed at login, and '.message' displayed
  ### in each newly chdired directory.
  # DisplayLogin                        welcome.msg
  # DisplayFirstChdir           .message

  ### Limit WRITE everywhere in the anonymous chroot
  # 此处默认允许删除、上传文件,若取消以下三行注释,则匿名账号只读。
  # <Limit WRITE>
  #   DenyAll
  # </Limit>
#</Anonymous>