Linux 使用 vsftpd 搭建 FTP 服务器
FTP 是一种常用的文件传输协议。很多虚拟主机和服务器也都在使用 FTP 传输文件。FTP 包含服务端和客户端。服务端的主要功能就是存储文件和为客户端提供文件管理服务,客户端的主要功能就是连接到服务端管理文件。
下面简单写一下 FTP 服务端的搭建。
FTP 的服务端有很多,这里使用的是 vsftpd 。下面是 百度百科对 vsftpd 的简单介绍:
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
如果您在阅读本文或搭建 FTP 时遇到问题可以在下方的评论区留言。
安装
CentOS:
yum -y install vsftpd
如需查看 Yum 相关的教程可以访问:Linux Yum 简单使用教程 。
Ubuntu/Debian:
apt-get install vsftpd
不同版本的 Linux 只是安装方式不一样,使用方法都是一样的。
我使用的 Linux 版本是 CentOS 8。
配置
安装完成后启动 vsftpd 服务:
systemctl start vsftpd
systemctl enable vsftpd
打开 21 端口,
CentOS 7/8:
firewall-cmd --zone=public --permanent --add-port=21/tcp
开放 FTP 服务:
firewall-cmd --zone=public --permanent --add-service=ftp
重新加载防火墙:
firewall-cmd --reload
如果要查看 CentOS 6 开放端口的方法可以访问:CentOS 开放、关闭和查看端口 。
接下来就是修改配置文件。不过在修改配置文件之前可以先备份一下配置文件:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-backup
您也可以直接进入 /etc/vsftpd/
操作。
使用 VI 之类的编辑器打开 /etc/vsftpd/vsftpd.conf
:
vi /etc/vsftpd/vsftpd.conf
关于 VI 编辑器的使用可以看:Linux VI 编辑器简单使用教程 。
下面是 vsftpd.conf
的一些配置说明,您可以根据需要更改配置项:
anonymous_enable=NO
:禁用匿名登录。local_enable=YES
:允许本地登录。write_enable=YES
:启用更改文件系统的FTP命令。local_umask=022
:本地用户创建文件的权限值。dirmessage_enable=YES
:在用户首次进入新目录时启用消息显示。xferlog_enable=YES
:把操作记录写入到日志文件。connect_from_port_20=YES
:使用 20 端口传输。xferlog_std_format=YES
:保持标准日志文件格式。listen=NO
:防止 vsftpd 在独立模式下运行。listen_ipv6=YES
使用 IPv6,如果没有 IPv6 可以设置为NO
。pam_service_name=vsftpd
:PAM 服务的名称。userlist_enable=YES
:启用 vsftpd 加载用户名列表。tcp_wrappers=YES
:使用 tcp_wrappers 限制访问。chroot_local_user=YES
:用户列表文件中的用户是否可以切换到上级目录。
更改完成后保存,然后重启 vsftpd 服务:
systemctl restart vsftpd
用户配置
vsftpd 的用户可以分为:匿名用户、系统用户、虚拟用户。
匿名用户
匿名用户就是不需要用户名和密码,在启动 vsftpd 服务后直接使用 IP + 端口号 就能登录。匿名用户比较适合用于公开的文件分享,只需要在浏览器或资源管理器的地址栏输入:IP:21
就能直接访问文件。
匿名用户的文件目录是 /var/ftp/pub
,在默认情况下匿名用户只能访问和下载文件,不能创建和修改文件。
如果要允许匿名用户上传文件可以在 vsftpd 的配置文件,也就是 /etc/vsftpd/vsftpd.conf
设置 anon_upload_enable=YES
如果前面有 #
的就删除 #
。
如果要禁止匿名用户登录可以在配置文件中设置 anonymous_enable=NO
。
系统用户
系统用户就是直接使用 Linux 的用户登录,用户名和密码就是 Linux 的用户名和密码。
创建用户:
useradd userName
其中的 userName
就是用户名。
给新创建的用户设置密码:
passwd userName
其中的 userName
就是要设置密码的用户,回车后需要输入两次密码。
用 VI 之类的编辑器打开 /etc/vsftpd/user_list
:
vi /etc/vsftpd/user_list
把创建的新用户的用户名添加到最后一行,然后保存。
现在就可以使用刚创建的用户名和密码登录 FTP 服务器了。登录后的 FTP 目录就是当前用户的目录,比如我创建了一个名为 mark
的目录,那我的目录就是 /home/mark
。
虚拟用户
虚拟用户就是在 vsftpd 中配置用户,然后把配置的 vsftpd 用户映射到 Linux 的系统用户。
下面创建一个 www 用户作为虚拟用户的宿主用户:
useradd www
打开 vsftpd 配置文件 /etc/vsftpd/vsftpd.conf
,添加下面几行配置:
guest_enable=YES
guest_username=www
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vu
上面的配置信息在默认的 vsftpd 配置文件中是没有的,需要手动添加。
下面是配置信息说明:
guest_enable
:启用虚拟用户功能。guest_username
:设置虚拟用户的宿主用户,上面设置的就是刚创建的 www 用户。virtual_use_local_privs
:设置虚拟用户的权限和宿主用户一致。user_config_dir
:存放虚拟用户的配置文件的位置,上面设置的是/etc/vsftpd/vu
。
启用虚拟用户,listen
也需要设置为 YES
,否则启动 FTP 服务时可能会出现错误。
接下来就是配置虚拟用户的用户名和密码,我下面会创建一个 /home/vu-cfg
来存放虚拟用户的用户名和密码:
touch /home/vu-cfg
这个存放虚拟用户的文件对命名和位置没有要求,只要你能找到就可以。
用 vi 之类的编辑器打开 /home/vu-cfg
添加用户名和密码:
user1
123456
user2
123456
用户名和密码的配置文件格式是一行用户名、一行密码,基数行为用户名、偶数行为密码。上面配置了两个虚拟用户分别是 user1
和 user2
,两个用户的密码都是一样的。最后需要留一行空行,否则生成数据文件的时候可能会报错。
生成用户数据文件:
db_load -T -t hash -f /home/vu-cfg /etc/vsftpd/vu-cfg.db
上面使用 /home/vu-cfg
生成了一个数据文件,数据文件存放在 /etc/vsftpd/vu-cfg.db
。数据文件需要用 db
后缀。
以后如果需要增加或删除虚拟用户,可以更改 /home/vu-cfg
,更改完成后也需要重新生成数据文件。
配置 pam 文件,vsftpd 的 pam 文件默认在 /etc/pam.d/vsftpd
。
在配置之前可以先备份一下:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd-backup
用 vi 之类的编辑器打开 /etc/pam.d/vsftpd
,删除默认的内容,加入下面的内容:
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vu-cfg
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vu-cfg
其中的 db=/etc/vsftpd/vu-cfg
中的 /etc/vsftpd/vu-cfg
就是数据文件,这里的数据文件不需要加 db
后缀。
接下来配置单独的虚拟用户,在 vsftpd.conf
中设置的虚拟用户配置文件的存放位置是 /etc/vsftpd/vu
。
如果设置的目录不存在的话可以创建一个:
mkdir /etc/vsftpd/vu
创建虚拟用户配置文件:
touch /etc/vsftpd/vu/user1
虚拟用户配置文件的文件名需要和虚拟用户名相同,例如我上面配置的虚拟用户名是 user1
和 user2
,我的虚拟用户的配置文件的文件名也需要是 user1
和 user2
。
在虚拟用户的配置文件中加入:
local_root=/home/www/user1
上面配置 user1
用户的目录为 /home/www/user1
。
不同的虚拟用户可以配置不同的目录,虚拟用户的目录需要在宿主用户目录之下。例如我上面设置的宿主用户是 www,宿主用户目录是 home/www
,虚拟用户目录就需要在 home/www
之下。
虚拟用户目录不是必须的,如果不配置的话,虚拟用户目录就是宿主用户目录。
上面和虚拟用户有关的全部配置完成后重启 vsftpd:
systemctl restart vsftpd
如果配置没问题的话,重启后就可以用 FTP 工具连接使用了。
相关文章:
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/877/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。