Ubuntu18.04上安装vsftpd服务器
- 服务器
- 2023-02-15
FTP是最广泛使用的标准网络协议,用于通过网络在两台计算机之间传输文件。Vsftpd的全称为非常安全的FTP守护程序(Very Security FTP Daemon),它以安全、快速、稳定著称,是类Unix系统上常用的FTP服务器。
在并发用户数达1500的单台机器上, vsftpd在24小时内传输了2.6TB(是的,太字节)。
一、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