2021-05-12 14:32:11
RHCSA 系列(九): 安裝、設定及加固一個 Web 和 FTP 伺服器
Web 伺服器(也被稱為 HTTP 伺服器)是在網路中將內容(最為常見的是網頁,但也支援其他型別的檔案)進行處理並傳遞給用戶端的服務。
FTP 伺服器是最為古老且最常使用的資源之一(即便到今天也是這樣),在身份認證不是必須的情況下,它可通過用戶端在一個網路存取檔案,因為 FTP 使用沒有加密的使用者名稱和密碼,所以有些情況下不需要驗證也行。
在 RHEL 7 中可用的 web 伺服器是版本號為 2.4 的 Apache HTTP 伺服器。至於 FTP 伺服器,我們將使用 Very Secure Ftp Daemon (又名 vsftpd) 來建立用 TLS 加固的連線。
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"
Listen192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot"/var/www/html"
ServerName192.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:OptionsNone
-
在 HTTP 響應中隱藏有關 web 伺服器和作業系統的資訊。像下面這樣編輯檔案
/etc/httpd/conf/httpd.conf
:ServerTokensProd
ServerSignatureOff
現在,你已經做好了從 /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 的其他卓越的文章。
Ubuntu Server 14.04 安裝Web伺服器(Linux+Apache+MySQL+PHP) http://www.linuxidc.com/Linux/2015-06/119061.htm
Linux下安裝設定PHP環境(Apache2) http://www.linuxidc.com/Linux/2015-05/118062.htm
Ubuntu 13.04 安裝 LAMPVsftpdWebminphpMyAdmin 服務及設定 http://www.linuxidc.com/Linux/2013-06/86250.htm
CentOS 5.9下編譯安裝LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm
RedHat 5.4下Web伺服器架構之原始碼構建LAMP環境及應用PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm
相關文章