牢記這七點 讓你的Linux伺服器變得更安全
我執行著幾臺Linux伺服器;家裡一臺,充當檔案伺服器,還有三臺活動伺服器,分別用作我的站點伺服器、郵件伺服器和雲端儲存伺服器。雖然我並不擔心家裡那臺伺服器,因為它並不與外界進行聯絡,可是另外三臺伺服器卻要精心維護,而且始終要精心維護。有些Linux新手想執行自己的伺服器,必須牢記幾個事項,這正是本文的重點所在。
圖1:執行中的服務。
安裝所需的服務
如果你打算執行一臺伺服器,可能會想“我有來自Linode的40GB固態硬碟(SSD)儲存系統,於是我可以安裝想要安裝的任何服務。”沒錯,你的地盤你作主:可以在伺服器上安裝任意軟體。不過,別犯想當然的毛病。連最固若金湯的伺服器也會因有人鑽了在該伺服器上執行的任何未打補丁或易受攻擊的軟體元件的空子而被劫持。
所以,頭一條規則就是讓你的伺服器儘量精簡。只安裝你確實需要的那些程式包。要是有不需要的程式包,那就清除。程式包數量越少,程式碼沒打上補丁的可能性就越小。在安裝任何軟體和依賴程式包(比如ownCloud)之前,你應該讀一下ownCloud的說明文件,只安裝它需要的那些程式包。
執行所需的服務
第二條規則就是隻執行需要的那些服務。許多發行版或程式包可能會開啟某些服務,在不同的埠上執行。這可能會帶來安全風險。於是,開啟終端,執行下列命令:
netstat -npl
輸出結果會顯示哪些服務在哪些埠上執行。如果你發現任何不應該執行的服務,停止它。你還應該密切關注已被啟用、系統啟動時執行的服務。只要在執行systemd的系統上執行下列命令,就可以來檢查這方面:
systemctl list-unit-files --type=service | grep enabled
視系統而定,你會獲得如上圖1中所示的輸出結果。要是你發現任何不需要的服務,可以使用強大的systemct1命令來禁用它:
systemctl disable service_name
限制對伺服器的訪問
就好比你不會把自家鑰匙隨隨便便交給認識的人,也不會將訪問伺服器的許可權交隨隨便便授予認識的人。一旦明確了這個規則,就可以限制對伺服器的訪問。要牢記這點:這一切打消不了決意要破壞你伺服器的壞人的念頭。不過,其作用在於為你的伺服器增添了多一層的安全,防範只是撿漏的不法分子。
千萬不要以根使用者的身份登入
以超級使用者的身份通過ssh進入到伺服器不是一個好做法。我們後面會禁止以根使用者身份通過ssh進入到伺服器,不過在這麼做之前,不妨建立一個擁有sudo許可權的使用者,那樣你就能通過ssh進入到伺服器,執行管理員任務了。一旦你登入進入到伺服器,總是可以將使用者切換成根使用者,如果需要的話。如果你已經在系統上有了使用者,就跳過幾步;不然,跟著我走。
不同的發行版使用不同的方法來新增新使用者;Red Hat/CentOS使用useradd,Ubuntu/Debian使用user adduser。
在Fedora/CentOS上建立新使用者:
useradd swapnil
然後,為該使用者建立密碼:
passwd swapnil
它會要求你為它提供使用者的新密碼。現在,你需要為該使用者授予sudo許可權。執行下列命令:
EDITOR=nano visudo
尋找下面這一行(見圖2):
# %wheel ALL=(ALL) ALL
圖2:為使用者授予sudo許可權。
去掉該行的註釋(#符號意味著該行被註釋;只要去掉這個符號,即可去掉註釋),那樣它看起來就像這樣:
%wheel ALL=(ALL) ALL
現在,儲存並關閉檔案。如果使用者不屬於wheel組,你只要執行下面這個命令,就可以將它輕鬆新增到組:
# usermod -aG wheel swapnil
在Ubuntu系統上,你可以新增新使用者,為此執行下列命令:
adduser swapnil
回答系統提出的一些問題,包括為該使用者建立密碼。一旦建立完畢,為使用者授予sudo許可權:
gpasswd -a swapnil sudo
開啟另一個終端視窗,試著以剛建立的使用者的身份登入進入到伺服器,試著以sudo許可權執行一些管理員任務。要是一切正常,進入到下一步。
禁用根使用者登入
我們現在要禁用根使用者登入,這意味著沒人能夠以根使用者的身份通過ssh或登入進入到伺服器。為此,開啟sshd配置檔案:
nano /etc/ssh/sshd_conf
下一步,尋找顯示下列內容的這一註釋行:
#PermitRootLogin no
然後儲存並關閉該檔案,重啟服務:
service ssh restart
或者
systemctl restart sshd
重要提醒:這時切莫退出伺服器。你要測試能不能使用剛建立的使用者成功地通過ssh進入到伺服器。開啟終端的另一個例項,以之前建立的使用者通過ssh進入到伺服器。你不希望完全被鎖在伺服器外面。要是一切都正常,你可以以根使用者身份安全地登出退出伺服器。
變更埠
我們對sshd配置檔案要進行的第二個變化就是更改預設埠。這主要是增添一層隱匿性,讓你的伺服器確保安全,而不是給伺服器果真增添任何實際的安全機制。這就好比保安服務公司派一樣的車輛來運送重要人物,那樣攻擊者就不知道該攻擊哪些車了。
開啟sshd_config檔案(這回以sudo許可權開啟,因為你再也不能以根使用者身份登入進入到伺服器了):
sudo nano /etc/ssh/sshd_conf
然後,找到這一註釋行:
#Port 22
去掉該行註釋,選擇一個埠號。在選擇埠時,務必要確保它沒有被你係統上的其他任何服務所使用。你可以從維基百科的這篇文章(https://en.wikipedia.org/wiki/Port_%28computer_networking%29#Common_port_numbers)詳細瞭解哪些埠通常已使用,避免此類埠。我為伺服器選擇了埠1977:
Port 1977
下一步,儲存並關閉檔案,重啟sshd服務。再一次,登出退出伺服器之前,檢查一下設定,為此可以開啟另一個終端視窗,然後使用該模式登入進去:
ssh -p{port_number}@server_IP
示例:
ssh -p1977
swapnil@10.14.190.118
如果你能成功登入進去,就搞定了。
無密碼登入
你可以通過無密碼登入更容易通過ssh進入到伺服器,並且完全禁用密碼驗證,增添另一層安全。務必要牢記一點:你只能夠從建立ssh金鑰的那臺機器登入進入到你的伺服器。
不妨使用下列命令,在本地系統上建立ssh金鑰(見圖3):
ssh-keygen - t rsa
圖3:建立ssh金鑰。
它會提出一些問題;你不用更改金鑰位置,保留其預設值,為它提供一個難以猜中的通行碼。下一步,你需要將這些金鑰拷貝到伺服器上,那樣兩臺機器就能使用金鑰與對方進行聯絡了。
cat ~/.ssh/id_rsa.pub | ssh -p 1977 swapnil@remote-server ";mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
現在,試著從另一個終端通過ssh進入到伺服器;要是一切正常,它不會要求你輸入密碼。
這一步主要是為了方便,而不是增添一些實實在在的安全。不過你也可以增添一點安全,只要禁用伺服器的密碼驗證。只需開啟sshd配置檔案,尋找這注釋的一行:
#PasswordAuthentication yes
去掉該行註釋,將它從yes改成no。儲存並關閉檔案。然後,重啟sshd服務。再一次,切莫從當前視窗關閉伺服器連線。開啟另一個視窗,登入進入到伺服器(確保它沒有要求輸入密碼)。
這個設定的另一個方面在於,你現在只能從建立ssh金鑰的那一臺機器通過ssh進入到伺服器。如果你經常從不同的機器登入進入到伺服器,千萬不要使用這一方法。
結束語
這些是試圖自行執行伺服器的新使用者需要考慮的一些基本方面。牢記一點:黑客總是先行一步;他們不斷尋找進而闖入你伺服器的任何漏洞。因而,最佳實踐就是對你的伺服器做一套始終最新的備份。我建議你在對站點做任何變化前後都應該進行備份。那樣一來,萬一你的伺服器中了招,總是能夠從上一套備份恢復過來。
要是你有什麼問題或建議,歡迎留言交流!
英文:How To Make Your Linux Server More Secure
相關文章
- 讓你的伺服器更安全些(Linux篇)伺服器Linux
- Linux伺服器如何進行安全防護?這些方法要牢記!Linux伺服器
- CUPS讓Linux列印變得更輕鬆(轉)Linux
- 伺服器資料儲存,這幾點要牢記。伺服器
- Linux系統學習須牢記這幾點Linux
- 保護網站安全一定要牢記這五點!網站
- C++ 必須變得更安全C++
- 掌握這七點,讓你成為CleanMyMac使用專家!Mac
- 記住這11點,找工作變得 So easy!
- 【注意啦】企業網路安全防護,這6點要牢記!
- 分析:Google讓我們變得更愚蠢嗎Go
- 學得快,記得牢,花的少 - 請儘快開發你的大腦
- 讓你工作變得更加有趣
- 如何讓 Emacs 俄羅斯方塊變得更難Mac
- Smartour——讓網頁導覽變得更簡單網頁
- 讓動畫變得更簡單之FLIP技術動畫
- WPF自定義Panel:讓拖拽變得更簡單
- 安全強化你的 Linux 伺服器的七個步驟Linux伺服器
- 輕鬆繞過AI檢測!BypassGPT讓你的AI文字變得更“人性化”AIGPT
- 如何讓你的作業系統更安全二作業系統
- 職場真言——讓你變得更加“專業”薦
- 與網易、騰訊雲合作, 這家公司想讓遊戲開發變得更簡單遊戲開發
- 想讓你的程式碼變得更加優雅嗎?
- 6 個可以讓程式碼變得更整潔的 Android 庫Android
- Lombok - 使用註解讓你的JavaBean變得更加簡潔LombokJavaBean
- MacW資訊:如何讓你的應用圖示變得小巧Mac
- 選擇香港伺服器需要注意哪些事項?這4點事項要牢記!伺服器
- 讓頁面變得更快一點-HTML解析原理HTML
- 學會四招讓你在linux下安裝程式變得簡單Linux
- LEARUN快速開發平臺,讓開發變得更簡單
- 認知增強技術,讓人類變得更聰明
- 這款工具讓開發變得沒門檻了
- 雲端計算讓你更安全並不是謬論
- Avdshare Video Converter,讓影片轉換變得更簡單!IDE
- 詳解ResNet 網路,如何讓網路變得更“深”了
- [譯] 讓滾動在預設情況下變得更流暢
- [翻譯]Kafka Streams簡介: 讓流處理變得更簡單Kafka
- 讓蘋果砸得更猛烈些吧!蘋果