[Note] 有關系統管理:Systems Administration – Network and Infrastructure Services

此篇主要是紀錄 Coursera 平台上的課程 Google IT Support Professional Certificate 中 System Administration and IT Infrastructure Services 的第二個星期的上課筆記,大致上是系統管理相關介紹。其他的筆記也一併附上,未來整理好之後下方文字可以直接連結到該筆記:


目錄


Intro to IT Infrastructure Services

Types of IT Infrastructure Services

我們可以設置不同的伺服器進行不同功能的服務,也可以為這些伺服器購買或租用硬體,並且在現場或是其他位置安裝他們,基本上就是端到端(end-to-end)的管理這些伺服器。若不想負責管理硬體,也可以利用雲端服務來維護自己的基礎設施。

IaaS(Infrastructure as a Service,基礎設施即服務)提供消費者處理、儲存、網路以及各種基礎運算資源,以部署與執行作業系統或應用程式等各種軟體。換句話說,它算是一種商業模式,可透過網際網路以依用量計費的方式提供 IT 基礎設施。一些較廣為人知的 IaaS 提供商像是 Amazon Web Services、Linode、Windows Azure 等等,以及 Google Compute Engine。

NaaS(Networking as a Service,網路即服務)是一種用於網絡傳輸連接的服務。使用企業網路基礎架構,透過訂閱模式滿足快速變化的業務需求。好處是公司不必設置自己的網路安全、管理自己的路由、設置 WAN 等等。

SaaS(Software as a Servic,軟體即服務)讓使用者可透過網際網路連接到雲端式應用程式並加以使用,是一種雲端軟體交付模型。例如我們可以使用 Microsoft Office 365 或 Google Workspace,而不是在每一台電腦上都安裝軟體。

PaaS(Platform as a Service,平台即服務)提供使用者將雲端基礎設施部署與建立至使用者端,或者藉此獲得使用程式語言、程式庫與服務。如果想要將建構和部署 Web 應用程式一體化的解決方案,我們可以使用 PaaS。較熱門的平台有 Heroku、Windows Azure 和 Google App Engine。(偷偷講一下,原本以免費著稱的 Heroku 在 2022 年年底宣布開始收費)

目錄服務(Directory servic)是一個儲存、組織和提供資訊存取服務的軟體系統,將組織的用戶和電腦集中在一個位置,以便可以添加、更新和刪除用戶和電腦,像是 Windows Active Directory、OpenLDAP 等等。而 DaaS(Directory as a service,目錄即服務)是指開發者將開發用的資料保存在網際網路上並隨時訪問,而無需使用保存在本機上的資料庫。

Physical Infrastructure Services

Server Operating Systems

伺服器作業系統通常是針對伺服器功能進行最佳化的作業系統,像是允許更多網路連接或是更多的 RAM 容量等等。大多數作業系統都有專門為伺服器製作的版本,像是 Windows 中,有 Windows Server;在 Mac OS 中,有 Mac OS Server。

Virtualization

我們可以通過兩種方式運行服務,一個是在專用的硬體上,一個是在虛擬實例(virtualized instance)上。當我們虛擬化伺服器時,我們會在伺服器上放置大量的虛擬實例,每個實例都包含一個服務。在典型的伺服器中,如果只運作一個服務,可能只占用約 20% 的 CPU,其餘的都沒有被用到。而我們可以在既有的伺服器中加上更多的服務,並且仍有良好的資源利用率。

基本上「一台機器上運行多個服務」比「多台機器上運行多個服務」還要便宜。另外我們還要考慮到維護、故障的處理以及花費,權衡之後做出正確的選擇。

Remote Access Revisited

基礎設施服務另外一個重要的部分是能夠從任何地方連接到你的基礎設施。

在 Linux 中,最常使用的工具是 OpenSSH。要通過 SSH 連接到另外一台機器,需要在欲連接的機器上安裝 SSH Client,並且在另一台連接的機器上安裝 SSH Server。

