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

作者: robot_test_boy | 来源:发表于2018-02-12 22:33 被阅读124次

    之前分享了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的安装源:

    Ubuntu安装源apt-get方法

    2. 然后安装sftp版本:

    Ubuntu下apt-get安装服务

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

    apt list | grep vsftp

    检查ftp版本号

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

    ftp服务/进程/端口检查

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

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

    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主配置文件,如图:

    场景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登录输入用户名和密码,下载文件成功(可读权限)但上传创建文件失败(可写权限)!只能到限制的目录内。

    ftp登录测试

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

    被动模式下报文

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

    主动模式下报文

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

    场景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目录所有者的可读可写可执行权限。

    设置ftp目录属性

    ftp登录简单测试

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

    场景2 ftp可读可写权限测试

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

    场景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防火墙进行通信。

    允许ftp客户端通过防火墙

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

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

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

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

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

    参考资料:

    ftp核心配置参数

    Debain下ftp参数配置

    相关文章

      网友评论

        本文标题:Linux下ftp服务搭建之小试牛刀

        本文链接:https://www.haomeiwen.com/subject/jwvctftx.html