使用s3fs和vsftp创建一个基于Object Storage的匿名FTP服务器
环境
- 安装并配置s3fs
- 安装vsftp
配置匿名用户上传下载权限
主要问题在vsftp的匿名FTP权限设置上,使用vsftp的默认配置文件后匿名用户上传完的文件下载时会出现550错误
假设s3fs已经mount到/mnt/s3obj,Bucket名称为s3bkt,在系统层级文件实际路径/mnt/s3obj/s3bkt/something.file,需要实现匿名上传和下载,但是不能删除文件和重命名
1 2 3 4 5 6 7 8 9 10 11 12 |
# /etc/vsftpd.conf # anonymous addtional settings anon_root=/mnt/s3obj anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=NO anon_other_write_enable=NO anon_world_readable_only=NO write_enable=YES download_enable=YES hide_ids=YES |
anon_root=/mnt/s3obj 只能将加载点设为主目录,不能将Bucket设为主目录,否则无法刷新文件列表。
anon_mkdir_write_enable=NO 因为Object Storage不支持目录,所以这里禁止用户创建目录
anon_other_write_enable=NO 因为是匿名FTP服务器,为了安全考虑,禁止删除、重命名和编辑已上传的文件
anon_world_readable_only=NO 这条解决匿名用户无法下载自己上传的文件的550 Failed to open file问题
hide_ids=YES 这里为了安全考虑,隐藏文件实际所有者,匿名用户访问时只能看到文件所有者为ftp:ftp
重启vsftpd服务
1 |
service vsftpd restart |
按此设置后,匿名用户上传的文件属性为600,权限为ftp:ftp,并且可以查看和下载已上传的文件列表,无法修改和删除已上传的文件
配置SSL
在配置文件中增加cert和privkey的路径,可以通过certbot来申请letsencrypt证书
1 2 3 4 5 6 |
rsa_cert_file=/etc/letsencrypt/live/minirplus.com/cert.pem rsa_private_key_file=/etc/letsencrypt/live/minirplus.com/privkey.pem ssl_enable=YES allow_anon_ssl=YES force_anon_data_ssl=YES force_anon_logins_ssl=YES |
设置完成重启服务后,下次连接客户端会自动使用TLS进行连接
There are no comments yet