sudo apt-get install openssh-client
sudo apt=get install openssh-server

再來測試看看(依自己的 IP 位置和用戶名更改):

ssh [email protected]

而 Windows 也有類似的工具,像是 WinRM 或是 PuTTY。如果想要使用圖形介面,RDP 也很熱門。若管理的是 IT 基礎設施,則可以利用 Remote Access 等工具進行。

Network Services

FTP, SFTP, and TFTP

FTP(File Transfer Protocol,檔案傳輸協定),是一個用於在電腦網路上在客戶端和伺服器之間進行檔案傳輸的應用層協定。它不是一種超級安全的檔案傳輸方式,因為它不處理資料加密。FTP 服務的工作方式與 RSH 服務非常相似,想要訪問 FTP 伺服器的客戶端必須安裝 FTP 客戶端。FTP 現在主要用於共享 Web 內容。 如果使用網站託管服務提供商,會看到他們有一個可用的 FTP 連接,這樣就可以將檔案複製到網站或從網站複製檔案。

SFTP,安全檔案傳輸協定,也是一種檔案傳輸協定,是 FTP 的安全版本。資料通過 SSH 發送並加密。

TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協定),是一種比 FTP 更簡單的檔案傳輸方式。TFTP 不需要透過身分驗證,所以儲存的任何檔案都是通用且不需要安全的。像是託管安裝文件等等,PXE (Preboot eXecution Environment,預啟動執行環境)是一種啟動電腦的機制,允許啟動到可通過網路使用的軟體。因此我們可以將作業系統安裝文件保存在 TFTP Server 內,這樣我們執行網路引導時,就可以自動啟動到安裝程式中,比 USB 映像檔效率還高出許多。

NTP

NTP(Network Time Protocol,網絡時間協議)算是最古老的 Internet 協議之一,主要用於使連接到網路的機器上的時間保持同步。我們出於許多原因,需要仰賴跨網路工作時間上的一致性,機器需要通過網路獲得準確的時間,像是 Kerberos 或是網路身分驗證等等。

我們可以使用 local NTP server or a public NTP server。要設置 local NTP server,可以在管理伺服器上安裝 NTP server 軟體,並在機器上安裝 NTP client,告訴這些電腦將時間同步到哪一個 NTP server。

另外一種方式是使用 public NTP server,由 client 電腦連接到其它組織管理,以獲得同步時間,這樣就不需要執行自己專用的 NTP server 就可以利用 NTP 的方式。但是如果有數千台機器要操作,建議還是在自己的 NTP server 會比較好。

Intranet 是公司內部的內部網絡。如果您在公司的網絡上,則可以訪問它。可以把它想像成公司的網站,只有公司網絡上的人才能訪問。Intranet 在大型企業中最常見,並且可以成為提高員工生產力的工具。

另外一種廣泛被使用的服務是 Proxy(代理伺服器),是一種特殊的網路服務,允許一個終端通過這個服務與另一個終端進行非直接的連接。可以當作公司網路和 Internet 之間的媒介,透過接收網路流量並將這個訊息傳送到公司網路。通過這種方式,公司網絡流量在 Internet 上保持隱私不公開。Internet 通過 Proxy 獲取流量,但不知道流量最初來自哪裡。Proxy 還可以用於監視和紀錄公司內部網路活動,也可以配置不能訪問某些網站,還可以用於在 Internet 上提供隱私和安全等等。

DNS

DNS(Domain Name System,網域名稱系統),將域名和 IP 位址相互對映的一個分散式資料庫,能夠使人更方便地存取網際網路,簡單來說就是把人類可理解的名稱對應到 IP 位址。

DNS for Web Servers

