Linux新手運行服務器必須要牢記的七個事項 |
發(fā)布時間: 2015/8/26 14:53:39 |
圖1:運行中的服務
安裝所需的服務如果你打算運行一臺服務器,可能會想“我有來自Linode的40GB固態(tài)硬盤(SSD)存儲系統(tǒng),于是我可以安裝想要安裝的任何服務!睕]錯,你的地盤你作主:可以在服務器上安裝任意軟件。不過,別犯想當然的毛病。連最固若金湯的服務器也會因有人鉆了在該服務器上運行的任何未打補丁或易受攻擊的軟件組件的空子而被劫持。 所以,頭一條規(guī)則就是讓你的服務器盡量精簡。只安裝你確實需要的那些程序包。要是有不需要的程序包,那就清除。程序包數(shù)量越少,代碼沒打上補丁的可能性就越小。在安裝任何軟件和依賴程序包(比如ownCloud)之前,你應該讀一下ownCloud的說明文檔,只安裝它需要的那些程序包。 運行所需的服務第二條規(guī)則就是只運行需要的那些服務。許多發(fā)行版或程序包可能會開啟某些服務,在不同的端口上運行。這可能會帶來安全風險。于是,打開終端,運行下列命令:netstat-npl 輸出結果會顯示哪些服務在哪些端口上運行。如果你發(fā)現(xiàn)任何不應該運行的服務,停止它。你還應該密切關注已被啟用、系統(tǒng)啟動時運行的服務。只要在運行systemd的系統(tǒng)上運行下列命令,就可以來檢查這方面:systemctllist-unit-files--type=service|grepenabled 視系統(tǒng)而定,你會獲得如上圖1中所示的輸出結果。要是你發(fā)現(xiàn)任何不需要的服務,可以使用強大的systemct1命令來禁用它:systemctldisableservice_name 限制對服務器的訪問就好比你不會把自家鑰匙隨隨便便交給認識的人,也不會將訪問服務器的權限交隨隨便便授予認識的人。一旦明確了這個規(guī)則,就可以限制對服務器的訪問。要牢記這點:這一切打消不了決意要破壞你服務器的壞人的念頭。不過,其作用在于為你的服務器增添了多一層的安全,防范只是撿漏的不法分子。 千萬不要以根用戶的身份登錄以超級用戶的身份通過ssh進入到服務器不是一個好做法。我們后面會禁止以根用戶身份通過ssh進入到服務器,不過在這么做之前,不妨創(chuàng)建一個擁有sudo權限的用戶,那樣你就能通過ssh進入到服務器,執(zhí)行管理員任務了。一旦你登錄進入到服務器,總是可以將用戶切換成根用戶,如果需要的話。如果你已經在系統(tǒng)上有了用戶,就跳過幾步;不然,跟著我走。 不同的發(fā)行版使用不同的方法來添加新用戶;RedHat/CentOS使用useradd,Ubuntu/Debian使用useradduser。 在Fedora/CentOS上創(chuàng)建新用戶:useraddswapnil 然后,為該用戶創(chuàng)建密碼:passwdswapnil 它會要求你為它提供用戶的新密碼,F(xiàn)在,你需要為該用戶授予sudo權限。運行下列命令:EDITOR=nanovisudo
尋找下面這一行(見圖2)
#%wheelALL=(ALL)ALL
圖2:為用戶授予sudo權限
去掉該行的注釋(#符號意味著該行被注釋;只要去掉這個符號,即可去掉注釋),那樣它看起來就像這樣:%wheelALL=(ALL)ALL 現(xiàn)在,保存并關閉文件。如果用戶不屬于wheel組,你只要運行下面這個命令,就可以將它輕松添加到組:#usermod-aGwheelswapnil 在Ubuntu系統(tǒng)上,你可以添加新用戶,為此運行下列命令:adduserswapnil 回答系統(tǒng)提出的一些問題,包括為該用戶創(chuàng)建密碼。一旦創(chuàng)建完畢,為用戶授予sudo權限:gpasswd-aswapnilsudo 打開另一個終端窗口,試著以剛創(chuàng)建的用戶的身份登錄進入到服務器,試著以sudo權限執(zhí)行一些管理員任務。要是一切正常,進入到下一步。 禁用根用戶登錄我們現(xiàn)在要禁用根用戶登錄,這意味著沒人能夠以根用戶的身份通過ssh或登錄進入到服務器。為此,打開sshd配置文件:nano/etc/ssh/sshd_conf 下一步,尋找顯示下列內容的這一注釋行:#PermitRootLoginno 然后保存并關閉該文件,重啟服務:servicesshrestart或者systemctlrestartsshd 重要提醒:這時切莫退出服務器。你要測試能不能使用剛創(chuàng)建的用戶成功地通過ssh進入到服務器。打開終端的另一個實例,以之前創(chuàng)建的用戶通過ssh進入到服務器。你不希望完全被鎖在服務器外面。要是一切都正常,你可以以根用戶身份安全地注銷退出服務器。 變更端口我們對sshd配置文件要進行的第二個變化就是更改默認端口。這主要是增添一層隱匿性,讓你的服務器確保安全,而不是給服務器果真增添任何實際的安全機制。這就好比保安服務公司派一樣的車輛來運送重要人物,那樣攻擊者就不知道該攻擊哪些車了。 打開sshd_config文件(這回以sudo權限打開,因為你再也不能以根用戶身份登錄進入到服務器了):sudonano/etc/ssh/sshd_conf 然后,找到這一注釋行:#Port22 去掉該行注釋,選擇一個端口號。在選擇端口時,務必要確保它沒有被你系統(tǒng)上的其他任何服務所使用。我為服務器選擇了端口1977:Port1977 下一步,保存并關閉文件,重啟sshd服務。再一次,注銷退出服務器之前,檢查一下設置,為此可以打開另一個終端窗口,然后使用該模式登錄進去:ssh-p{port_number}@server_IP 示例:ssh-p1977swapnil@10.14.190.118 如果你能成功登錄進去,就搞定了。 無密碼登錄 你可以通過無密碼登錄更容易通過ssh進入到服務器,并且完全禁用密碼驗證,增添另一層安全。務必要牢記一點:你只能夠從創(chuàng)建ssh密鑰的那臺機器登錄進入到你的服務器。 不妨使用下列命令,在本地系統(tǒng)上創(chuàng)建ssh密鑰(見圖3): ssh-keygen-trsa wKioL1XKol_RqJx5AABrrgponrI360_meitu_3
圖3:創(chuàng)建ssh密鑰
它會提出一些問題;你不用更改密鑰位置,保留其默認值,為它提供一個難以猜中的通行碼。下一步,你需要將這些密鑰拷貝到服務器上,那樣兩臺機器就能使用密鑰與對方進行聯(lián)系了。 cat~/.ssh/id_rsa.pub|ssh-p1977swapnil@remote-server\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";mkdir-p~/.ssh&&cat>>~/.ssh/authorized_keys\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" 現(xiàn)在,試著從另一個終端通過ssh進入到服務器;要是一切正常,它不會要求你輸入密碼。 這一步主要是為了方便,而不是增添一些實實在在的安全。不過你也可以增添一點安全,只要禁用服務器的密碼驗證。只需打開sshd配置文件,尋找這注釋的一行:#PasswordAuthenticationyes 去掉該行注釋,將它從yes改成no。保存并關閉文件。然后,重啟sshd服務。再一次,切莫從當前窗口關閉服務器連接。打開另一個窗口,登錄進入到服務器(確保它沒有要求輸入密碼)。 這個設置的另一個方面在于,你現(xiàn)在只能從創(chuàng)建ssh密鑰的那一臺機器通過ssh進入到服務器。如果你經常從不同的機器登錄進入到服務器,千萬不要使用這一方法。 結束語這些是試圖自行運行服務器的新用戶需要考慮的一些基本方面。牢記一點:黑客總是先行一步;他們不斷尋找進而闖入你服務器的任何漏洞。因而,最佳實踐就是對你的服務器做一套始終最新的備份。我建議你在對站點做任何變化前后都應該進行備份。那樣一來,萬一你的服務器中了招,總是能夠從上一套備份恢復過來。 |