信息安全

讓你的 Linux 伺服器更安全的方法

我運行幾個Linux伺服器;在家裡的一個作為文件伺服器,還有三個實時伺服器分別用作站點、郵件、雲儲存。雖然我不用擔心家裡的伺服器的安全問題,因為它不和外界對話,但是另外三個伺服器始終需要維護。對於那些想運行自己的伺服器的Linux新手,他們應該將一些觀點牢記在心,就是本文將要給出的幾個方法。

只安裝你需要的

如果你準備運維一個伺服器,你也許會這樣想「我在 Linode有40GB的固態硬碟存儲空間,所以我可以安裝我想要的任何服務。」好吧,的確是這樣:你的伺服器的系統、軟體什麼的都可以安裝在上面。但是也不能太想當然了。要知道即使是最「堅固」的伺服器也能夠被攻擊的,往往是由於在伺服器上使用未打補丁或者易受攻擊的組件。

所以第一個原則是盡量精簡你伺服器,讓它輕快些。只安裝那些你真正需要的軟體。如果存在不想要的軟體,就要清除它們。軟體少了,未打補丁的代碼也會少的。在你安裝任何軟體包和依賴包之前,你應該閱讀該軟體的文檔並只安裝那些你需要的組件。

運行你需要的

第二個原則是只開啟那些你需要的服務。許多發行版或者軟體包也許已經在不同的埠開啟了相應的服務。其實這會有一些安全風險,先打開終端運行下面這行命令:

[alert style="green"] netstat -npl [/alert]

輸出的結果將會告訴你系統正在哪些埠運行哪些服務。如果你發現有你不想運行的服務,關閉這些服務吧。你也應該注意那些隨系統啟動運行的服務。你可以運行systemd來查看這些服務:

[alert style="green"] systemctl list-unit-files --type=service | grep enabled [/alert]

根據各自的系統,你會得到一個類似下圖所示的輸出。如果你發現任何不想運行的服務,可以運行systemctl命令來關閉:

[alert style="green"] systemctl disable service_name [/alert]

running-services-1

增加進入伺服器的限制

就像你不會把自家門的鑰匙給你認識的每一個人,你也不應該讓你認識的人可以隨便進入你的伺服器。既然明確了這一原則,你就要對伺服器增加一些進入的限制。然而請記住:做這些並不能阻止那些一門心思使你伺服器癱瘓的人。我們做的只不過是增加伺服器的安全級別以應對偶然的攻擊。

不要以Root許可權登陸

以root用戶遠程登陸伺服器可不是什麼好的習慣。我們將要禁止以root用戶遠程登陸伺服器,在做這之前,我們要先創建一個有sudo許可權的普通用戶以便能夠遠程登陸伺服器並且執行管理員許可權。只要你用這個用戶登陸伺服器,你總能夠在你需要時切換為root許可權。如果你在系統上已經有了一個這樣的用戶,跳過下面這些步驟;否則,繼續跟著我做。

不同發行版新建用戶的方式有所不同,Red Hat/CentOS使用useradd命令,Ubuntu/Debian使用adduser命令。

在Fedora/CentOS上新建一個用戶:

[alert style="green"] useradd swapnil [/alert]

接著為這個用戶創建一個密碼:

[alert style="green"] passwd swapnil [/alert]

然後會讓你給該用戶提供一個新密碼。接著是賦予該用戶sudo許可權,運行命令:

[alert style="green"] EDITOR=nano visudo [/alert]

找到下面這一行(如下圖):

[alert style="green"] # %wheel ALL=(ALL) ALL [/alert]

