Debian下部署vsftpd

虽然可以使用sftp,但是在某些应用下(比如wordpress,wordpress和wordpress)安装插件/主题的时候却只支持ftp,所以仍然还是需要使用到ftp,搜了一下找到了这一篇文章:http://wushuaishuai.blog.51cto.com/3432229/753071,对照着这个文章搞定了vsftpd使用系统账户的配置方法,以及对照着老大higkoo以前的文章搞定了虚拟账户的配置方法。以下正文
另,仍然是懒,所以用的root账户,非root账户记得加sudo
vsftpd 区分两种账户模式,系统账户与虚拟账户,前者可以直接通过系统自带的账户登陆,后者不需要创建系统账户,而是通过写配置文件来达到目的
一、使用系统账户
1、安装vsftpd
没啥难度,直接apt-get即可

apt-get install vsftpd

东西不大,基本上1分钟内就下载完并安装好了
2、创建和配置用户

adduser 用户名

#创建的时候会先让你输入两次密码,然后会跟你索要各种信息,有点通讯录的感觉,总之全部空着回车后问你是否正确,按下Y然后回车即可

adduser 用户名 ftp

#这个命令是把这个用户加到ftp组下,格式为adduser 用户名 组名

mkdir /home/用户名

#建立一个文件夹作为ftp账户的默认显示文件夹,这个大家可以根据需要自行调整

chmod -R 775 /home/用户名

#设置此目录下所有文件和子目录的读、写、执行权限

chgrp -R ftp /home/用户名

#设置此目录下所有文件和子目录属于ftp组

vim /etc/passwd

进入后找到写着你的用户名的那一行,格式为:

用户名:x:100*:100*:,,,:/home/用户名:/bin/bash

(星号为不确定数字,一般会根据创建账号的先后而逐渐增长,默认第一个为1000)
如果后期需要修改home目录位置的话,可以在这里直接修改目录
在这个地方我们需要先设置此账户改为不允许登陆状态,把/bin/bash删除,并改为/usr/sbin/nologin,修改完成后的样子为

用户名:x:100*:100*:,,,:/home/用户名:/usr/sbin/nologin

保存后退出

vim /etc/shells

检查此文件内有没有/usr/sbin/nologin这一行,没有的话在结尾添加即可
3、配置vsftpd配置文件

vim /etc/vsftpd.conf

最基础的几个需要修改的地方为:

anonymous_enable=NO
#关闭匿名用户有
local_enable=YES
#允许本地用户访问
write_enable=YES
#允许写入
local_umask=022
#上传文件的掩码为22(虽不明但觉厉,还没去查有什么具体用途,总之先改掉了)
chroot_local_user=NO
#禁止本地用户登录
chroot_list_enable=YES
#允许列表里的用户登录,这里设置为YES后必须设置下面的列表
chroot_list_file=/etc/vsftpd.chroot_list
#设置列表路径(此文件内直接输入用户名,一行一个)

保存后退出
由于启用了chroot,所以需要给根目录下放一个文件夹,来保证可写入,并设置根目录不可写
到达根目录后

chmod a-w /home/用户名

然后进去后人工创建一个目录来保证可以上传到这个文件夹内

service vsftpd restart #重启vsftpd服务

经过以上的配置,就可以直接通过21端口来使用ftp协议了
二、使用虚拟账户
1、安装vsftpd和db5.3-util

apt-get install vsftpd db5.3-util

2、创建FTP登陆后放文件文件夹,这里我把文件夹丢到/var下面

mkdir /var/ftp

3、给ftp文件夹ftp权限

chown ftp:ftp /var/ftp

4、touch出我们用的到的配置文件(debian需要先mkdir)

mkdir /etc/vsftpd/
touch /etc/vsftpd/{chroot-list,user-list,issue,accounts,create.sh} /etc/pam.d/vsftpd.ftp

5、给虚拟账号的密码加密

openssl req -newkey rsa:2048 -x509 -nodes -days 3650 -out /etc/vsftpd/vsftp-cert.pem -keyout /etc/vsftpd/vsftp-cert.pem

6、修改配置文件,案例见下

