Linux ftp服务器部署(最简单的ftp教程) 您所在的位置:网站首页 linux系统快速搭建ftp服务器 Linux ftp服务器部署(最简单的ftp教程)

Linux ftp服务器部署(最简单的ftp教程)

2023-12-09 21:15| 来源: 网络整理| 查看: 265

之前在阿里云领了一个ECS服务器(顺便说一句,白嫖的🤣,真香~),就想着做点什么,然后试着做个 ftp 站点,因为第一次尝试,结果走了不少弯路。最后终于完成了,研究了两天(哎~,😭脑壳笨没办法)就想着记录下来,于是有了这篇博客,按照下面的步骤操作,快速部署好你的 ftp 站点。

配置 ftp 站点步骤: 1. 安装 vsftpd 服务 2. 配置 vsftpd.conf 文件 全局配置 匿名用户 本地用户 3.虚拟用户 创建用户名单 配置 vsftpd.conf 配置虚拟用户权限 4. 开放端口规则 5. 重启 vsftpd 服务 测试

配置文件测试可用,可以直接复制 vsftpd.conf 的内容。整个部署稍稍复杂点的是配置虚拟用户的步骤,除此之外,其他没什么难度。部署好ftp 之后,手机、Windows、Linux之间再无隔阂,文件互传啥轻松的不要不要的。废话不多说,下面让我们开始教程:

ps:按照我的教程部署,如果无法访问ftp,可能时由于 防火墙 或者 selinux 的原因。因为我的服务器默认没有开启防火墙和selinux,所以省下了许多麻烦。😋😋😋,可以尝试关闭防火墙和selinux再尝试。

这里测试的服务器用的阿里的Linux centos 7 系统。

1、安装 vsftpd 1.1 安装 vsftpd yum install vsftpd -y -y 参数表示全部默认 yes,不用手动确认。 1.2 启动 vsftpd 并设置为开机自启 systemctl start vsftpd # 开启vsftpd服务,或者用 service vsftpd start 命令 systemctl enable vsftpd # 设置为开机自启动

检查是否成功设置为开机自启(这一步无所谓)

systemctl list-unit-files | grep vsftpd # systemctl list-unit-files 用于列出所有配置文件 # 输出 enable 表示开机自启 vsftpd.service enabled # 另外,chkconfig --list 命令也可以查看开机自启信息 # chkconfig 命令用于检查,设置系统的各种服务 #chkconfig --add vsfptd # --add  增加所指定的系统服务,让chkconfig指令得以管理它 chkconfig vsftpd on # 设置自动启动 vsftpd chkconfig --list vsftpd # 列出chkconfig --list所知道的所有的服务的情况 # 输出 1—6为系统运行级别:0 关机 1 单用户 2 无网络多用户 3 有网络多用户 4 保留(不可用) 5 图形界面多用户(stratx) 6 重启 ,可以通过 init 5(0/1/2/3/4/5/6) 命令切换 # 2 3 5 为可工作的状态,都为on则表示在该系统运行级别下会自启 vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 2、配置 vsftpd 文件 基础知识

本来想写个傻瓜式教程的,结果BB的太多。说了是傻瓜教程就不涉及太多内容,但基础的知识还是要知道一点的。 ftp 有两种模式,分别是主动模式,和被动模式。ftp 占用两个端口,21端口用于连接,20端口用于传输数据。

主动模式:客户端告诉服务器自己监听的端口(随机端口>1024),从而服务器主动连接客户端。连接成功后(用户登录成功),客户端的随机端口 与 服务器的20端口 传输数据。 被动模式:客户端告诉服务器自己处于被动模式,服务器告诉客户端自己正在监听的端口(随机端口>1024),从而客户端去连接服务端。

正如这两种模式的名字一样,主动模式就是服务器主动去连接客户端,被动模式就是客户端被动的连接服务端。由于我的服务器是在同一个 ip 下多台服务器共享的,让服务器找客户端不太方便,这里我用的是被动模式。

在安装好 vsftpd 后,会有 一个 /etc/vsftpd 目录,在此目录中都是与 vsftpd 配置有关的。

在这里插入图片描述 ——图片为 /etc/vsftpd/ 目录下的文件