如果客戶想要訪問網站,我們需要設定 DNS,這樣他們只需要輸入 URL 就可以找到這個網站。首先我們需要一個網域或是域名(Domain Name),可以從網域註冊商購買網域,例如 GoDaddy.com 或是 SiteGround.com 等等。一旦有了網域名,就可以把網站指向這個域名。我們的檔案可以儲存在雲託管提供商上,或者儲存在自已的伺服器內(通常網域註冊商也提供這項服務)。另外大多數註冊商都可以提供 DNS 設置。

DNS for Internal Networks

我們可能會需要自己的 DNS 伺服器的原因是,我們可以將內部電腦映射到 IP 位置,這樣我們就可以通過名稱而不是 IP 位置來引導到電腦。

其中一種方式是使用包含靜態 IP 位置找到主機名對應的本地主機檔案。在 Linux 中,主機檔案是在 etc/hosts,它有一個指向 127.0.0.1 的 IP 位置,這個位置指向一個 localhost 的名稱。如果現在將這個 IP 位置改對應到 www.google.com,會發現我們開啟瀏覽器後無法順利訪問 Google 頁面。這是因為 DNS 會檢查我們的主機文件,再來是我們的 DNS 伺服器。

DHCP

DHCP(Dynamic Host Configuration Protocol,動態主機設定協定)是一種使網路管理員能夠集中管理和自動分配 IP 網路位址的通信協定。

如果我們想將一台電腦連接到網路上,有兩種選擇:一個是授予靜態 IP 位置,另外是為它分配 DHCP 分配的 IP 位置。如果我們使用靜態 IP 位置,必須追蹤分配給電腦並在網路設定中手動輸入每個 IP 位置。而如果啟用 DHCP,,我們的電腦將從 DHCP 伺服器租用一個 IP 位置,自動獲取 IP,不需要手動設定。如果需要擴大 IP 範圍,也不需要更改客戶端電腦上的內容,它會自動擴展。

若要配置 DHCP 伺服器,需要確定可以使用哪個 IP 範圍來分配 IP。如果要和 DNS 集成,則需要本地 DNS 伺服器的位置,應該分配什麼閘道以及使用的子網路遮罩。

Troubleshooting Network Services

有時候我們會無法解析或獲得網站名稱的 IP 位置,這裡示範一個簡單的檢查方法。這裡都以 Linux 系統為例子。

首先我們可以檢查網路連接是否正常,以連接 Google 首頁為例子:

ping www.google.com

看起來是正常,再來我們確認 DNS 伺服器是否提供正確的 Google 位置:

nslookup www.google.com

nslookup 提供了主機名或域名的名稱伺服器。

從這裡,我們可以驗證主機名是否指向名稱服務器,藉以排除 DNS 是否未發布。把 Non-authoritative 內的 IP 位置複製到瀏覽器中。

看起來可以正常運作,判斷是 DNS 設置沒有正常工作。再回頭看看 ping 結果,可以發現它檢查的 IP 位置並不相同。如果使用這個,它不會帶去任何地方。因為執行 DNS 查詢時,電腦會先檢查主機檔案。我們檢查該檔案:

sudo vim /etc/hosts

看到有一個 www.google.com 的項目,它指向一個假的 IP 位置。

因此把這個配置刪除後,我們就可以正常連線至 Google 首頁了。

Managing System Services

What do Services Look Like in Action

DNS、DHCP、NTP 等,這些程式會在後台執行,也稱為 daemons 或是 services。也就是說我們不需要圖形界面或命令視窗互動,作業系統會確保程式正在執行。每個服務都有設定檔,系統管理員通常會使用這些文件來確定希望服務如何運作。有些服務會有圖形介面讓使用者編輯配置,有些則需要自己編輯設定檔,因此我們需要知道如何啟動和停止服務,以及透過 log 來查看現在或是以前的歷史活動。

Managing Services in Linux

作為系統管理員,需要知道如何查看正在運行的服務的狀態以及如何停止、啟動和重新啟動正在運行的服務。

以最簡單的 NTP 為例子,我們可以使用指令檢查這台機器上是否正在運行 NTP:

