天天看點

如何在 Ubuntu 下安裝和配置 FTP 伺服器

ftp(檔案傳輸協定)是一個較老且最常用的标準網絡協定,用于在兩台計算機之間通過網絡上傳/下載下傳檔案。然而, ftp 最初的時候并不安全,因為它僅通過使用者憑證(使用者名和密碼)傳輸資料,沒有進行加密。

在這個教程中,我将向你們展示如何在 ubuntu 中安裝、配置并保護 ftp 伺服器(vsftpd 的全稱是 “very secure ftp deamon”),進而擁有強大的安全性,能夠防範 ftp 漏洞。

<a target="_blank"></a>

1、首先,我們需要更新系統安裝包清單,然後像下面這樣安裝 vsftpd 二進制包:

<code>$ sudo apt-get update</code>

<code>$ sudo apt-get install vsftpd</code>

2、一旦安裝完成,初始情況下服務被禁用。是以,我們需要手動開啟服務,同時,啟動它使得在下次開機時能夠自動開啟服務:

<code>------------- on systemd -------------</code>

<code># systemctl start vsftpd</code>

<code># systemctl enable vsftpd</code>

<code>------------- on sysvinit -------------</code>

<code># service vsftpd start</code>

<code># chkconfig --level 35 vsftpd on</code>

<code>$ sudo ufw allow 20/tcp</code>

<code>$ sudo ufw allow 21/tcp</code>

<code>$ sudo ufw status</code>

4、讓我們進行一些配置來設定和保護 ftp 伺服器。首先,我們像下面這樣建立一個原始配置檔案<code>/etc/vsftpd/vsftpd.conf</code> 的備份檔案:

<code>$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig</code>

接下來,打開 vsftpd 配置檔案。

<code>$ sudo vi /etc/vsftpd.conf</code>

<code>or</code>

<code>$ sudo nano /etc/vsftpd.conf</code>

把下面的這些選項添加/改成所展示的值:

<code>anonymous_enable=no # 關閉匿名登入</code>

<code>local_enable=yes # 允許本地使用者登入</code>

<code>write_enable=yes # 啟用可以修改檔案的 ftp 指令</code>

<code>local_umask=022 # 本地使用者建立檔案的 umask 值</code>

<code>dirmessage_enable=yes # 當使用者第一次進入新目錄時顯示提示消息</code>

<code>xferlog_enable=yes # 一個存有詳細的上傳和下載下傳資訊的日志檔案</code>

<code>connect_from_port_20=yes # 在伺服器上針對 port 類型的連接配接使用端口 20(ftp 資料)</code>

<code>xferlog_std_format=yes # 保持标準日志檔案格式</code>

<code>listen=no # 阻止 vsftpd 在獨立模式下運作</code>

<code>listen_ipv6=yes # vsftpd 将監聽 ipv6 而不是 ipv4,你可以根據你的網絡情況設定</code>

<code>pam_service_name=vsftpd # vsftpd 将使用的 pam 驗證裝置的名字</code>

<code>userlist_enable=yes # 允許 vsftpd 加載使用者名字清單</code>

<code>tcp_wrappers=yes # 打開 tcp 包裝器</code>

5、現在,配置 vsftpd ,基于使用者清單檔案 <code>/etc/vsftpd.userlist</code> 來允許或拒絕使用者通路 ftp。

注意,在預設情況下,如果通過 <code>userlist_enable=yes</code> 啟用了使用者清單,且設定 <code>userlist_deny=yes</code> 時,那麼,使用者清單檔案 <code>/etc/vsftpd.userlist</code> 中的使用者是不能登入通路的。

但是,選項 <code>userlist_deny=no</code> 則反轉了預設設定,這種情況下隻有使用者名被明确列出在 <code>/etc/vsftpd.userlist</code> 中的使用者才允許登入到 ftp 伺服器。

<code>userlist_enable=yes # vsftpd 将會從所給的使用者清單檔案中加載使用者名字清單</code>

<code>userlist_file=/etc/vsftpd.userlist # 存儲使用者名字的清單</code>

<code>userlist_deny=no</code>

重要的是,當使用者登入 ftp 伺服器以後,他們将進入 chrooted 環境,即當在 ftp 會話時,其 root 目錄将是其 home 目錄。

接下來,我們來看一看兩種可能的途徑來設定 chrooted(本地 root)目錄,正如下面所展示的。

<code>chroot_local_user=yes</code>

<code>allow_writeable_chroot=yes</code>

選項 <code>chroot_local_user=yes</code> 意味着本地使用者将進入 chroot 環境,當登入以後預設情況下是其 home 目錄。