/etc/vsftpd/ 目录下相关文件 简介 /etc/vsftpd/vsftpd.conf 主配置文件:配置匿名用用户,本地用户,连接方式等 /etc/pam.d/vsftpd PAM认证文件,在设置虚拟用户时会用到 /usr/sbin/vsftpd vsftpd 程序 /etc/vsftpd/ftpusers 用户黑名单,只是用户黑名单,不受任何参数限制 /etc/vsftpd/user_list 用户名单,根据具体设置决定是黑名单还是白名单 /var/ftp 匿名用户主目录,不是绝对,比如本教程中把匿名用户设置在了 /srv/ftp/anyone/ chroot_list 自建用户名单,根据具体设置决定是白名单还是黑名单,在本教程中用作允许用户向上切换目录的用户名单 loguser.txt 自建的虚拟用户用户名与密码文件,通过 db4 工具加密为数据库后使用 vsftpd_login.db 自建的用户名与密码数据库,由loguser.txt 加密而来 vsftp_user.conf 自建的虚拟用户配置文件家目录,在该目录下以用户名命名的文件为该用户的配置文件

注:表中标有自建的均需要在 /etc/vsftpd/vsftpd.conf 主配置文件中指定。

配置后效果: 匿名用户:下载功能 根目录:/srv/ftp/anyone 本地用户:拥有创建、删除、上传、下载功能 根目录:/srv/ftp 虚拟用户:拥有上传、下载功能 (管理员拥有删除功能) 根目录:/srv/ftp/myftp

匿名用户只可访问特定的目录,仅有下载的功能。 本地用户可以访问 /srv/ftp 下所有目录,并且具有所有权限(上传、下载、修改、删除等) 虚拟用户可以上传,但是不可以修改文件(管理员可以)

2.1、全局基本配置

vsftpd 的配置文件用 “#” 注释,并且一定要注意,不要有多余的空格。修改前记得备份。

/etc/vsftpd/vsftpd.conf 文件

# ************* 全局配置 ******************************************** # 是否允许监听。 # 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求 listen=YES # 监听 ipv6 注释掉,或者设置为 NO #listen_ipv6=NO # * 日志有关 * # 当用户进入某个目录时,会显示该目录需要注意的内容,显示的档案默认是 `.message` ,你可以使用message_file=.message 设置来修改。 dirmessage_enable=YES # 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定 xferlog_enable=YES # 启用xferlog默认保存路径 xferlog_file=/var/log/xferlog xferlog_std_format=YES # 启用双份日志。在用xferlog文件记录服务器上传下载情况的同时, # vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况 #dual_log_enable=YES #vsftpd_log_file=/var/log/vsftpd.log # * 连接有关 * # 可以更改默认值以超时空闲会话 #idle_session_timeout=600 # 可以更改数据连接超时的默认值 #data_connection_timeout=120 # 启用此功能服务器能够识别异步ABOR请求 #async_abor_enable=YES # linux中一个安全机制[TCP_wrappers防火墙],一定程度上限制某种服务的访问权限,达到了保护系统的目的 tcp_wrappers=YES # * 传输有关 * # 确保PORT传输连接来自端口20 connect_from_port_20=YES #大多数FTP服务器都选择用ASCII方式传输数据,实现用ASCII方式上传和下载文件 #允许上传 ascii_upload_enable=YES #允许下载,ascii模式 ascii_download_enable=YES #只允许访问自身目录 allow_writeable_chroot=YES # * 重要设置 * #开启被动模式 pasv_enable=YES # Linux 云服务器公网 IP pasv_address=xx.xx.xx.xxx #允许最小端口分配PASV方式数据连接。你可以定义一个端口范围允许通过防火墙 pasv_min_port=40000 #允许最大端口分配PASV方式数据连接。你可以定义一个窄的端口范围允许通过防火墙 pasv_max_port=50000 # 注意;记得开启服务器的端口,21端口和min_port/max_port端口 # min_port/max_port可以参考这篇博客,也可以自己设置,比如 5000~6000也是可以的 # 附加内容,可以适当了解 # ftpusers和user_list 详解 # ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单, # user_list: # 1、userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户) # 和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置 # 2、当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用 # 当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP # 3、当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入; # 4、当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入); # 注意:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous userlist_enable=YES

上述为基本配置,经过本博主测试可用的。可以直接复制使用。此外,以上只是基础配置,在该文件中还应加入匿名用户或本地用户的相关配置。

2.2、匿名用户配置

在上述配置文件的末尾添加上如下配置即可。当然,如果不想让匿名用户登录的话,只需要一句 anonymous_enable=NO 即可。

/etc/vsftpd/vsftpd.conf 文件