sudo-wheel-2取消這一行的注釋(#表示注釋,刪除#表示取消注釋):

[alert style="green"] %wheel ALL=(ALL) ALL [/alert]

保存關閉文件。如果該用戶不屬於wheel組,你可以運行命令把其加入該組:

[alert style="green"] # usermod -aG wheel swapnil [/alert]

Ubuntu上,你可以通過以下命令新建一個用戶:

[alert style="green"] adduser swapnil [/alert]

然後系統會有一些問題,根據情況回答就可以了,比如為該用戶創建新密碼等。接著是賦予該用戶sudo許可權:

[alert style="green"] gpasswd -a swapnil sudo [/alert]

開啟另一個終端並嘗試用新建的用戶登陸伺服器,可以試著切換sudo許可權去執行一些管理員許可權。如果沒什麼問題,繼續下一步。

禁止root登陸

我們將禁止root登陸,這意味著將沒有人能以root用戶遠程登陸伺服器。先打開sshd配置文件:

[alert style="green"] nano /etc/ssh/sshd_conf [/alert]

找到下面的注釋行並取消注釋:

[alert style="green"] #PermitRootLogin no [/alert]

保存關閉文件並重啟服務:

[alert style="green"] service ssh restart [/alert]

另一個命令也可以:

[alert style="green"] systemctl restart sshd [/alert]

注意:先不要登出伺服器。你需要先測試一下能否用新建用戶成功地遠程登陸伺服器。開啟另一個終端嘗試用新建用戶遠程登陸伺服器。這樣做的目的是防止你被伺服器「鎖」在了外面。如果一切都正常,你可以安全地登出root身份了。

改變埠

另一個改動是改變sshd文件中的默認埠。這只不過好像是增加一些煙霧來保護你的伺服器安全,並不是對伺服器真的做了什麼。就像是用很多一模一樣的車去運送重要人物一樣,這可以讓意圖不軌之人不知道他乘的是哪輛車。

打開sshd_config文件(這次用sudo許可權,因為你已經不能再以root用戶登陸伺服器了,其實這樣做也很方便。):

[alert style="green"] sudo nano /etc/ssh/sshd_conf [/alert]

找到下面注釋行:

[alert style="green"] #Port 22 [/alert]

取消注釋並選擇一個埠,要確保選擇的埠沒有被系統的其它服務佔用。你可以從Wikipedia介紹中了解到哪些是常用埠,並且應避免使用這些埠。我選擇的埠是1977:

[alert style="green"] Port 1977 [/alert]

接著保存關閉文件並重啟sshd服務。再次提醒,在登出伺服器前,開啟另一個終端並用以下命令嘗試登陸伺服器:

[alert style="green"] ssh -p{port_number}@server_IP [/alert]

具體如下:

[alert style="green"] ssh -p1977 swapnil@10.14.190.118 [/alert]

如果你成功登陸,說明已經設置好了。

無密碼登陸

你能夠通過無密碼方式更簡單地遠程登陸伺服器,並且通過關閉密碼驗證也可以增加一點安全級別。不過你也只能在生成ssh密鑰的機器上登陸伺服器了。

在個人機器上生成ssh密鑰(如下圖),使用如下命令:

[alert style="green"] ssh-keygen - t rsa [/alert]

ssh-key-3

通常會有一些問題,比如你可以默認密鑰的位置,然後想一個難猜的密碼口令。接著,你需要把生成的密鑰複製到伺服器上,使兩個機器可以通過密鑰進行交流。

[alert style="green"] cat ~/.ssh/id_rsa.pub | ssh -p 1977 swapnil@remote-server ";mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" [/alert]

現在試著開啟另一個終端遠程登陸伺服器,如果一切順利的話,你就不用再輸入密碼了。

這一步與其說是增加安全性倒不如說是為了方便,但你可以關閉伺服器的密碼驗證服務來增加一點安全性。只需打開sshd_config文件,找到下面的注釋行:

[alert style="green"] #PasswordAuthentication yes [/alert]

取消注釋並把值設為no,保存並關閉,然後重啟sshd服務。記住,不要關閉當前的連接終端,開啟另一個終端測試登陸(再次確定登陸不需要密碼)。

這個設置會使得你只能在生成ssh密鑰的機器上遠程登陸伺服器。如果你需要經常從不同的機器登陸伺服器,就不必使用這種方法了。

結語

有一些基本概念告訴那些嘗試運行自己伺服器的新人,牢記駭客始終比我們想得深想得遠,他們以尋找系統漏洞並攻擊伺服器為樂。因此,最好養成定期備份伺服器的習慣,我建議你在伺服器變動前後做備份。萬一你的伺服器哪天癱瘓了,你還可以從備份中重新恢復起來。

原文鏈接:http://www.linux.com/learn/tutorials/843903-how-to-make-your-linux-server-more-secure/

譯文鏈接:http://www.linuxstory.org/four-ways-to-make-your-linux-server-more-security/

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0

You may also like

1 Comment

Leave a reply

您的電子郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

More in:信息安全

信息安全

深度解析shellcode原理及編碼技術

本篇文章深度探討了Shellcode的原理,同時對64位和32位系統下的shellcode進行了詳細解讀。並詳細介紹了Shellcode的編碼技術,其中包括手寫Shellcode的兩種思路。對於編碼Shellcode,本文列舉了幾種常見的解碼器的實現,如FNSTENV XOR解碼器和JMP/CALL解碼器。最後,本文列舉了幾種常見的字符集以及Shellcode編碼工具,並推薦了兩個可查找現成Shellcode的資料庫。
信息安全

安卓逆向:去廣告和彈窗

安卓應用中常見有三種廣告:啟動廣告、彈窗廣告以及橫幅廣告。啟動廣告一般是單獨的一個 Activity,對於這種廣告可以通過 Activity 切換定位來加以去除。彈窗廣告一般是在 Activity 方法中通過 Dialog->show() 方法調用的,這種廣告可以通過 Hook、定位並修改代碼方法去除。橫幅廣告是出現在 UI 布局中的廣告,在 xml 中定位到之後可以通過修改寬高和可見性的方法去除。
信息安全

安全能力交換協同應對DDoS

安全形勢的急劇惡化也催生出了海量的安全需求,大量安全廠商及網路運營商都投身到這場全球性的安全對抗戰役中,但是隨著網路攻擊在規模、複雜性及量級方面的不斷擴大,越來越多的網路安全廠商及運營商感覺到「力不從心」,大家都意識到應對現今的網路攻擊已不是一家公司或單一組織可以解決的。協作,必將成為未來網路安全領域最重要的發展方向。