Ubuntu18.04上安装vsftpd服务器

FTP是最广泛使用的标准网络协议,用于通过网络在两台计算机之间传输文件。Vsftpd的全称为非常安全的FTP守护程序(Very Security FTP Daemon),它以安全、快速、稳定著称,是类Unix系统上常用的FTP服务器。

在并发用户数达1500的单台机器上, vsftpd在24小时内传输了2.6TB(是的,太字节)。

users
traffics

一、vsftpd的安装

Ubuntu 18.04安装FTP服务,当然是选择vsftpd。Ubuntu安装vsftpd还是很简单,一句命令就行:

sudo apt-get install vsftpd

命令执行过程中,安装程序会给本地创建一个名为“ftp”的用户组,命令执行完之后会自动启动FTP服务。

可以使用“netstat -tl”命令检查FTP端口有没有打开,或者直接在浏览器里输入“ftp://你的服务器IP”,如果能连接到FTP服务器,则安装vsftpd已成功。

开启、停止、重启vsftpd服务也很简单:

sudo service vsftpd start | stop | restart

service vsftpd start  #启动

service vsftpd stop  #停止

service vsftpd restart  #重启

二、vsftpd的添加用户

新安装的vsftpd默认是可以匿名访问,如果只想给某一个用户专门访问某一目录下的权限,则需要修改vsftpd的配置了。

首先,创建一个专门用来访问的用户,例如叫“frog”:

sudo useradd frog -g ftp -m -s /sbin/nologin

或者执行以下命令:

sudo mkdir -p /home/frog

sudo useradd frog -g ftp -d /home/frog -s /sbin/nologin

sudo chmod 777 /home/frog

设置密码:

passwd frog

vsftp添加用户的方法:

sudo adduser -m vsftp

接下来,使用以下命令创建ftp目录并设置所有权:

sudo mkdir -p /home/vsftp/ftpsudo chown vsftp:vsftp /home/vsftp/ftp sudo chmod a-w /home/vsftp/ftp

接下来,创建一个可以上载文件的目录,并为vsftp用户提供所有权:

sudo mkdir /home/vsftp/ftp/uploadsudo chown vsftp:vsftp /home/vsftp/ftp/upload

三、vsftpd的配置

查看vsftpd的配置文件

sudo cat /etc/vsftpd.conf | grep -v "^#"

修改vsftpd的配置文件:

sudo nano /etc/vsftpd.conf

anonymous_enable=NO#禁止匿名访问

local_enable=YES #接受本地用户。虚拟账户最终要借用宿主账号,如果为NO则宿主账号不可登录,虚拟账号最终也不可登录

write_enable=YES#此项默认值为NO,不可上传,现已改为YES,可以上传

chroot_list_enable=YES#不允许用户离开主目录,默认允许

chroot_list_file=/etc/vsftpd.chroot_list

#启用在chroot_list_file的用户只能访问根目录

在/etc/vsftpd.chroot_list添加受访问目录限制的用户:

echo "frog" >> /etc/vsftpd.chroot_list

anonymous_enable=NO #不允许匿名登录,默认允许

pam_service_name=vsftpd #指定vsftpd登录时的认证配置文件名称,目录在/etc/pam.d

四、安装过程中遇到的一些问题:

1、“530 Login incorrect”

在 /etc/shells 最后一行添加“/sbin/nologin”

2、“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”

启用了chroot的话,根目录要设置为不可写

chmod a-w /home/frog

3、服务器发回了不可路由的地址。被动模式失败。

# passive/active mode configuration

pasv_enable=YES

pasv_max_port=2048

pasv_min_port=1024

4、服务器发回了不可路由的地址。使用服务器地址代替。

更改Filezilla设置,编辑-设置-连接-FTP-被动模式,将“使用服务器的外部ip地址来代替”改为“回到主动模式”即可。

5、无法上传文件,或者无法用FTP新建文件夹

vsftpd 550 Permission denied错误。

找到write_enable=NO这行,把这行注释掉,改成#write_enable=NO后,还是无法上传文件。

比较了以前配置的文件,发现以前的版本里写的是

write_enable=YES

于是把这行加上,居然可以了,配置如下:

#write_enable=NO

write_enable=YES

手动加上这个允许上传的设置,问题解决了。

6、vsftp 登录报错。

500 OOPS: cannot change directory:/home/frog/ftp

是文件夹/home的路径的权限,路径权限设置为755.

用 root 用户,使用命令:

chmod 755 /home

chmod 755 /home/frog

chmod 755 /home/frog/ftp

7、vsftpd进程启动报错。starting vsftpd for vsftpd: 500 OOPS: bad bool value in config file for: anonymous_enable

处理办法:要保证vsftpd.conf文件里每行的配置后面都不要有空格。

解决:vim编辑/etc/vsftpd/vsftpd.conf文件,在尾行模式下输入":%s/\s\+$",然后回车即可。 vim删除行首行尾空格和tab的命令如下(非编辑状态下输入): :%s/^\s\+ 删除行首的空格和tab :%s/\s\+$ 删除行尾的空格和tab

8、配置chroot_local_user选项。

启用chroot_local_user可能很危险。如果使用chroot,请确保用户没有对chroot中顶级目录的写访问权限。

chroot_local_user和chroot_list_enable在取不同值时,chroot_list_file的作用不同。各参数说明在vsftpd.conf中都是比较清楚的;但可能一项配置涉及多个参数时各参数的意思有时不好理解。

userlist_enable=YESuserlist_deny=NO userlist_file=/etc/vsftpd.user_list

#chroot_local_user=YESchroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list 这样设置后,vsftpd.user_list文件中列出的用户才有权限来访问ftp,vsftpd.chroot_list文件中列出的用户是无法随意进入系统的其他目录的,只能在自家目录下活动。

/etc/vsftpd.user_list文件和/etc/vsftpd.chroot_list文件是需要手动建立的,文件名和路径都随意,里面写入需要开放权限或限制的用户名,每行一个。

(1)如果chroot_local_user设置激活(设为YES),则vsftpd.chroot_list文件中列出的用户是可以自由出入整个文件系统目录的,不止是自家目录。也不管chroot_list_enable是否被激活了。

(2)如果chroot_local_user设置未激活(设为NO或注释掉),同时chroot_list_enable=YES,则 vsftpd.chroot_list文件中列出的用户只能在自家目录下活动,否则还是可以自由出入其他一些目录的。

配置锁定用户在家目录下相关参数含义:

9、网络拒绝访问

如果FTP是被动模式下的配置,配置后需要在服务器的安全组和iptables防火墙打开相应的端口并允许数据传输。

好的,重启vsftpd之后就可以使用上面新创建的账号访问了!

四、附表

1、vsftpd.chroot_list文件:

#每行一个用户名

www

ftp

frog

2、vsftpd.user_list文件:

#每行一个用户名

www

ftp

frog

举报/反馈