# ************* 匿名用户 ******************************************** # 允许匿名用户登录 anonymous_enable=YES # 匿名用户login时不询问口令 no_anon_password=YES # 匿名用户主目录 ***设置匿名用户主目录,根据个人意愿自行调整** anon_root=/srv/ftp/anyone # 匿名用户可以上传文件 ****上传文件 NO anon_upload_enable=NO # 匿名用户可以建目录,同时在此目录下上传文件 anon_mkdir_write_enable=NO #匿名用户修改删除 ****修改、删除 anon_other_write_enable=NO #匿名上传文件所属用户名 ****每个文件需要一个属主,该用户名必须是服务器下真实存在的用户 #chown_username=usr #因为不允许上传,所以不用设置,如果允许上传可指定一个用户 # 要注意文件夹的属性,匿名帐户是其它(other)用户,要检查匿名用户登录的目录是否有读写权限 # 并且vsftpd的安全规则是不允许ftp用户对ftp根目录有可写权限,在本列中 /srv/ftp/anyone 的其他人权限需要为5(rx) # 默认情况下,匿名用户所有上传下载,所使用的用户都是ftp用户的权限 # 若要上传文件,则需要ftp用户有写的权限,若要下载,则需要ftp用户有读的权限 # 一般情况下,ftp用户对文件有读权限就对文件有下载权限了 anon_world_readable_only=NO #文件有三种权限,文件所有人,文件所有组,文件的其他人 #当他为YES时候,文件的其他人必须有读的权限才允许下载,单单所有人为ftp且有读权限是无法下载的, # 必须其他人也有读权限,才允许下载,这是为安全性的一方面考虑 #若为NO则只要ftp用户对文件有读权限即可下载

补充:目录的权限与文件的权限理解起来有些不同 目录只有读权限:可以ls 查看目录内容,不能进入,不能在其下创建子目录和文件 目录只有执行权限:不能ls 查看目录内容,可以进入目录(进入后可以用ls查看),不能在其下创建子目录和文件 目录只有写权限:啥都不可以干(因为目录对外不可见,且又不能进入,则无法提供写的权限)

以上三种基本权限功能,如果想实现类似 touch /test/1.txt这种功能就需要目录同时拥有写和执行权限。 vsftpd的安全规则是不允许ftp用户对ftp根目录有可写权限。

在如下的目录文件结构中: /srv/ftp/anyone 该目录为匿名用户的根目录,其他人权限为 rx |__test 目录:其他人权限为 r |__anyone 文件:无实际作用,文件名表示当前处于 anyone 目录下

因此,如果匿名用户登录(成功访问ftp站点),却无法进入某个文件,那么有可能是该目录没有给出执行权限(如下图所示)。只需要在服务器上给其他人添加上执行权限即可chmod o+x test。

在这里插入图片描述 在这里插入图片描述

2.3、本地用户配置

本地用户,即服务器的正常登录用户,或者说可以用 SSH 远程连接的用户。本地用户一般不怎么使用,因为你都可以登录服务器了,可以直接使用 scp、sftp等等的基于ssh的文件传输协议传输干嘛还要特地去访问ftp下载文件。并且由于本地用户可以登录服务器不方便给别人使用,一旦让其他人得到你的本地用户账号他就得到你的服务器了(😨😰)。以下是本地用户得配置。

# ************* 本地用户 ******************************************** #允许本地用户访问 local_enable=YES #允许本地用户对FTP服务器文件具有写权限,本地帐户登陆后有权删除和修改文件 write_enable=YES #本地用户上传的文件权限,掩码,777-022=755 local_umask=022 #本地用户根目录路径 local_root=/srv/ftp #用户不能访问上层目录,全部用户被限制在主目录 chroot_local_user=YES #是否启动限制用户的名单, chroot_list_enable=YES #指定列外用户列表文件,列表中的用户不被锁定在主目录 #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值 chroot_list_file=/etc/vsftpd/chroot_list

本地用户登录验证文件为 /etc/pam.d/vsftpd 如果设置本地用户登录需要添加:

pam_service_name=vsftpd 3、虚拟用户配置

因为本地用户不安全,匿名用户也不安全,所以我们就设置一个虚拟用户吧。该用户是虚拟出的一个用户,所以不能用来登录服务器,但是可以登录ftp站点下载和上传文件。

配置虚拟用户登录需要有一个条件和三种文件: 一个条件:在 vsftpd.conf 主配置文件中 guest_enable=YES 开启虚拟用户(并指定配置文件目录) 三种文件:

pam认证文件:PAM使用配置/etc/pam.d/下的文件,来管理对程序的认证方式 虚拟用户的用户账户的数据库文件:通过一个写有用户名和密码的普通文件加密得到 各用户(虚拟用户)自己的配置文件:各用户在 虚拟用户的配置文件 的家目录下有一份各自的权限配置文件

通过在在主配置文件中开启虚拟用户登录,在登录时验证预先设定的用户名和密码,实现虚拟用户的登录。以及通过各虚拟用户的配置文件来管理虚拟用户的权限。

3.1 创建虚拟用户名单

虚拟用户名单设置,主要有以下步骤:

