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 服務器。
在本指導中,我們将使用一個靜态 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 的主要配置文件位于 /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
目錄開始服務内容的準備了。
和 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 的下載和上傳情況
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!