Ubuntu安装配置FTP服务器

目录

  • 安装vsftpd
  • 配置vsftpd
  • 使用户登录FTP
  • 其他问题
    • 新建的系统用户登录失败
    • 使用cmd的ftp命令无法执行ls
    • 关于配置文件中的几个设置选项
    • 被动模式和主动模式
      • 区别
      • 开启被动模式
    • SSL配置

安装vsftpd

apt update
apt install vsftpd

配置vsftpd

# 在/etc/vsftpd.conf中修改,没有提到的默认即可
listen=NO
listen_ipv6=YES 
# 以上两个不能同时为NO或者YES,打开了listen_ipv6也会开启ipv4的监听,所以最好选择第二个为YES
anonymous_enable=NO
#禁止匿名登录

local_enable=YES
#允许系统用户登录

write_enable=YES
#开启写权限,方便上传文件

dirmessage_enable=YES
#用户进入目录时发送反馈消息

use_localtime=YES
#使用本地时间

xferlog_enable=YES
#开启上传下载日志

connect_from_port_20=YES
#确保数据传输连接起源于20端口

修改完配置文件重启vsftpd服务:service vsftpd restart这样应该就可以使用非root用户登录了。登录的账号和密码就是Linux系统用户的账号密码。

至于为什么root用户无法登录,是因为在安装vsftpd的时候会自动把root用户添加到限制名单中,该限制名单的位置一般在/etc/ftpusers或者/etc/vsftpd/ftpusers

使用户登录FTP

建议不要把FTP用户用来登录系统,所以最好新建一个FTP用户

mkdir /home/ftpUser
useradd -d /home/ftpUser -s /bin/false ftpUser #使用-s 来限制用户登录系统
passwd ftpUser #设置该用户的口令
chown -R ftpUser:ftpUser /home/ftpUser #把该目录的属主更换为ftpUser,也可以不换,不过下一步就要把权限设置为777
chmod -R 755 /home/ftpUser

接下来就可以使用ftpUser来登录FTP服务,如果在输对口令的情况下显示530 Login incorrect请参考我在下文中写的处理方法。

其他问题

新建的系统用户登录失败

我是通过useradd -d /home/ftpUser -s /bin/false ftpUser新建用户的,为了限制该用户的登录特意加了-s选项指定其无法登录,但是直接拿这个用户来登录FTP似乎登录不成功,借鉴别人的方法是在/etc/shells文件里添加一行/bin/false这样我就可以登录了。

使用cmd的ftp命令无法执行ls

能成功登录但是没办法进一步获取列表,一般是Windows防火墙的问题,但是不建议关闭防火墙。找到windows防火墙设置,在修改允许通过的应用里添加C:\Windows\System32\ftp.exe再次执行就不报错了。

关于配置文件中的几个设置选项

主要说明两个比较绕的配置:chroot_list_enablechroot_local_user
按照我的理解是:

  • list_user是local_user的子集,list_user是通过/etc/vsftpd/chroot_list文件手动指定的,local_user就是系统用户,即/etc/passwd中看到的用户。
  • 前缀chroot的意思是锁定用户根目录,不允许登录的用户访问其他目录,所以当chroot_x_x的值是YES时就说明x_x所包含的用户只能在限制目录下活动,而当其值为NO时,他可以切到系统的任意目录。

于是有了以下四种配置组合:

  • 当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。
  • 当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。
  • 当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能切换到上级目录。
  • 当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可以切换到上级目录。
  • 当用户不允许切换到上级目录时,登录后FTP站点的根目录“/”是该FTP账户的主目录,即文件的系统的/var/ftp目录。

被动模式和主动模式

区别

以下引自CSDN博客

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。FTP服务器接收到PORT命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

在被动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的,后面会说到这个是很重要的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

开启被动模式

在配置文件中添加:

pasv_enable=YES
pasv_min_port=24600
pasv_max_port=25000 #这两个端口可以根据实际情况修改

#以下是可选设置,我在公网服务器上配置被动模式会提示返回无法路由的地址,添加下面的设置就解决了
pasv_address=39.xx.xxx.65 #改成服务器的IP地址

然后重启vsftp,使用被动模式连接

SSL配置

如果以上配置都没有问题,推荐在vsftpd.conf里面打开SSL来安全传输。
ssl_enable=YES

你可能感兴趣的:(开发环境配置,linux,ftp)