3.1.1添加虚拟用户名单 创建 loguser.txt (文件名随意),在文件内奇数行写入虚拟用户名,偶数行写入密码 如 1:admin 2:123456 3:usr 4:123456 (1:代表第一行,同理2:……) 3.1.2把用户名单生成数据库文件 db4.8_load -T -t hash -f /etc/vsftpd/loguser.txt /etc/vsftpd/vsftpd_login.db # db_load加密命令 -t 加密方式 -f 指定明文文件 生成密文文件格式为.db 3.1.3修改认证文件 /etc/pam.d/vsftpd

这里可以在原文件的基础上修改,也可以新建一个文件。我选择……当然是全都要了。 事实上:下面的登录文件在二选一即可。

# 以下二者选其一 vsftpd.vu # 虚拟用户与本地用户不共存,只验证虚拟用户 vsftpd # 虚拟用户与本地用户共存,都可以登录

1》新建 vim /etc/pam.d/vsftpd.vu 用作虚拟用户验证 写入以下两行内容:

# 注释不要写 # pam_userdb.so= 后面跟着你的登录数据库文件,不写后缀 account required pam_userdb.so db=/etc/vsftpd/vsftpd_login auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login

2》原文件 vim /etc/pam.d/vsftpd: 在 /etc/pam.d/vsftpd 中已经有一些内容了,不要动它们,在第二行写下两行内容 注意区别,将配置虚拟用户添加两行中的required改为sufficient

#%PAM-1.0 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth

上述两个文件的作用简单来说一下: 如果使用第一个文件,即需要在 vsftpd.conf 主配置文件中写上 pam_service_name=vsftpd.vu 此时,不管主配置文件是否允许本地用户登录,本地用户都无法登录。 而,第二个文件,使用pam_service_name=vsftpd 可同时让本地用户和虚拟用户登录。

准备工作已经做完,事实上 loguser.txt 已经没有用了,可以删掉。

3.2 在vsftpd.conf 中配置虚拟用户

因为虚拟用户没有实体,所以需要给虚拟用户指定一个本地用户实体(将虚拟用户映射到指定的系统账号),在这里我指定为usr用户guest_username=usr 。 另外,根据在 vsftpd.conf 的配置指定一个目录放置虚拟用户的权限配置文件 user_config_dir=/etc/vsftpd/vsftpd_user_conf。

具体设置如下:

# ************* 虚拟用户 ******************************************** #开启虚拟用户的功能 guest_enable=YES #指定虚拟用户的宿主用户 guest_username=usr #加载pam哪个模块,我设置的加密认证是/etc/pam.d/vsftpd.vu sufficient pam_service_name=vsftpd # 仅使用虚拟用户和匿名用户,取消本地用户验证 #pam_service_name=vsftpd.vu #指定虚拟用户权限配置文件目录 user_config_dir=/etc/vsftpd/vsftpd_user_conf #vsftpd的服务日志保存路径,默认不存在 xferlog_file=/var/log/vsftpd.log 3.3 配置虚拟用户权限

在 /etc/vsftpd/ 下传创建目录 mkdir vsftpd_user_conf ,进入该目录,创建以虚拟用户名为文件名的文件,写入以下配置。

注意:有几个虚拟用户就配置几个文件,如本例中,主要有 usr、admin 两个文件。

write_enable=YES #他为YES时候,文件的其他人必须有读的权限才允许下载 anon_world_readable_only=NO # 上传权限 anon_upload_enable=YES # 新建目录权限 anon_mkdir_write_enable=YES # 修改目录及文件的权限 ---usr设置为NO不允许更改文件,admin设置为YES可以更改文件 anon_other_write_enable=YES 该用户的根目录 ---可以随意设置位置 local_root=/srv/ftp 端口设置

登录阿里云(我用的是阿里云的ECS服务器😏),点击你要配置的实例服务器,找到本实例安全组,点击配置规则 在这里插入图片描述 在这里插入图片描述 开放规则,检查防火墙等是否设置好。

5、重启服务器并简单测试

重启 ftp 服务器:

systemctl restart vsftpd

登录测试:

打开 Windows 自带的文件管理器,输入 ftp://xxx.xxx.xxx.xxx 回车

此时进入的是匿名用户

右键-》登录 输入用户名和密码 登录相应的账号

在这里插入图片描述 经测试,功能满足要求(偷个懒就不放截图了😂😂),以上就是配置 ftp 服务器全过程。

补一张手机端(安卓)ES文件浏览器的效果图

在这里插入图片描述

推荐客户端: windows 客户端 :文件管理器或者浏览器,专业一点的有WinSCP、MobaXterm等。 安卓客户端:ES文件浏览器、x-plore、mt 文件管理器



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有