安装与使用FTP服务器

近些年,网盘和 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.

请留意下面几处设置:

  1. 如果你不希望任何人都可以登录 FTP 服务器,就应该取消 anonymous 登录权限。找到 anonymous_enable 这一行,设为 NO.
  2. 如果你期望登录 FTP 服务器的用户具有上传文件的功能,应添加写权限,把 write_enable 设为 YES.
  3. 如果想通过证书而不是密码登录,需要设定 rsa_cert_filersa_private_key_file.
  4. 修改 ftpd_banner 的值,当用户通过终端登录时,会显示指定的信息。

都处理完之后,重启 FTP 服务,就可以正常使用了:

1
sudo systemctl restart vsftpd


创建 FTP 用户

现在,你已经启动了一个正常运行的 FTP 服务器。凭借 Linux 用户名和密码登录,就可以使用 FTP 功能了。与 SSH 登录远程服务器一样,登录 FTP 之后你会来到你的 home 目录。但是,这可能不是你所期望的,因为你必须告诉每个使用者你的 Linux 密码,而且你的所有文件都会暴露在光天化日之下!

如果一个团队需要在局域网使用公共的 FTP 服务,更好的解决办法是为 FTP 服务新建单独的 Linux 用户。

首先,我们要指定用户名和密码

1
2
sudo useradd USERNAME
sudo passwd 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.

显示帮助的指令我不说大家也知道。想要退出登录,输入 exitquit 都行,唯独 logout 不能用。

如果你使用 Windows 系统,那就不需要知道上述指令了。WinSCP 是一个无比强大的图形界面 FTP 客户端,有它就够了。