RHCSA 系列(九): 安裝、配置及加固一個 Web 和 FTP 伺服器
RHCSA: 安裝,配置及加固 Apache 和 FTP 伺服器 – Part 9
在這篇文章中,我們將解釋如何在 RHEL 7 中安裝、配置和加固 web 和 FTP 伺服器。
安裝 Apache 和 FTP 伺服器
在本指導中,我們將使用一個靜態 IP 地址為 192.168.0.18/24 的 RHEL 7 伺服器。為了安裝 Apache 和 VSFTPD,運行下面的命令:
# yum update && yum install httpd vsftpd
當安裝完成後,這兩個服務在開始時是默認被禁用的,所以我們需要暫時手動開啟它們並讓它們在下一次啟動時自動地開啟它們:
# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd
另外,我們必須打開 80 和 21 埠,它們分別是 web 和 ftp 守護進程監聽的埠,為的是允許從外面訪問這些服務:
# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload
為了確認 web 服務工作正常,打開你的瀏覽器並輸入伺服器的 IP,則你應該可以看到如下的測試頁面:
確認 Apache Web 伺服器
對於 ftp 伺服器,在確保它如期望中的那樣工作之前,我們必須進一步地配置它,我們將在幾分鐘後來做這件事。
配置並加固 Apache Web 伺服器
Apache 的主要配置文件位於 /etc/httpd/conf/httpd.conf
中,但它可能依賴 /etc/httpd/conf.d
中的其他文件。
儘管默認的配置對於大多數的情形都夠用了,但熟悉在 官方文檔 中介紹的所有可用選項是一個不錯的主意。
同往常一樣,在編輯主配置文件前先做一個備份:
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)
然後用你鍾愛的文本編輯器打開它,並查找下面這些變數:
ServerRoot
: 伺服器的配置,錯誤和日誌文件保存的目錄。Listen
: 通知 Apache 去監聽特定的 IP 地址或埠。Include
: 允許包含其他配置文件,要包含的文件必須存在,否則,伺服器將會失敗。它恰好與 IncludeOptional 相反,假如特定的配置文件不存在,它將靜默地忽略掉它們。User
和Group
: 運行 httpd 服務的用戶/組的名稱。DocumentRoot
: Apache 為你的文檔所服務的目錄。默認情況下,所有的請求將在這個目錄中被獲取,但符號鏈接和別名可能會被用於指向其他位置。ServerName
: 這個指令將設定用於識別它自身的主機名(或 IP 地址)和埠。
安全措施的第一步將包含創建一個特定的用戶和組(如 tecmint/tecmint)來運行 web 伺服器,以及更改默認的埠為一個更高的埠(在這個例子中為 9000) (LCTT 譯註:如果你的 Web 伺服器對外公開提供服務,則不建議修改為非默認埠。):
ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000
你可以使用下面的命令來測試配置文件:
# apachectl configtest
假如一切 OK,接著重啟 web 伺服器。
# systemctl restart httpd
並別忘了在防火牆中開啟新的埠(並禁用舊的埠):
# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload
請注意,由於 SELinux 策略,你只能給給 web 伺服器使用如下命令所返回的埠。
# semanage port -l | grep -w '^http_port_t'
假如你想讓 httpd 服務使用另一個埠(如 TCP 埠 8100),你必須將它加到 SELinux 的埠上下文:
# semanage port -a -t http_port_t -p tcp 8100
添加 Apache 埠到 SELinux 策略
為了進一步加固你安裝的 Apache,請遵循以下步驟:
- 運行 Apache 的用戶不應該擁有訪問 shell 的能力:
# usermod -s /sbin/nologin tecmint
- 禁用目錄列表功能,這是為了阻止瀏覽器展示一個未包含 index.html 文件的目錄里的內容。
編輯 /etc/httpd/conf/httpd.conf
(以及虛擬主機的配置文件,假如有的話),並確保出現在頂層的和Directory 塊中的 Options 指令都被設置為 None:
Options None
- 在 HTTP 響應中隱藏有關 web 伺服器和操作系統的信息。像下面這樣編輯文件
/etc/httpd/conf/httpd.conf
:
ServerTokens Prod
ServerSignature Off
現在,你已經做好了從 /var/www/html
目錄開始服務內容的準備了。
配置並加固 FTP 伺服器
和 Apache 的情形類似, Vsftpd 的主配置文件 /etc/vsftpd/vsftpd.conf
帶有詳細的注釋,且雖然對於大多數的應用實例,默認的配置應該足夠了,但為了更有效率地操作 ftp 伺服器,你應該開始熟悉相關的文檔和 man 頁 man vsftpd.conf
(對於這點,再多的強調也不為過!)。
在我們的示例中,使用了這些指令:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
通過使用 chroot_local_user=YES
,(默認情況下)本地用戶在登錄之後,將被限制在以用戶的家目錄為 chroot 監獄的環境中。這意味著本地用戶將不能訪問除其家目錄之外的任何文件。
最後,為了讓 ftp 能夠在用戶的家目錄中讀取文件,設置如下的 SELinux 布爾值:
# setsebool -P ftp_home_dir on
現在,你可以使用一個客戶端例如 Filezilla 來連接一個 ftp 伺服器:
查看 FTP 連接
注意, /var/log/xferlog
日誌將會記錄下載和上傳的情況,這與上圖的目錄列表一致:
監視 FTP 的下載和上傳情況
另外請參考: 在 Linux 系統中使用 Trickle 來限制應用使用的 FTP 網路帶寬
總結
在本教程中,我們解釋了如何設置 web 和 ftp 伺服器。由於這個主題的廣泛性,涵蓋這些話題的所有方面是不可能的(如虛擬主機)。因此,我推薦你也閱讀這個網站中有關 Apache 的其他卓越的文章。
via: http://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/
作者:Gabriel Cánepa 譯者:FSSlc 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive