ubuntu搭建ftp服务

需求

使用虚拟用户登录访问ftp, 指定用户访问, 公网访问, 保证安全.

ps.折腾了一整晚发现如果仅仅是自用的话, 用SSH自带的 sftp 完全满足需要, 最关键的是不需要任何配置!!!
然后下面的内容不用看了, 权当是个人记录....

本文涉及到的linux基本操作:

  • useradd 和 groupadd 用户管理;
  • chown 和 chmod 文件权限管理;
  • PAM

安装

apt install vsftpd

配置

vim /etc/vsftpd.conf 

本人配置内容如下:

listen=NO
listen_ipv6=YES
dirmessage_enable=YES
use_localtime=YES
#打开日志记录
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog

#禁止匿名访问
anonymous_enable=NO
#允许本地用户访问,就是linux本机中存在的用户
local_enable=YES
#开启写模式
write_enable=YES
#本地用户上传文件的umask值
local_umask=022

#白名单用户
userlist_enable=YES
#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让userlist作为一个白名单,所以无需使用黑名单功能
userlist_deny=NO
#指定哪个文件作为userlist文件
userlist_file=/etc/vsftpd/vsftpd.user_list

#是否限制本地所有用户切换根目录的权限,YES为开启限制
chroot_local_user=YES
#是否启动限制用户的名单list为允许模式,上面的YES限制了所有用户,可以用这个名单作为白名单,作为例外允许访问ftp根目录以外的目录
chroot_list_enable=YES
#设置哪个文件是list文件,里面的用户将不受限制的去访问ftp根目录以外的目录
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#是否开启写模式,开启后可以进行创建文件夹等写入操作
allow_writeable_chroot=YES

#开启虚拟用户模式
guest_enable=YES
#指定虚拟用户映射的本地账户
guest_username=vsftpd
#虚拟用户权限配置文件夹
user_config_dir=/etc/vsftpd/vusers_permission

secure_chroot_dir=/var/run/vsftpd/empty
#指定PAM文件
pam_service_name=vsftpd.vu
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO

#开启被动模式
pasv_enable=YES
#被动模式端口范围
pasv_min_port=60000
pasv_max_port=60099
#关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址
#pasv_promiscuous=YES

#主动模式
#connect_from_port_20=YES

使用

service vsftpd start
service vsftpd restart
service vsftpd stop
service vsftpd status

ftp 的原理
ftp 是双通道的,一个负责命令,一个负责数据。分为主动模式和被动模式。负责命令的端口是 21,在主动模式下,负责数据的端口是 20,在被动模式下负责数据的端口是随机的……大部分客户端如 FillaZilla 是可以自行配置用主动模式还是被动模式。你用主动模式就把服务器的安全策略组里的的 21 和 20 打开。
如果是被动模式,你可以在/etc/vsftpd/vsftpd.conf下面可以配置一个地址段,比如 60000-61000
配置ftp为被动模式

#connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=60000 
pasv_max_port=61000 

然后在阿里云安全策略组里打开这一个范围(60000/61000 ),这样相当于开了 1000 个端口允许连接

创建&配置虚拟用户

todo

pam_service_name=vsftpd.vu

创建&配置本地用户

创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。
比如我要创建的本地用户是 vsftpd, 其用户主目录为 /var/ftproot

  1. 创建用户
useradd -d /var/ftproot -s /sbin/nologin vsftpd

创建完成后可以通过 id vsftpd 命令查看vsftpd用户的信息:

id vsftpd
uid=1002(vsftpd) gid=1002(vsftpd) groups=1002(vsftpd)
  1. 配置用户主目录
//创建主目录
mkdir /var/ftproot

//修改主目录所有者
chown -R vsftp:vsftp /var/ftproot

//修改目录权限
chmod -Rf 755 /var/ftproot/ 

//查看配置结果
ls -ldih /var/ftproot
1058397 drwxr-xr-x 4 vsftpd vsftpd 4.0K Jun 10 22:29 ftproot

客户端选择

  • 浏览器地址栏输入 ftp:ip
  • mac finder (打开finder后, cmd + k)也可以连接, 但是貌似局限于局域网.
  • 推荐使用 FillaZilla, 可以看到整个连接过程的日志, 遇到问题可以方便调试.

错误处理

1. vsftpd 425 Security: Bad IP connecting

测试以下方法会导致vsftpd无法启动

//打开配置文件
vim /etc/vsftpd.conf 
//添加:
pasv_promiscuous=YES 
//重启vsftpd 
service vsftpd restart

pasv_promiscuous选项参数说明:
此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。
合理的用法是:在一些安全隧道配置环境下,或者更好地支持FXP时(才启用它)。

参考资料

  • linux就该这么学: 第11章 使用Vsftpd服务传输文件
  • linux就该这么学: 看懂FTP的主动和被动模式
  • ubuntu下vsftpd虚拟用户配置
  • FTP、SFTP、SCP、SSH、OpenSSH关系解密
  • vsftpd 425 Security: Bad IP connecting.解决方法

你可能感兴趣的:(ubuntu搭建ftp服务)