Linux下搭建FTP服务器

这篇具有很好参考价值的文章主要介绍了Linux下搭建FTP服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux下搭建FTP服务器

FTP协议:文件传输协议(File Transfer Protocol)

  • 协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准
  • FTP运行在OSI模型的应用层,并利用传输协议TCP在不同的主机之间提供可靠的数据传输
  • FTP 在文件传输中还支持断点续传功能,可以大幅度减少CPU网络带宽的开销

FTP模型

  • 用户接口:提供一个用户接口并使用客户端协议解释器的服务
  • 客户端协议解释器:向远程服务器发送命令 并建立客户数据传输过程
  • 服务端协议解释器:响应客户协议机发出的命令并驱动服务端数据传输过程
  • 客户端数据传输协议:负责完成和服务器数据传输过程及客户端本地文件系统的通信
  • 服务端数据传输协议:负责完成和客户数据过程及服务器端文件系统的通信

控制连接(端口号21)

  • 主要用来传送在实际通信过程中需要执行的FTP命令以及命令的响应
  • 只需要很小的网络带宽
  • FTP服务端监听21端口号来等待控制连接建立
  • 建立控制连接后,还需要验证客户身份,决定是否建立数据连接
  • 当需要目录列表,传输文件时,才建立数据连接,并且每次客户端都是用不同的端口号来建立数据连接。数据传输完毕,就中断这条临时的数据连接
  • 在FTP连接期间,控制连接始终保持通常的连接状态。在数据连接存在期间,控制连接必须存在;一旦控制连接断开,数据连接会自动关闭。

数据连接(端口号20)

  • FTP服务端监听20端口来等待数据连接
  • 数据连接依赖于控制连接
  • 建立方式(主动被动都是相对服务器而言)

主动模式

  • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口
  • 控制连接建立后,客户端进行身份验证,协商数据连接采用主动模式;随后客户端会向FTP服务器发送Port报文,表明自己监听的IP+端口,并等待FTP服务器(20端口)向自己监听的IP+端口发起数据连接请求。
  • 服务端发起数据连接请求,建立数据连接

被动模式

  • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口;
  • 控制连接建立后,客户端进行身份验证,协商数据连接采用被动模式;随后客户端会向服务器发送PASV报文,表示我们用被动模式
  • 服务端收到PASV报文,于是向客户端发送Port报文,表明自己监听的IP+端口
  • 客户端发起数据连接请求,建立数据连接

VSFTPD服务介绍

  • 服务包:vsftpd
  • 服务类型:由Systemd启动的守护进程
  • 配置单元: /usr/lib/systemd/system/vsftpd.service
  • 守护进程: /usr/sbin/vsftpd
  • 端口: 21(ftp) , 20(ftp‐data)
  • 主配置文件: /etc/vsftpd/vsftpd.conf
  • 用户访问控制配置文件: /etc/vsftpd/ftpusers /etc/vsftpd/user_list
  • 日志文件: /etc/logrotate.d/vsftpd
  • 配置文件参数
参数 作用
listen=NO 是否以独立运行的方式监听服务
listen_address=ip地址 设置要监听的IP地址
listen_port=21 设置FTP服务的监听端口
download_enable=YES 是否允许下载文件
userlist_enable=YES 设置用户列表为"允许"
userlist_deny=YES 设置用户列表为"禁止"
max_clients=0 最大客户端连接数,0为不限制
max_per_ip=0 同一IP地址的最大连接数,0为不限制
anonymous_enable=YES 是否允许匿名用户访问
anon_upload_enable=YES 是否允许匿名用户上传文件
anon_umask 匿名用户上传文件的umask
anon_root=/var/ftp 匿名用户的ftp根目录
anon_mkdir_write_enable=YES 是否允许匿名用户创建目录
anon_other_write_enable=YES 是否开放匿名用户的其他写入权限(重命名、删除等)
anon_max_rate=0 匿名用户的最大传输速率,0为不限制
local_enable=yes 是否允许本地用户登录
local_umask=022 本地用户上传文件的umask值
local_root=/vat/ftp 本地用户的ftp根目录
chroot_local_user=YES 是否将用户权限禁锢在ftp目录,以确保安全
local_max_rate=0 本地用户的最大传输速率,0为不限制

基础配置

安装vsftp

[root@localhoust ~]#yum -y install vsftpd

准备分发的文件

[root@localhoust ~]#touch /var/ftp/abd.txt

启动服务

[root@localhost ~]#systemctl start vsftpd
[root@localhost ~]#systemctl enable vsftpd

关闭防火墙

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0

客户端工具

