本文最后更新于 2020 年 3 月 8 日,文章已超过 6 个月!内容可能已失效,请自行测试 ~

vsftpd(very secure ftp daemon,非常安全的FTP守护进程)文件传输协议

主动模式:FTP服务器主动向客户端发起连接请求

被动模式:FTP服务器等待客户端发起连接请求(FTP默认工作模式)

当前环境为Centos7.5.1804

演示为本地用户登录

安装教程

安装依赖

[root@master ~]# yum -y install wget gcc gcc-c++ make tcp_wrappers-devel openssl-devel libcap-devel

下载软件包并解压

[root@master ~]# wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
[root@master ~]# tar xvf vsftpd-3.0.3.tar.gz
[root@master ~]# cd vsftpd-3.0.3/

修改配置文件并编译

[root@master vsftpd-3.0.3]# sed -i 's/^#undef/#define/g' builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS //允许使用TCP Wrappers(默认是undef)
#define VSF_BUILD_PAM //允许使用PAM认证
#define VSF_BUILD_SSL //允许使用SSL(默认是undef)
#endif /* VSF_BUILDDEFS_H */
[root@master vsftpd-3.0.3]# make && make install

拷贝配置文件

#拷贝配置文件
[root@master vsftpd-3.0.3]# cp vsftpd.conf /etc/
拷贝身份认证模块
[root@master vsftpd-3.0.3]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

防火墙开放端口

[root@master ~]# firewall-cmd --zone=public --add-port=21-20/tcp --permanent
success
[root@master ~]# firewall-cmd --reload
success

启动服务

[root@master ~]# vsftpd 

以下为vsftpd配置文件部分内容:

#####匿名用户配置!#####
# 是否允许匿名登录FTP服务? 默认情况下允许注释
anonymous_enable=NO
# 如果设为YES,将允许匿名用户使用安全的SSL连接。
#allow_anon_ssl=NO
# 如果设为YES,将允许匿名用户在特定条件下创建新目录。选项 write_enable 需被激活
#anon_mkdir_write_enable=NO
#如果设置为YES,将允许匿名用户执行写操作,除了上传和创建目录(例如删除和重命名)。
#anon_other_write_enable=NO
#如果设置为YES,将允许匿名用户在特定条件下上传文件。选项 write_enable 需被激活
#anon_upload_enable=NO
#启用后,匿名用户将只能下载以下文件:可读取的。这是承认ftp用户可能拥有文件,特别是在存在上传内容的情况下。
#anon_world_readable_only=YES
# 如果激活则所有匿名登录均被强制使用安全SSL连接以便在数据连接上发送和接收数据。
#force_anon_data_ssl=NO
# 如果激活则所有匿名登录均被强制使用SSL连接才能发送密码
#force_anon_logins_ssl=NO
#启用后可以防止vsftpd请求输入匿名密码,将直接登录
no_anon_password=NO
#####!匿名用户配置#####

#####Ascii配置!#####
# 启用后将在上传时接受ASCII模式的数据传输。
#ascii_upload_enable=NO
# 启用后将在下载时接受ASCII模式的数据传输。
#ascii_download_enable=NO
#####!Ascii配置#####

# 启用后,将启用称为"异步ABOR"的特殊FTP命令。
#async_abor_enable=NO
# 此选项仅针对vsftpd的非PAM版本有效。如果禁用,vsftpd不会爱/etc/shells种检查本地登录的有效用户shell.
#check_shell=YES
# 启用后允许使用SITE CHMOD命令。这仅适用于给本地用户,匿名用户永远不会使用SITE CHMOD。
#chmod_enable=YES
# 如果启用,所有匿名上传的文件的所有权都会更改给指定用户。依赖:chown_username
#chown_uploads=NO
#chown_username=whoever
#如果为true 将OpenSSL连接诊断信息转储道日志文件中
#debug_ssl=NO
# 如果为true 则删除任何失败的上传文件
#delete_failed_uploads=NO
# 如果激活则可以提供匿名密码电子邮箱相应列表导致登录被拒绝
#deny_email_enable=NO
#banned_email_file=/etc/vsftpd.banned_emails
# 您可以完全自定义登录标题字符串:
#ftpd_banner=Welcome to blah FTP service.

