记Debian9下配置vsFTPd服务
序
最近翻到一个吃灰多年的ARM开发板,折腾许久终于装上了Debian9。感叹开源的强大。
测试了几个常用的服务,都可以跑起来,那么打算好好利用一下,
先研究的就是vsftpd。
其实百度搜一下教程真的很多,但是我就硬生生地进了好几个坑。
一路磕磕绊绊终于搞的差不多了,赶紧记录一下,别格盘后再进坑。
实现功能
禁用匿名登录;
多用户FTP服务端,ftp1、ftp2、ftp3……
每用户拥有独立目录(home目录);
可设定多个共享目录,权限灵活。
目录规划:
共享目录1:/ftpdata/share1;
共享目录2:/ftpdata/share2;
用户ftp1私有目录:/ftpdata/ftp1;
用户ftp2私有目录:/ftpdata/ftp2;
用户ftp3私有目录:/ftpdata/ftp3。
ftp1、ftp2允许访问共享目录1;
ftp1、ftp3允许访问共享目录2。
安装
一句话
apt-get install vsftpd
安装时版本为3.0.3
添加用户
#创建用户:
useradd -d /ftpdata/ftp1 ftp1
#如果不希望此用户获得shell权限,可以使用 useradd -s /sbin/nologin -d /ftpdata/ftp1 ftp1
#创建用户home目录:
mkdir -p /ftpdata/ftp1
#调整目录所有者:
chown -R ftp1:ftp /ftpdata/ftp1
#修改用户密码:
passwd ftp1
#ftp2、ftp3……等用户自行替换添加吧。
创建共享目录
mkdir -p /ftpdata/share1
chmod 777 /ftpdata/share1
mkdir -p /ftpdata/share2
chmod 777 /ftpdata/share2
配置vsFTPd
首先,万年不变备份原始参数文件:
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
之后编辑配置文件:
vi /etc/vsftpd.conf
listen=YES
#开始监听
listen_ipv6=NO
#关闭ipv6的监听,与listen互斥。
anonymous_enable=NO
#禁用匿名登录。
local_enable=YES
#开启本地用户认证。
write_enable=YES
#允许写入。
local_umask=022
#FTP本地文件权限。
dirmessage_enable=YES
#显示目录消息。
use_localtime=YES
#使用本机时区。
xferlog_enable=YES
#启动xferlog日志。
xferlog_file=/var/log/vsftpd.log
#日志保存路径。
connect_from_port_20=YES
#启用20端口传输。
ascii_upload_enable=YES
#开启二进制上传。
ascii_download_enable=YES
#开启二进制下载。
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=ftp
#进程名字,默认为vsftpd,默认时会出错,导致本地账户无法登录。
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
#本地安全证书设置。
utf8_filesystem=YES
#启用UTF-8编码。
#以下为一组配置,彼此之间具有关联性。
chroot_local_user=YES
#限制用户限制在主目录内。
chroot_list_enable=YES
#启动限制用户的名单
chroot_list_file=/etc/vsftpd/chroot_list
#限制用户的名单路径。
allow_writeable_chroot=YES
#允许写入所属目录,解决500错误。
之后还要编辑(生成) /etc/vsftpd/chroot_list 文件。
mkdir -p /etc/vsftpd/
touch /etc/vsftpd/chroot_list
格式为一行一个用户名,填写用户名后,
此用户不受目录限制,通过FTP登陆可以读取整个系统的文件结构。
这是可以尝试启用以下vsFTPd服务:
service vsftpd restart && service vsftpd status
如果没有报错,就表示启用正常。
可以使用帐号登录测试。
添加共享目录
示例为ftp1用户添加共享目录:
#ftp1创建share目录,并挂载共享文件夹share1
mkdir -p /ftpdata/ftp1/share/
#创建一个用于挂载共享文件夹的目录。
mount --bind "/ftpdata/share1/" "/ftpdata/ftp1/share/"
#挂载目录。
#ftp2创建share目录,并挂载共享文件夹share1
mkdir -p /ftpdata/ftp2/share/
#创建一个用于挂载共享文件夹的目录。
mount --bind "/ftpdata/share1/" "/ftpdata/ftp2/share/"
#挂载目录。
#ftp2创建share2目录,并挂载共享文件夹share2
mkdir -p /ftpdata/ftp2/share2/
#创建一个用于挂载共享文件夹的目录。
mount --bind "/ftpdata/share2/" "/ftpdata/ftp2/share2/"
#挂载目录。
#ftp3创建share目录,并挂载共享文件夹share2
mkdir -p /ftpdata/ftp3/share/
#创建一个用于挂载共享文件夹的目录。
mount --bind "/ftpdata/share2/" "/ftpdata/ftp3/share/"
#挂载目录。
#遇到的坑
1.服务安装完成可以正常运行,但是FTP无论怎样登陆就是提示帐号密码错误(530),
通过百度得知配置文件中默认为pam_service_name=vsftpd,需改成pam_service_name=ftp即可。
2.对于根目录限制的几条配置具有关联性,有错误就可以导致奇怪的现象发生。
恶补百度,找到几篇介绍的相对清楚的文章,见致谢。
3.linux系统的权限、归属、挂载等特性需要捋清楚,稍有错误,轻则目录不可写,重则无法登陆。
致谢&参考(排名不分先后):
《vsftpd服务安装,配置,限制目录》
https://www.cnblogs.com/Jamesblog/p/4467437.html
《技术:使用vsftpd配置FTP服务不允许切换目录》
http://blog.sina.com.cn/s/blog_6c7c14270102x0o9.html
《vsftpd配置chroot、限制登录用户的问题》
http://blog.sina.com.cn/s/blog_12d07a0be0102v0zz.html
《vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法》
https://blog.csdn.net/bluishglc/article/details/42399439
《vsftpd不支持目录软链接的解决办法》
https://blog.csdn.net/0210/article/details/53488304