ScotGu

记Debian9下配置vsFTPd服务
序最近翻到一个吃灰多年的ARM开发板,折腾许久终于装上了Debian9 。感叹开源的强大。测试了几个常用的服务,都...
扫描右侧二维码阅读全文
13
2018/08

记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

Last modification:August 27th, 2018 at 04:00 pm

Leave a Comment