Linux中

1.使用ftp工具
[root@localhost ~]# yum install ftp -y
[root@localhost ~]# ftp <IP地址>
Name (192.168.175.10:root):anonymous
password:直接回车

ftp工具一定要输入用户名和密码,匿名用户登陆用户名写anonymous,密码直接回车,登陆成功或者失败都会给出提示

2.使用lftp工具
[root@localhost ~]# yum install lftp -y
[root@localhost ~]# lftp <IP地址>

lftp工具不需要输入用户名和密码直接登陆,不会直接给出登陆成功或者失败的提示,需要输入ls工具才能知道是否连接成功,优点在于连接更加方便

Windows中

1.在浏览器中访问

可以在浏览器、运行窗口或者资源管理器中输入 ftp://IP地址/ ,这样访问的是ftp的根位置,如果需要访问相关目录可以输入 ftp://IP地址/目录/文件名

2.在控制管理器中访问

在cmd窗口中,输入命令 ftp <IP地址> 即可访问

需要注意的是直接访问ftp服务器的IP地址时访问的根位置目录是 /var/ftp,如果需要访问pub里的test可以访问 ftp://192.168.80.129/pub/test 。

案例

案例1,匿名用户访问(默认开启)

修改配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd #重启配置

新版本的vsftp针对用户安全性进行了升级,普通用户无法在/var/ftp下新建文件,如果直接添加目录的w权限会触发安全判断问题,因为/var/ftp目录下的文件只能是默认的755权限,普通用户没有w权限,而且/var/ftp目录的属主必须是root,如果修改所属主或者权限则会触发完全问题。欲使普通用户可以在ftp中上传文件,就在/var/ftp下新建一个用于普通用户上传文件的目录,比如/var/ftp/pub,将/var/ftp/pub目录的属主和属组改成ftp,并且添加w权限

chown ftp.ftp /var/ftp/pub
chmod 777 /var/ftp/pub

现在就可以在里面写文件了

案例2,本地用户访问

这些用户就是Linux下的用户,使用本地用户登陆,登陆成功时位置在该用户的家目录。如:用户han登陆时,输入han在Linux下的密码,登陆成功后位置在/home,han可以在该目录下创建或者删除文件

修改配置文件

