近些年,网盘和 P2P 的发展让 FTP 这个古董级的文件传输与共享协议逐渐淡出的人们的视野。但是,某些地区无法使用 Dropbox 服务,能用的网盘又不够安全,使用 P2P 也可能遭遇收费与恶意应用的风险。这时,FTP 这个老古董的价值就得以体现。今天,我们来谈一谈如何在 Linux 上部署 FTP 服务器,以及如何使用 FTP 客户端.
先解答一个问题:为什么要在 Linux 上部署 FTP 服务器?Windows 的机器不是一样可用么?这个问题不幸牵扯出了开源软件的一大丑闻。Windows 上的 FTP 服务器软件 数量并不少,但是除了 FileZilla 之外,其他的软件要么是收费的,要么在某些方面有明显的欠缺。因此,开源的 FileZilla 就轻松成为了 Windows FTP 服务器的领头羊。但它并没有珍惜来之不易的成果,而是在新版本中加入了 恶意代码,终于让广大 Windows 用户失去了“最后一个选项”。为了避免让读者的电脑感染病毒,本文仅介绍在 Linux 系统中部署 FTP 服务器的方法。
安装与配置
Linux 上搭建 FTP 服务器可选的软件包有多种,其中最知名的当属 vsftpd
. 这名称采用了典型的 Red Hat 传统的命名法,结尾的字母 d 意为 daemon, 表明它是一个后台程序。安装 vsftpd
的方法很简单,Debian/Ubuntu 系统请执行
1 | sudo apt-get install vsftpd |
RHEL/CentOS/OpenSUSE 系统如法炮制
1 | sudo yum install vsftpd |
与绝大多数后台程序一样,刚安装好的 vsftpd 服务需要经过合理的配置才能使用。它的配置文件并不难找,在 Debian/Ubuntu 下通常是 /etc/vsftpd.conf
, 而 RHEL/CentOS 下应当是 /etc/vsftpd/vsftpd.conf
.
请留意下面几处设置:
- 如果你不希望任何人都可以登录 FTP 服务器,就应该取消 anonymous 登录权限。找到
anonymous_enable
这一行,设为NO
. - 如果你期望登录 FTP 服务器的用户具有上传文件的功能,应添加写权限,把
write_enable
设为YES
. - 如果想通过证书而不是密码登录,需要设定
rsa_cert_file
和rsa_private_key_file
. - 修改
ftpd_banner
的值,当用户通过终端登录时,会显示指定的信息。
都处理完之后,重启 FTP 服务,就可以正常使用了:
1 | sudo systemctl restart vsftpd |
创建 FTP 用户
现在,你已经启动了一个正常运行的 FTP 服务器。凭借 Linux 用户名和密码登录,就可以使用 FTP 功能了。与 SSH 登录远程服务器一样,登录 FTP 之后你会来到你的 home 目录。但是,这可能不是你所期望的,因为你必须告诉每个使用者你的 Linux 密码,而且你的所有文件都会暴露在光天化日之下!
如果一个团队需要在局域网使用公共的 FTP 服务,更好的解决办法是为 FTP 服务新建单独的 Linux 用户。
首先,我们要指定用户名和密码
1 | sudo useradd USERNAME |
随后,把用户加到 FTP 组中
1 | sudo usermod -a -G ftp USERNAME |
现在,团队就可以通过这个公共用户使用 FTP 服务了。
FTP 客户端的基本操作
有了服务器,我们还需要客户端与之交互。在 Linux 系统上,默认的客户端通常是 sftp
. 它是早先 FTP 客户端的升级版,使用 SSH 加密连接,解决了 FTP 明文传输带来的各种问题。
登录 FTP 服务器的过程与登录远程终端的过程如出一辙
1 | sftp USERNAME@YOUR_SERVER_ADDRESS |
验证成功后,提示符会变成 sftp>
, 此后就可以操作远程服务器了。
基本的文件操作,例如 cd
, ls
, rm
, pwd
, mkdir
, rmdir
, chown
, chmod
等等都是支持的,只不过他们是在服务器上运行而已。如果想在本地文件系统运行这些指令,需要在前面加上字母 l, 也就是变成了 lcd
, lls
...
将本地文件上传至服务器,使用 put
, 类似地,将服务器上的文件下载到本地,要用到 get
.
显示帮助的指令我不说大家也知道。想要退出登录,输入 exit
和 quit
都行,唯独 logout
不能用。
如果你使用 Windows 系统,那就不需要知道上述指令了。WinSCP 是一个无比强大的图形界面 FTP 客户端,有它就够了。