Linux下ftp服务搭建之小试牛刀

之前分享了ftp实现原理,但没有在linux下搭建过ftp server。最近有个迫切需求:在linux中下载有些安装包较慢,所以想将电脑下载的安装包通过ftp方式传到虚机内部!催生了此次实践:在Ubuntu操作系统虚机中安装一个ftp服务(client和server)。

你可以学到四点:0) ftp的安装;1) ftp各个使用场景;2) ftp各个场景的配置;3) 对ftp协议更加清楚。

ftp版本安装及安装后检查

安装部分可以参考之前一篇文章Ubuntu下安装源设置和服务安装命令apt-get以及apt安装版本检查

1. 先获取apt-get的安装源:

Linux下ftp服务搭建之小试牛刀_第1张图片
Ubuntu安装源apt-get方法

2. 然后安装sftp版本:

Linux下ftp服务搭建之小试牛刀_第2张图片
Ubuntu下apt-get安装服务

3. 安装后,ftp版本检查:

apt list | grep vsftp

检查ftp版本号

4. 安装后,ftp服务/进程和端口检查:

Linux下ftp服务搭建之小试牛刀_第3张图片
ftp服务/进程/端口检查

通过查看ftp服务或进程可以找到ftp服务的主程序目录/usr/sbin/vsftpd,ftp主配置文件/etc/vsftpd.conf。启动脚本的目录为/etc/init.d/vsftpd。

主配置文件/etc/vsftpd.conf默认配置如图

Linux下ftp服务搭建之小试牛刀_第4张图片
vsftpd.conf默认配置

可从配置文件中获取到如下信息依次是:ftp服务默认不监听IP V4,监听的是IP V6,不允许匿名登录,允许本地用户登录, 切换目录时显示目录下.message的内容,用户使用本地时间,允许ftp日志打印,默认控制连接端口为21,主动方式下数据连接时ftp服务端的端口为20,ssl加密不开启即ftp非sftp。

ftp常用的场景

根据一个主机上的ftp服务个数,ftp常用的场景大致分为单个ftp服务和多个ftp服务。根据是否加密又分为ftp和sftp。场景列表如下:

1. ftp服务:默认21控制连接端口配置,主动模式下服务端的数据连接端口固定为20,被动模式下数据连接端口由协议栈随机分配端口范围,只有下载权限

2. ftp服务:控制连接端口改为10021,主动模式下服务端的数据连接端口不为20由协议栈随机分配端口,被动模式下服务端的数据连接端口由ftp程序随机分配端口范围,有写权限(创建目录文件和上传文件)

3. sftp服务:控制连接端口改为10022,主动模式下服务端的数据连接端口为10020,被动模式下服务端的数据连接端口由ftp程序随机分配端口范围,有读写权限,最多有几个客户端同时连接,同一个ip允许多少个连接。

4.  一个主机上运行多个ftp应用

单个ftp服务的参数配置

通用处理:修改完vsftpd.conf,需要重启ftp服务,使配置生效。

1. 场景1的ftp主配置文件,如图:

Linux下ftp服务搭建之小试牛刀_第5张图片
场景1的配置文件

ftp服务监听IP V4,不允许匿名登录,允许本地用户登录, 不配置则默认控制连接端口为21,主动方式下ftp服务端进行数据连接时端口为20,ssl加密不开启即ftp非sftp,默认不配置pasv_enable=YES开启被动模式。

1) chroot_local_user=yes #限制所有用户都在家目录

2) chroot_list_enable=YES #调用限制在家目录的用户名单

3) chroot_list_file=/etc/vsftpd/chroot_list #限制在家目录的用户名单所在路径

注释:2)和3)配置时,vsftpd.chroot_list文件中用户限制在自己目录(一个账户写一行)

1) 2)和3)配置时所有的ftp用户都限制在自己的目录,vsftpd.chroot_list文件中用户反而不受限制在自己目录,FAQ1中限制自己目录的用户不具有可写权限。

4) xferlog_enable=YES #激活上传/下载日志

5)xferlog_file=/var/log/vsftpd.log#日志路径

6)xferlog_std_format=YES #标准日志格式

7) connect_from_port_20=YES #主动方式数据连接ftp客户端时ftp服务端的端口

8) data_connection_timeout=120 #数据连接空闲超时,单位秒

9) write_enable=YES #本地用户的写权限

10) local_umask=022 #FTP的本地文件权限(文件所有者有可写权限),可读r=4, 可写w=2, 可执行x=1,三个组依次为文件所有者/文件所属组/其他的权限。

创建用户组和用户

groupadd ftpuser #创建用户组ftpuser

mkdir /home/remote1

useradd -g ftpuser remote1 #将用户remote1加到用户组ftpuser

passwd remote1 #设置用户remote1

# 输入新密码

vi /etc/passwd  #文件中在remote1用户记录行添加/sbin/nologin

remote1:x:1001:1001::/home/remote1:/sbin/nologin

vi /etc/shells  #在最末尾添加一行

/sbin/nologin

chown -R remote1:ftpuser /home/remote1 #设置ftp目录的文件所有者和文件所属组

chmod 500 /home/remote1 #设置ftp目录所有者的可读可执行权限,见FAQ1。

ftp登录简单测试

ftp登录输入用户名和密码,下载文件成功(可读权限)但上传创建文件失败(可写权限)!只能到限制的目录内。

Linux下ftp服务搭建之小试牛刀_第6张图片
ftp登录测试

设置ftp客户端为被动模式,然后登录ftp,查看报文,控制连接服务端端口21,进入pasv被动模式并告知客户端:服务端数据连接的端口为61120

Linux下ftp服务搭建之小试牛刀_第7张图片
被动模式下报文

设置ftp客户端主被动模式,然后登录ftp,查看报文,控制连接服务端端口21(抓包时端口改为10021),port告知告知服务端:客户端的数据连接端口56717,服务端用20端口进行数据连接客户端

Linux下ftp服务搭建之小试牛刀_第8张图片
主动模式下报文

2. 场景2的ftp主配置文件,如图:

Linux下ftp服务搭建之小试牛刀_第9张图片
场景2的配置文件

1) connect_from_port_20=NO #FTP PORT主动模式数据传输时不使用20端口。

2) listen_port=10021 #控制连接服务端端口

3) pasv_enable=YES # 开启被动模式

4) pasv_min_port=5000#被动模式服务端数据连接的最小端口

5) pasv_max_port=5005 #被动模式服务端数据连接的最大端口

6) chroot_local_user=NO #不限制所有用户都在自己的家目录

创建用户和用户组同场景1

设置ftp目录的文件所有者和文件所属组,设置ftp目录所有者的可读可写可执行权限。

Linux下ftp服务搭建之小试牛刀_第10张图片
设置ftp目录属性

ftp登录简单测试

ftp登录输入用户名和密码,下载文件成功(可读权限)和上传创建文件成功(可写权限)!并没有限制在自己的目录内。

Linux下ftp服务搭建之小试牛刀_第11张图片
场景2 ftp可读可写权限测试

设置ftp客户端为被动模式,然后登录ftp,查看报文,控制连接服务端端口10021,进入pasv被动模式并告知客户端:服务端数据连接的端口为50004(在指定范围内)

Linux下ftp服务搭建之小试牛刀_第12张图片
场景2被动模式

设置ftp客户端主被动模式,然后登录ftp,查看报文,控制连接服务端端口10021,port告知告知服务端:客户端的数据连接端口56717,服务端没有用20端口进行数据连接客户端。

FAQ篇

FAQ1:场景1若chmod 700 /home/remote1,报错“500 OOPS: vsftpd: refusing to run with writable root inside chroot ()”

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

解决方法1: 命令chmod a-w /home/remote1 去除用户主目录的写权限。

方法2:在vsftpd的配置文件中增加下列两项中的一项:allow_writeable_chroot=YES

FAQ2: 场景2主动模式下ftp服务端主动连接ftp客户端失败,Windows主机的防火墙将相应端口屏蔽

解决方法:在Windows下将ftp客户端程序允许通过Windows防火墙进行通信。

Linux下ftp服务搭建之小试牛刀_第13张图片
允许ftp客户端通过防火墙

本期实践了ftp两个场景的配置和测试,收获颇丰!你有收获嘛?

纸上得来终觉浅,觉知此事要躬行!

要知sftp各个场景如何搭建和主机上同时运行多个ftp应用,请下两回分享!

sftp服务搭建涉及几个问题:sftp如何加密配置的,ftp客户端和服务端如何安全交互。

多个ftp运行涉及几个问题:ftp软件安装几次,ftp进程目录修改,ftp参数配置。

参考资料:

ftp核心配置参数

Debain下ftp参数配置

你可能感兴趣的:(Linux下ftp服务搭建之小试牛刀)