[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #不允许匿名用户访问
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd #重启配置
[root@localhost ~]# systemctl enable vsftpd

本地用户登陆时,密码使用的是该用户在Linux下登陆时的密码,而不是ftp的密码

注意:出现在/etc/vsftpd/ftpusers /etc/vsftpd/user_list这两个文件中的内容将会被定义为黑名单

案例3,虚拟用户访问

只用于登陆ftp的用户,不是Linux下的用户。

  1. 创建用于进行FTP认证的用户数据库文件,其中奇数行为用户名,偶数行为密码。
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vuser.list #创建文件,稍后虚拟用户信息从这个文件读取
eagle #用户名
centos #密码
cisco #用户名
centos #密码
huawei #用户名
centos #密码
  1. 使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件。
[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db

由于文件vuser.list中含有密码等敏感信息,所以使用加密算法加密。转换完后新的文件vuser.db就是用户数据库,里面是加密后的信息。

查看vuser.db的文件类型:

[root@localhost vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
  1. 降低数据库文件的权限(避免其他人看到数据库文件的内容)。加强数据库vuser.db的安全性,防止破解
[root@localhost vsftpd]# chmod 600 vuser.db
  1. 把原始的明文信息文件删除。
[root@localhost vsftpd]# rm -f vuser.list
  1. 创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,禁止这个本地用户登录。
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
#-d 指定用户的家目录为/var/ftproot -s 指定为不能登陆的用户
[root@localhost vsftpd]# ls -ld /var/ftproot/
drwx------. 2 virtual virtual 59 810 23:04 /var/ftproot/
[root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/

新建一个用于虚拟用户认证的PAM文件vsftpd.vu,利用pam模块(linux内核的一个认证模块)做一个认证

[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
  1. 配置文件
[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual #名为virtual的用户做代理
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu #记得修改这里为我们自己的认证文件
userlist_enable=YES
tcp_wrappers=YES
[root@localhost vsftpd]# systemctl restart vsftpd

这时用户创建完毕,可以登陆,但是不能写文件,需要给权限文章来源地址https://www.toymoban.com/news/detail-781174.html

  1. 如果想要针对不同的用户设置不同的权限
[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/ #创建一个目录用于存放各个虚拟用户的配置文件
[root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# touch huawei #创建huawei的配置文件,如果不给任何权限,则默认为主配置文件
[root@localhost vusers_dir]# vim cisco #创建cisco的配置文件,并修改配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#与配置匿名用户权限一样
[root@localhost vusers_dir]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir #在主配置文件中加上这一行,告诉主配置文件我们这里还有配置
[root@localhost vusers_dir]# systemctl restart vsftpd
配置完后,huawei没权限,cisco有权限

到了这里,关于Linux下搭建FTP服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux中FTP服务器搭建与安全配置

    FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准协议。在Linux系统上,您可以搭建自己的FTP服务器,以便轻松共享和传输文件。本文将提供详细的步骤和示例代码,帮助大家安全地搭建和配置Linux FTP服务器。 首先,需要选择并安装一个FTP服务器软件。在Linux中

    2024年02月04日
    浏览(35)
  • LINUX通过vsftpd搭建FTP服务器 ( 最快 最直接的方式)

    这里只说最快最直接的方式,至于后面的权限配置,我就不写了。百度一大把 这里只记录成功将文件从MACBOOK通过FTP传到UBUNTU的过程 1.安装vsftpd sudo apt install vsftpd 2.查看服务状态,启动,停止等 systemctl status|start|stop vsftpd.service 基于systemctl的单元服务操作,不多说,都懂 3.Vstp配

    2024年02月10日
    浏览(33)
  • Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)

    VSFTPD 实现客户端和服务器之间传输文件 目录 什么是VSFTPD? VSFTPD 的特点和功能 1. 设置和使用FTP服务器的步骤 1. 下载vsftpd包 2. 启动服务 开机自启 3. 关闭防火墙 4. 配置vsftpd服务    常用 配置选项 匿名用户 本地用户 设置进入提示 2.重启vsftpd服务(重点) 3进入 /var/ftp ftp根目

    2024年02月02日
    浏览(35)
  • vsftpd安装配置,Linux系统配置FTP服务器教程(CentOS 7)

    vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件 。今天飞飞将和你分享 Linux 系统 安装并配置vsftpd ,搭建FTP环境 。 先让我们来认识下FTP! FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式: 主动

    2024年02月09日
    浏览(47)
  • 【Linux】FTP文件服务器

    FTP (File transfer protocol) 是TCP/IP 协议组中的协议之一。他最主要的功能是在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。将文件从自己计算机中拷贝至远程计算机上,则称

    2024年02月10日
    浏览(43)
  • FTP服务器移植到Linux开发板

    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 将Linux开发板作为一个小型的 FTP 服务器,这样就可以通过 FileZilla 软件直接在开发板和 windows 之间通过网络进行文件互传。在开发板上搭建 FTP 服务器很简单

    2024年02月14日
    浏览(28)
  • Windows访问Linux下的FTP服务器(Centos和Uuntu)

    1.下载FTP离线安装包: http: / /rpmfind .net/linux/rpm2html/search .php?query=vsftpd (x86-64 )    选择最后一个 vsftpd-3.0.2-28.el7.x86_64.rpm 2.检查是否已经安装了vsftp rpm -qa | grep vsftpd 出现提示vsftpd版本号则表示已安装,没有则未安装 3.安装vsftpd(推荐离线) 离线安装 rpm -ivh vsftpd-3.0.2-22.el7.x86_

    2024年02月09日
    浏览(28)
  • 如何在 Ubuntu Linux 中设置和使用 FTP 服务器?

    注:本文假设您已在 Ubuntu Linux 系统上安装并配置好了适当的环境。 FTP(文件传输协议)是一种常用的网络协议,用于在客户端和服务器之间进行文件传输。在 Ubuntu Linux 中,您可以设置和使用 FTP 服务器,以便通过网络与其他设备共享文件。本文将详细介绍如何在 Ubuntu Lin

    2024年02月05日
    浏览(37)
  • 如何在LINUX(UBUNTU)实现FTP服务器多用户多权限

    要求 实现两个用户,使得一个student可以上传,下载文件 另一个teacher可以上传,下载,删除文件 首先现在Ubuntu上安装ftp(以下使用vsftp演示) 为了使student用户没有删除的权力,需要做以下更改 ftp服务器配置文件如下

    2024年01月21日
    浏览(30)
  • Linux系统编程,使用C语言实现简单的FTP(服务器/客户端)

    前言 跟着上官社长 陈哥花了一个月的时间终于把Linux系统编程学的差不多了,这一个月真的是头疼啊,各种bug,调的真心心累,不过好在问题都解决掉了,在此也感谢一下答疑老师,给我提供了很多的思路,本文章是对前段时间学习Linux,做一个小小的总结,才疏学浅,只学

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包