虽然可以使用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 是否允许某些匿名用户使用邮件地址(默认的)