anon_mkdir_write_enable=NO
anon_root=/dev/zero
anon_upload_enable=NO
anon_world_readable_only=YES
anonymous_enable=NO
banner_file=/etc/vsftpd/issue
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot-list
allow_writeable_chroot=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user-list
data_connection_timeout=120
dirmessage_enable=NO
ftpd_banner=Welcome to ops ftp.
guest_enable=YES
guest_username=ftp
hide_file={\.*}
idle_session_timeout=600
listen_ipv6=NO
connect_from_port_20=NO
ftp_data_port=50234
listen_port=21
listen=YES
local_enable=YES
local_umask=022
log_ftp_protocol=YES
syslog_enable=NO
pam_service_name=vsftpd.ftp
passwd_chroot_enable=NO
pasv_enable=YES
pasv_min_port=62222
pasv_max_port=62333
tcp_wrappers=YES
use_localtime=NO
user_config_dir=/etc/vsftpd/roles
userlist_enable=YES
virtual_use_local_privs=YES
write_enable=YES
xferlog_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xfer.log
vsftpd_log_file=/var/log/vsftpd.log
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/vsftp-cert.pem
max_per_ip=30
max_clients=200
ssl_ciphers=HIGH
require_ssl_reuse=NO
log_ftp_protocol=yes
dual_log_enable=YES
lock_upload_files=NO
allow_anon_ssl=YES

7、配置好虚拟账号的配置文件(这里我们叫ftp)

mkdir /etc/vsftpd/roles #创建这个文件夹,以后每个虚拟账号的配置都在这里单独配置
vim ftp #一个账号一个配置文件,文件名就是账号名
local_root=/var/ftp #文件夹位置
anon_world_readable_only=NO
write_enable=YES #允许写入
anon_upload_enable=NO

8、创建一个“创建账号脚本”,这个是一次性的,以后继续增加账号的时候只需要执行即可

vim /etc/vsftpd/create.sh
/bin/mv -fv /etc/vsftpd/accounts.db /tmp
/usr/bin/db5.3_load -T -t hash -f /etc/vsftpd/accounts /etc/vsftpd/accounts.db
/bin/chmod 0600 /etc/vsftpd/accounts.db /etc/vsftpd/accounts

:wq保存退出
9、配置/etc/pam.d/vsftpd.ftp,这个也是一次性的,设置好后不会再动

vim /etc/pam.d/vsftpd.ftp
auth sufficient /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/accounts
account sufficient /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/accounts

:wq保存退出
10、设定好账号和密码
vim

/etc/vsftpd/accounts

第一行写账号,第二行密码,第三行账号,第四行密码……以此类推
写完后:wq保存
11、

./create.sh 执行一下~

这里有个坑,第一次执行的时候会报一个找不到文件的错误,以后再运行就不会了
12、

service vsftpd restart

至此就搞定了账号了,如果需要添加新的账号的话,重复执行3、7、10、11、12即可
如果FTP登陆失败,提示:

500 OOPS: prctl PR_SET_SECCOMP failed
请在vsftpd.conf里加上seccomp_sandbox=NO

顺便在文章结尾附上配置文件里常用的可以调整的设置,这部分直接转载自文章开头所写出处。

#anonymous_enable 是否允许匿名ftp,如否则选择NO,默认允许匿名访问,
注意当允许是所有用户均视为匿名登录。
#local_enable 是否允许本地用户访问,是指VSFTP所在机器上的注册用户。
#local_umask=022 默认的umask码
#write_enable 是否允许本地用户修改和删除
#anon_upload_enable=YES 是否允许匿名用户上传
#anon_mkdir_write_enable=YES 是否允许匿名用户的写和创建目录的权限
#dirmessage_enable=YES 当切换目录时,是否显示该目录下message隐藏文件的内容
#xferlog_enable=YES 是否激活上传和下载的日志
#connect_from_port_20=YES 是否启动FTP数据端口20的连接请求
#chown_uploads=YES 是否改变上传文件的所有者
#chown_username=whoever 改变上传文件的所有者为whoever
#xferlog_file=/var/log/vsftpd.log 上传/下载日志文件所默认的路径
#xferlog_std_format=YES 是否使用标准的ftpd xferlog日志格式
#idle_session_timeout=600 是否将在用户会话空闲10分钟后被中断
#data_connection_timeout=120 是否将在数据连接空闲2分钟后被中断
#nopriv_user=ftpsecure 是否运行vsftpd需要的非特殊系统用户默认nobody
#async_abor_enable=YES 是否允许运行特殊的FTP命令async
#ascii_upload_enable=YES 是否启用上传的ascii传输方式
#ascii_download_enable=YES 是否启用下载的ascii传输方式
#ftpd_banner=Welcome to blah FTP service. 用户连接服务器后显示信息
#deny_email_enable=YES 是否允许某些匿名用户使用邮件地址(默认的)