service ntp status

我們試試看手動修改系統日期:

sudo date -s "2017-01-01 00:00:00"

接著輸入 date 確認目前日期。可以看到由於它超過 128 毫秒閾值,目前的日期沒有調整,那要如何讓它修正回來?

sudo service ntp stop

sudo service ntp start

並且輸入 date 確認目前日期,就可以看到已經修正回來。

另外我們也可以使用 restart,這樣就不用先 stopstart

sudo service ntp restart

其他補充:

列出所有正在執行的服務:

sudo service --status-all

列入 log 檔(寫入 syslog)內並查看該檔最後一行是否有:

logger This is a test log entry
sudo tail -1 /var/log/syslog

假設我們停止服務後再寫入:

sudo service rsyslog stop
logger This is another test log entry

再次檢查檔案,會發現並沒有紀錄。

另外可以檢查有些沒有執行的服務是出現什麼問題,例如我查看一個叫做 cups 的內容,發現它沒有 cupsd.conf,但是卻有 cupsd.conf.old

sudo ls -l /etc/cups

因此我們做一些操作,將檔案複製覆蓋到 cupsd.conf

sudo mv /etc/cups/cupsd.conf.old /etc/cups/cupsd.conf

再次檢查會發現服務正常啟動了。剛開始查看 log 內容時,會發現什麼都沒有紀錄:

sudo ls -l /var/log/cups

我們希望能夠紀錄錯誤,因此接著進入設定檔:

sudo nano /etc/cups/cupsd.conf

並且改設定 LogLevel warn 改為 LogLevel debug。接著輸入 sudo service cups restart 重新啟動該服務,這樣 log 檔內就有許多記錄了。

Managing Services in Windows

使用 Windos PowerShell 並使用 Get-Service 指令獲取正在運行的服務的狀態。例如:

Get-Service wuauserv

wuauserv 是 Windows Update Service 的簡稱。另外我們可以利用 Format-List 去查看它是什麼類型的服務以及它是如何配置運作的。

Get-Service wuauserv | Format-List *

若我們需要停止服務,則可以使用:

Stop-Service wuauserv

重新啟動則是:

Start-Service wuauserv

我們也可以利用圖形操作介面執行相同的操作,進入到「服務」視窗(或是在工具列的搜尋功能輸入「服務」),開啟視窗後查看所有的服務。

我們可以透過點按右鍵啟動或是停止它。

Configuring Services in Linux

作為系統管理員,除了知道如何查詢狀態、停止和啟動服務之外,還必須知道如何配置服務以滿足需要。在某些情況下,需要在服務上線之前編輯設定檔。

vsftpd 為例子,它是一個簡單的 FTP 伺服器。首先我們安裝這個服務:

sudo apt install vsftpd

並且檢查是否有在執行狀態:

service vsftpd status

我們還可以通過使用 FTP 客戶端連接到 FTP 伺服端來驗證它是否正在運行:

lftp localhost

Lftp 是一個 FTP 客戶端程式,它允許我們連接到 FTP 伺服器。並且輸入 ls 列出目前的資料夾內容,但是應該會失敗,因為需要帳號和密碼,但我們並沒有提供。先輸入 exit 離開。

我們希望能改用匿名連接,因此需要修改設定檔允許匿名連接。

sudo vim /etc/vsftpd.conf

打開設定檔後,找到 anonymous_enable 並且從 no 改成 yes,意思是允許匿名連接。接著要重新載入服務(指服務重新讀取設定檔,服務不會中斷)。

sudo service vsftpd reload

這樣子就可以成功依照設定檔所設定的匿名連接了。

Configuring Services in Windows

我們開啟控制台→程式集,並且找到「開啟或關閉 Windows 功能」,找到「Internet Information Service」,開啟該功能。

我想應該其它關於開啟 IIS 的文章應該會比較清楚,這裡些不多提。

讓我知道你在想什麼!