并且我們要知道,預設情況下,出于安全原因,vsftpd 不允許 chroot 目錄具有可寫權限。然而,我們可以通過選項 <code>allow_writeable_chroot=yes</code> 來改變這個設定

儲存檔案然後關閉。現在我們需要重新開機 vsftpd 服務進而使上面的這些更改生效:

<code># systemctl restart vsftpd</code>

<code># service vsftpd restart</code>

7、現在,我們通過使用下面展示的 useradd 指令建立一個 ftp 使用者來測試 ftp 伺服器:

<code>$ sudo useradd -m -c "aaron kili, contributor" -s /bin/bash aaronkilik</code>

<code>$ sudo passwd aaronkilik</code>

<code>$ echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist</code>

<code>$ cat /etc/vsftpd.userlist</code>

8、現在,是時候來測試上面的配置是否具有我們想要的功能了。我們首先測試匿名登入;我們可以從下面的輸出中很清楚的看到,在這個 ftp 伺服器中是不允許匿名登入的:

<code># ftp 192.168.56.102</code>

<code>connected to 192.168.56.102 (192.168.56.102).</code>

<code>220 welcome to tecmint.com ftp service.</code>

<code>name (192.168.56.102:aaronkilik) : anonymous</code>

<code>530 permission denied.</code>

<code>login failed.</code>

<code>ftp&gt; bye</code>

<code>221 goodbye.</code>

9、接下來,我們将測試,如果使用者的名字沒有在檔案 <code>/etc/vsftpd.userlist</code> 中,是否能夠登入。從下面的輸出中,我們看到,這是不可以的:

<code>name (192.168.56.10:root) : user1</code>

10、現在,我們将進行最後一項測試,來确定列在檔案 <code>/etc/vsftpd.userlist</code> 檔案中的使用者登入以後,是否實際處于 home 目錄。從下面的輸出中可知,是這樣的:

<code>name (192.168.56.102:aaronkilik) : aaronkilik</code>

<code>331 please specify the password.</code>

<code>password:</code>

<code>230 login successful.</code>

<code>remote system type is unix.</code>

<code>using binary mode to transfer files.</code>

<code>ftp&gt; ls</code>

如何在 Ubuntu 下安裝和配置 FTP 伺服器

在 ubuntu 中确認 ftp 登入

警告:設定選項 <code>allow_writeable_chroot=yes</code> 是很危險的,特别是如果使用者具有上傳權限,或者可以 shell 通路的時候,很可能會出現安全問題。隻有當你确切的知道你在做什麼的時候,才可以使用這個選項。

我們需要注意,這些安全問題不僅會影響到 vsftpd,也會影響讓本地使用者進入 chroot 環境的 ftp daemon。

因為這些原因,在下一步中,我将闡述一個更安全的方法,來幫助使用者設定一個非可寫本地 root 目錄。

11、現在,再次打開 vsftpd 配置檔案。

然後像下面這樣用 <code>#</code> 把不安全選項注釋了:

<code>#allow_writeable_chroot=yes</code>

接下來,為使用者建立一個替代的本地 root 目錄(aaronkilik,你的可能和這不一樣),然後設定目錄權限,取消其他所有使用者對此目錄的寫入權限:

<code>$ sudo mkdir /home/aaronkilik/ftp</code>

<code>$ sudo chown nobody:nogroup /home/aaronkilik/ftp</code>

<code>$ sudo chmod a-w /home/aaronkilik/ftp</code>

12、然後,在本地 root 目錄下建立一個具有合适權限的目錄,使用者将在這兒存儲檔案:

<code>$ sudo mkdir /home/aaronkilik/ftp/files</code>

<code>$ sudo chown -r aaronkilk:aaronkilik /home/aaronkilik/ftp/files</code>

<code>$ sudo chmod -r 0770 /home/aaronkilik/ftp/files/</code>

之後,将 vsftpd 配置檔案中的下面這些選項添加/修改為相應的值:

<code>user_sub_token=$user # 在本地 root 目錄中插入使用者名</code>

<code>local_root=/home/$user/ftp # 定義各個使用者的本地 root 目錄</code>

儲存檔案并關閉。然後重新開機 vsftpd 服務來使上面的設定生效:

13、現在,讓我們來最後檢查一下,確定使用者的本地 root 目錄是我們在他的 home 目錄中建立的 ftp 目錄。

<code>name (192.168.56.10:aaronkilik) : aaronkilik</code>

如何在 Ubuntu 下安裝和配置 FTP 伺服器

ftp 使用者 home 目錄登入

原文釋出時間為:2017-03-17

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