#####设置权限!#####
#如果设置为NO,则所有目录列表命令都将授予拒绝权限。
#dirlist_enable=YES
#如果设置为NO,则所有下载请求都将拒绝收取权限。
#download_enable=YES
#如果启用将并行生成两个日志文件,/var/log/xferlog和/var/log/vsftpd.log
#dual_log_enable=NO
# 如果激活则所有非匿名登录都将强制使用SSL连接才能进行数据传输。
force_local_data_ssl=YES
# 如果激活则所有非匿名登录都将强制使用SSL连接才能进行数据传输。
force_local_logins_ssl=YES
#如果启用则所有非匿名登录均被分类为访客登录。
#guest_enable=NO
# 如果启用目录列表中所有用户和组信息将显示为ftp。
#hide_ids=YES
#启用后所有上传操作将对上传文件进行写锁定。所有下载将对下载文件进行共享读取锁定
#lock_upload_files=YES
#启用后将记录所有ftp请求和响应,并提供以下选项: xferlog_std_format
#log_ftp_protocol=NO
#启用后将允许使用"ls -R"。允许ls -R将浪费很多资源
#ls_recurse_enable=NO
#####!设置权限#####

#####标准配置!#####
# 启用后,vsftpd以"侦听"模式启动,vsftpd将在后台运行进程
background=YES
# 取消注释以允许本地用户登录。
local_enable=YES
# 取消注释此选项可启用任何形式的FTP写命令。
write_enable=YES
# 本地用户的默认umask为077。您可能希望将其更改为022,
local_umask=022
# 激活目录消息-当远程用户
# 进入某个目录。
#dirmessage_enable=YES
# 激活上载/下载的日志记录。
#xferlog_enable=YES
# 确保端口传输连接源自端口20 (ftp数据)。
connect_from_port_20=YES
# 如果愿意,您可以覆盖日志文件所在的位置。显示默认值下面。
#xferlog_file=/var/log/vsftpd.log
# 如果需要,可以将日志文件设置为标准ftpd xferlog格式。
# 请注意,在这种情况下,默认日志文件位置为/var/log/xferlog.
# xferlog_std_format=YES
# 您可以更改默认值以使空闲会话超时。
idle_session_timeout=600
# 您可以更改默认值以使数据连接超时。
data_connection_timeout=120
# 建议您在系统上定义一个唯一的用户,
# ftp服务器可以用作完全隔离且没有特权的用户。
#nopriv_user=ftpsecure
#secure_chroot_dir= /
# 如果设置为YES,本地用户将被放置在chroot目录中登录后的主目录
chroot_local_user=YES
# 如果激活则可以提供放置在chroot在登陆时进入其主目录。如果chroot_local_user设为YES,则不同。这种情况下,列表变为不会放在chroot监听的用户列表。默认情况下包含此列表的文件是/etc/vsftpd.chroot_list,你可以使用chroot_list_file进行设置
chroot_list_enable=YES
# 设置监听用户列表
#chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
# 启用ipv4方式
listen=YES
# 启用ipv6方式
#listen_ipv6=YES
#####!标准配置#####

验证

Make时遇到的报错:

tcpwrap.c:16:20: fatal error: tcpd.h: No such file or directory
   #include <tcpd.h>
                    ^
compilation terminated.
make: *** [tcpwrap.o] Error 1

解决方法:yum -y install tcp_wrappers-devel

/usr/bin/ld: cannot find -lcap
collect2: error: ld returned 1 exit status
make: *** [vsftpd] Error 1

解决方法:yum -y install libcap-devel

ssl.c:28:25: fatal error: openssl/err.h: No such file or directory
 #include <openssl/err.h>
                         ^
compilation terminated.
make: *** [ssl.o] Error 1

解决方法: yum -y install openssl-devel


该文章采用「CC 协议」,转载必须注明作者和本文链接.
分类: Linux