完全指南:如何在 CentOS 7 中安裝、配置和安全加固 FTP 服務
FTP(文件傳輸協議)是一種用於通過網路在伺服器和客戶端之間傳輸文件的傳統並廣泛使用的標準工具,特別是在不需要身份驗證的情況下(允許匿名用戶連接到伺服器)。我們必須明白,默認情況下 FTP 是不安全的,因為它不加密傳輸用戶憑據和數據。
在本指南中,我們將介紹在 CentOS/RHEL7 和 Fedora 發行版中安裝、配置和保護 FTP 伺服器( VSFTPD 代表 「Very Secure FTP Daemon」)的步驟。
請注意,本指南中的所有命令將以 root 身份運行,如果你不使用 root 帳戶操作伺服器,請使用 sudo命令 獲取 root 許可權。
步驟 1:安裝 FTP 伺服器
1、 安裝 vsftpd 伺服器很直接,只要在終端運行下面的命令。
# yum install vsftpd
2、 安裝完成後,服務先是被禁用的,因此我們需要手動啟動,並設置在下次啟動時自動啟用:
# systemctl start vsftpd
# systemctl enable vsftpd
3、 接下來,為了允許從外部系統訪問 FTP 服務,我們需要打開 FTP 守護進程監聽的 21 埠:
# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload
步驟 2: 配置 FTP 伺服器
4、 現在,我們會進行一些配置來設置並加密我們的 FTP 伺服器,讓我們先備份一下原始配置文件 /etc/vsftpd/vsftpd.conf
:
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
接下來,打開上面的文件,並將下面的選項設置相關的值:
anonymous_enable=NO ### 禁用匿名登錄
local_enable=YES ### 允許本地用戶登錄
write_enable=YES ### 允許對文件系統做改動的 FTP 命令
local_umask=022 ### 本地用戶創建文件所用的 umask 值
dirmessage_enable=YES ### 當用戶首次進入一個新目錄時顯示一個消息
xferlog_enable=YES ### 用於記錄上傳、下載細節的日誌文件
connect_from_port_20=YES ### 使用埠 20 (ftp-data)用於 PORT 風格的連接
xferlog_std_format=YES ### 使用標準的日誌格式
listen=NO ### 不要讓 vsftpd 運行在獨立模式
listen_ipv6=YES ### vsftpd 將監聽 IPv6 而不是 IPv4
pam_service_name=vsftpd ### vsftpd 使用的 PAM 服務名
userlist_enable=YES ### vsftpd 支持載入用戶列表
tcp_wrappers=YES ### 使用 tcp wrappers
5、 現在基於用戶列表文件 /etc/vsftpd.userlist
來配置 FTP 來允許/拒絕用戶的訪問。
默認情況下,如果設置了 userlist_enable=YES
,當 userlist_deny
選項設置為 YES
的時候,userlist_file=/etc/vsftpd.userlist
中列出的用戶被拒絕登錄。
然而, 更改配置為 userlist_deny=NO
,意味著只有在 userlist_file=/etc/vsftpd.userlist
顯式指定的用戶才允許登錄。
userlist_enable=YES ### vsftpd 將從 userlist_file 給出的文件中載入用戶名列表
userlist_file=/etc/vsftpd.userlist ### 存儲用戶名的文件
userlist_deny=NO
這並不是全部,當用戶登錄到 FTP 伺服器時,它們會進入 chroot jail 中,這是僅作為 FTP 會話主目錄的本地根目錄。
接下來,我們將介紹如何將 FTP 用戶 chroot 到 FTP 用戶的家目錄(本地 root)中的兩種可能情況,如下所述。
6、 接下來添加下面的選項來限制 FTP 用戶到它們自己的家目錄。
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_local_user=YES
意味著用戶可以設置 chroot jail,默認是登錄後的家目錄。
同樣默認的是,出於安全原因,vsftpd 不會允許 chroot jail 目錄可寫,然而,我們可以添加 allow_writeable_chroot=YES
來覆蓋這個設置。
保存並關閉文件。
步驟 3: 用 SELinux 加密 FTP 伺服器
7、現在,讓我們設置下面的 SELinux 布爾值來允許 FTP 能讀取用戶家目錄下的文件。請注意,這原本是使用以下命令完成的:
# setsebool -P ftp_home_dir on
然而,由於這個 bug 報告:https://bugzilla.redhat.com/show_bug.cgi?id=1097775,ftp_home_dir
指令默認是禁用的。
現在,我們會使用 semanage
命令來設置 SELinux 規則來允許 FTP 讀取/寫入用戶的家目錄。
# semanage boolean -m ftpd_full_access --on
這時,我們需要重啟 vsftpd 來使目前的設置生效:
# systemctl restart vsftpd
步驟 4: 測試 FTP 伺服器
8、 現在我們會用 useradd 命令創建一個 FTP 用戶來測試 FTP 伺服器。
# useradd -m -c 「Ravi Saive, CEO」 -s /bin/bash ravi
# passwd ravi
之後,我們如下使用 echo 命令添加用戶 ravi 到文件 /etc/vsftpd.userlist
中:
# echo "ravi" | tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist
9、 現在是時候測試我們上面的設置是否可以工作了。讓我們使用匿名登錄測試,我們可以從下面的截圖看到匿名登錄沒有被允許。
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>
測試 FTP 匿名登錄
10、 讓我們也測試一下沒有列在 /etc/vsftpd.userlist
中的用戶是否有許可權登錄,下面截圖是沒有列入的情況:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>
FTP 用戶登錄失敗
11、 現在最後測試一下列在 /etc/vsftpd.userlist
中的用戶是否在登錄後真的進入了他/她的家目錄:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
用戶成功登錄
警告:使用 allow_writeable_chroot=YES
有一定的安全隱患,特別是用戶具有上傳許可權或 shell 訪問許可權時。
只有當你完全知道你正做什麼時才激活此選項。重要的是要注意,這些安全性影響並不是 vsftpd 特定的,它們適用於所有提供了將本地用戶置於 chroot jail 中的 FTP 守護進程。
因此,我們將在下一節中看到一種更安全的方法來設置不同的不可寫本地根目錄。
步驟 5: 配置不同的 FTP 家目錄
12、 再次打開 vsftpd 配置文件,並將下面不安全的選項注釋掉:
#allow_writeable_chroot=YES
接著為用戶(ravi
,你的可能不同)創建另外一個替代根目錄,並將所有用戶對該目錄的可寫許可權移除:
# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp
13、 接下來,在用戶存儲他/她的文件的本地根目錄下創建一個文件夾:
# mkdir /home/ravi/ftp/files
# chown ravi:ravi /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/
接著在 vsftpd 配置文件中添加/修改這些選項:
user_sub_token=$USER ### 在本地根目錄下插入用戶名
local_root=/home/$USER/ftp ### 定義任何用戶的本地根目錄
保存並關閉文件。再說一次,有新的設置後,讓我們重啟服務:
# systemctl restart vsftpd
14、 現在最後在測試一次查看用戶本地根目錄就是我們在他的家目錄創建的 FTP 目錄。
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
FTP 用戶家目錄登錄成功
就是這樣了!在本文中,我們介紹了如何在 CentOS 7 中安裝、配置以及加密的 FTP 伺服器,使用下面的評論欄給我們回復,或者分享關於這個主題的任何有用信息。
建議閱讀: 在 RHEL/CentOS 7 上安裝 ProFTPD 伺服器
在下一篇文章中,我們還將向你介紹如何在 CentOS 7 中保護使用 SSL/TLS連接的 FTP 伺服器,再此之前,請繼續關注 TecMint。
作者簡介:
Aaron Kili 是一名 Linux 和 F.O.S.S 愛好者,即將從事 Linux 系統管理員和網頁開發工作,他日前是 TecMint 技術網站的原創作者,非常喜歡使用電腦工作,堅信分享知識是一種美德。
via: http://www.tecmint.com/install-ftp-server-in-centos-7/
作者:Aaron Kili 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive