ubuntu---ftp服务器

原连接:https://help.ubuntu.com/lts/serverguide/ftp-server.htmlhtml

FTP 服务器

FTP, File Transfer Protocol, 文件传输协议是一种用于在计算机之间下载文件的 TCP 协议。之前 FTP 协议 也用于上传,但因为该协议不使用加密,明文的用户凭证和数据很容易被截获。若是想要找一种能够安全上传下载文件的方式,能够参阅 远程管理 中的 OpenSSH 部分。shell

FTP 以 客户端/服务端 模式运做。服务端组件被称为 FTP 守护进程(FTP daemon),它会持续监听来自客户端的FTP请求。在收到请求时,它会验证登陆并设置链接。在会话期间,它会执行FTP客户端发送的任何命令。ubuntu

能够设置两种 FTP 服务器的访问方式:安全

  1. 匿名
  2. 认证

在匿名模式下,客户端可使用名为 anonymous ftp 的默认帐户访问FTP服务器,使用邮件地址做为密码。在认证模式下,用户必须有帐户和密码。认证模式实际很不安全(凭证和数据明文传输),除非状况特殊,不然不该该使用。若是想要安全传输文件,能够参阅 OpenSSH-Server 中的 SFTP。用户对 FTP 服务器目录和文件的访问权限取决于登陆时的账户拥有的权限。一般状况下,FTP 守护进程将隐藏 FTP 服务器的根目录,转而使用 FTP 主目录。这样能够在远程会话中隐藏文件系统的其他部分。bash

vsftpd - FTP 服务器安装

vsftpd 是 Ubuntu 中经常使用的 FTP 守护进程,很容易安装、设置和维护。要安装 vsftpd,能够运行如下命令:服务器

sudo apt install vsftpd

匿名 FTP 配置

默认状况下,vsftpd 配置为不容许匿名下载。若是要启用匿名下载,能够编辑 /etc/vsftpd.confionic

anonymous_enable=Yes

在 vsftpd 安装过程当中,会建立一个名为 ftp 的用户,该用户的主目录为 /srv/ftp,这是默认的 FTP 目录。
若是要修改默认 FTP 目录,好比说改为 /srv/files/ftp,只须要建立这个目录并更改 ftp 用户的主目录:ide

sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp ftp

修改以后重启 vsftpd 使配置生效:网站

sudo systemctl restart vsftpd.service

如今,就能够把想要分享的任何文件或文件夹复制到 ftp 用户的主目录下,小伙伴们就能够经过匿名 FTP 访问了。ui

认证 FTP 配置

默认状况下,vsftpd 配置为用户通过身份验证才能够下载文件。若是但愿用户可以上传文件,能够编辑 /etc/vsftpd.conf

write_enable=YES

须要重启 vsftpd 使配置生效:

sudo systemctl restart vsftpd.service

如今,当用户登陆到 FTP 时,就能够在他们的主目录中作下载、上传、建立目录等操做了。
默认状况下,vsftpd 不容许匿名用户将文件上传到 FTP 服务器。要修改该设置,应取消注释配置文件中的如下行,并从新启动vsftpd:

anon_upload_enable=YES

容许匿名 FTP 上传会有很大的安全风险。若是服务器能够直接从 Internet 访问,最好不要启用匿名上传。

配置文件包含不少配置参数。每一个参数的相关信息在配置文件中都有说明。也能够查询 man page,man 5 vsftpd.conf,了解每一个参数的详细信息。

安全 FTP

/etc/vsftpd.conf 配置文件中有一些选项可让 vsftpd 更安全。例如,能够经过取消如下行的注释来限制用户只能访问主目录:

chroot_local_user=YES

还能够限制特定用户列表只能访问其主目录:

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

取消上述两行的注释后,建立一个 /etc/vsftpd.chroot_list 文件,每行写一个用户名,而后从新启动 vsftpd:

sudo systemctl restart vsftpd.service

此外, /etc/ftpusers文件能够记录不容许访问 FTP 的用户列表。默认列表包括 rootdaemonnobody 等。要禁用其余用户的 FTP 访问权限,只需将它们添加到列表中。

FTP 也可使用 FTPS 进行加密。与 SFTP 不一样,FTPS 是基于安全套接字层 (SSL,Secure Socket Layer)的 FTP。SFTP 所指的 FTP 像一个创建在加密SSH链接上的会话。一个主要区别是 SFTP 的用户须要在系统上具备一个shell账户,而不是 nologin shell。向全部用户提供 shell 可能不是某些环境(如共享 Web 主机)的理想选择。不过,仍是能够将此类账户限制为仅 SFTP 并禁用 shell 交互的,有关详细信息,能够参阅 OpenSSH-Server。
要配置FTPS,能够编辑 /etc/vsftpd.conf,在末尾添加:

ssl_enable=Yes

还须要添加证书和密钥相关的选项:

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

默认状况下,这些选项会被设置为 ssl-cert 包提供的证书和密钥。在生产环境中,这些证书应替换为为特定主机生成的证书和密钥。有关证书的详细信息,能够参阅 证书
如今从新启动 vsftpd,非匿名用户将被强制使用 FTPS:

sudo systemctl restart vsftpd.service

为了容许具备 /usr/sbin/nologin shell 的用户访问 FTP,但不容许访问 shell,能够编辑 /etc/shells 添加 nologin shell:

# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/sbin/nologin

这是必需的,由于默认状况下,vsftpd 使用 PAM 进行身份验证,而且 /etc/pam.d/vsftpd 配置文件包含:

auth    required        pam_shells.so

shells PAM 模块会限制对 /etc/shell 文件中列出的 shell 的访问。

大多数流行的 FTP 客户端能够配置为使用 FTPS 进行链接。lftp命令行 FTP 客户端也可以使用 FTPS。

引用

  1. 更多详细信息,能够参阅 vsftpd 网站
  2. 了解更详细的 /etc/vsftpd.conf 选项,能够参阅 vsftpd.conf man page
相关文章
相关标签/搜索