安裝 CentOS 7 後必作的七件事

from: http://www.hksilicon.com/articles/594621?lang=cn vim



CentOS 是最多人用來運行服務器的 Linux 版本,最新版本是 CentOS 7。當你興趣勃勃地在一臺主機或 VPS 上安裝 CentOS 7 後,首要的工做確定是增強它的安全性,如下列出的七件事,是你進一步配置系統和安裝其餘軟件前必須作的。centos


1. 更改 root 密碼

若果你是自行安裝 CentOS 7 的話,安裝程序會讓你自行設定 root 的密碼。不過不少 VPS 服務商只會提供預先安裝好的 CentOS 7 映像檔,這種狀況下他們會透過主控界面告訴你 root 的密碼,這個密碼的安全性誰也不知道,它是如何產生的呢?隨機性可靠嗎?複雜性足夠嗎?服務商的服務器是否記錄了密碼的副本?咱們實在有必要第一時間重設這個密碼。安全

首先使用 ssh 登入服務器,在 Windows 可使用 PuttyTera Term、或者在 Cygwin 環境下執行 OpenSSH。在 Mac 和 Linux 上只需在終端機 (terminal) 中執行如下指令即可以了,比 Windows 簡單得多:服務器

首次 ssh 到服務器

因爲你歷來沒有使用過 ssh 聯繫到這臺服務器,你的電腦會把服務器的加密公鑰下載,而後詢問你是否信任它,這臺新鮮安裝好的 CentOS 7 應該還未引發***的興趣,也不大可能在這麼短的時間內被攻陷,因此能夠放心接受這個加密公鑰。跟着輸入 root 的密碼登入服務器:網絡

輸入 root 密碼兩次

登入後當即更改 root 的密碼,你須要輸入新密碼兩次:app

更改 root 密碼

好的密碼應該同時包含數字、小寫英文字母、大寫英文字母、和標點符號,最少 15 個字符,這樣的密碼強度大概有 90 bit,勉強能夠應付密碼被「暴力破解」,固然我假設了你的密碼是真正隨機產生,有些人喜歡把我的資料例如名字、出生日期、車牌號碼、地址、配偶和子女的名字等等崁入密碼中,或者使用字典裏的字詞拼湊密碼,這樣密碼的強度將會大幅降低,甚至不堪一擊,這些問題我曾經在《如何管理密碼?》討論過。dom

網上有不少隨機密碼產生器,例如 RANDOM.ORG,大均可用,但記緊必須使用 HTTPS 造訪這些網站。若是你有使用「密碼夾萬」一類的軟件,不妨使用它們內建的密碼產生器。ssh

完成後不要登出系統,使用另外一個視窗用新密碼嘗試登入,即便失敗也能夠在原來的視窗重複以上步驟。tcp

2. 新增一個普通賬號

這一步連同下一步,至關於爲一個城市築起兩道城牆,既可增強防衛,也創建了一道警報機制,當敵人(***)卒然來襲,第一道城牆被襲擊和破壞,咱們還有第二道城牆阻延一下,有時間部署防衛甚至反擊。因此這是一個不少人忽略,但其實很是重要的步驟。編輯器

首先咱們新增一個賬號:

新增一個賬號

這個新賬號 ahhang 沒有默認密碼,便是說登入 ahhang 時系統不用輸入密碼!因此咱們當即要設定密碼:

設定 ahhang 的密碼

有些人認爲不該該把創建賬號和設定密碼兩件事分開來作,一來可能會不慎遺忘,二來也給***一道時間縫隙登入這個新賬號,因此他們會在 adduser 指令中一併提供加密後的默認密碼,方法是加入 -p 參數,不過這樣作也有風險,由於***能夠透過列出系統的進程,得知加密了的新密碼,而後把密碼破解。

3. 禁止 root 使用 ssh 登入

CentOS 7 默認允許任何賬號透過 ssh 登入,包括 root 和通常賬號,爲了避免讓 root 賬號被***暴力***,咱們必須禁止 root 賬號的 ssh 功能,事實上 root 也沒有必要 ssh 登入服務器,由於只要使用 su 或 sudo (固然須要輸入 root 的密碼) 普通賬號即可以擁有 root 的權限。使用 vim (或任何文本編輯器) 開啓 /etc/ssh/sshd_config,尋找:

1

PermitRootLogin yes


修改成:


1

PermitRootLogin no


最後輸入如下指令從新啓動 sshd


1

systemctl restart sshd.service


這樣***要取得 root 的權限,必須破解 root 和一個普通用戶的密碼,難度增長了。

完成後不要登出系統,使用另外一個視窗嘗試登入 root 和普通賬號,測試無誤即可進行下一步。

4. 使用很是規的 ssh 端口

Ssh 默認使用端口 22,這是在 IANA 註冊的官方端口,但沒有人說 ssh 不能使用其餘端口,不少***專門向服務器的 22 端口發動***,即便你的服務器固若金湯、牢不可破,可是要系統日以繼夜接受***,消耗的系統資源(網絡、處理器、內存等等)也不會少,況且它是否真的牢不可破還說不定呢!因此有必要讓 ssh 使用其餘端口,只讓有權使用 ssh 的用戶知道。

使用 vim  (或任何文本編輯器) 開啓 /etc/ssh/sshd_config,尋找:

1

Port 22

修改成:

1

Port 10837

你能夠把 10837 改成任何 1024 – 65535 之間的任何數字,若果怕與某些系統服務發生衝突,能夠參考一下這裏

跟着從新啓動 sshd

1

systemctl restart sshd.service

而後是設定防火牆,CentOS 7 的內核已經有防火牆 netfilter,但你的系統未必安裝了用戶界面,較前版本的 CentOS 默認使用 iptables,但 CentOS 7 開始使用效能更高、穩定性更好的 firewalld,若果服務器還沒有安裝 firewalld,可使用如下指令安裝,不肯定是否已經安裝的話也能夠輸入這個指令,它會告訴你已經安裝而後退出。

1

yum install firewalld

跟着啓動:

1

systemctl start firewalld

設定 firewalld 的方法有兩個,第一個是修改 firewalld 有關 sshd 的設定,把端口 22 改成 10837,這是正統的作法,但步驟比較多;第二個是要求 firewalld 開啓端口 10837,不指定它屬於哪個服務,這個作法一般處理臨時的端口開啓/封鎖,步驟簡單,可是往後你要是忘記了這個端口爲何開啓了呢?何時開啓的呢?爲了哪一項服務開啓呢?可能有點麻煩。我兩種方法都會介紹一下,但做爲專業的系統管理員(即便不是真正的專業,也應該具有這樣的心態),我推薦使用第一種方法。

設定防火牆方法一:

複製 firewalld 有關 sshd 的設定檔案:

1

cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

使用 vim  (或任何文本編輯器) 開啓 /etc/firewalld/services/ssh.xml,尋找:

1

  <port protocol="tcp" port="22"/>

修改成:

1

  <port protocol="tcp" port="10837"/>

儲存後從新加載 firewalld

1

firewall-cmd --reload


設定防火牆方法二:

輸入如下指令:

1

firewall-cmd --zone=public --add-port=10837/tcp --permanent

就是這樣簡單!

不論使用哪一種方法,完成後不要登出系統,使用另外一個視窗嘗試登入,例如:

1

ssh -p 10837 ahhang@192.168.1.188


5. 啓用公鑰驗證登入 ssh

如今只有普通賬號才能透過 ssh 登入服務器,可是 ssh 提供一個更先進更安全的驗證方法:公鑰驗證法。

首先每一名用戶創建一對加密鑰匙(密鑰和公鑰),密鑰儲存在平常使用的電腦,公鑰則儲存在服務器,使用 ssh 聯繫到服務器的時候,電腦會把一些創建連線請求的資料,其中包括賬號名稱和公鑰,而且把部分資料用密鑰製做數碼簽署,一古腦兒送到服務器,服務器檢查本身的「公鑰庫」是否包含送來的公鑰,有的話再驗證數碼簽署,成功的話便直接登入服務器,無需輸入賬號密碼。

第一步在平常使用的電腦上使用 ssh-keygen 指令創建一對加密鑰匙,它會詢問儲存加密鑰匙的檔案名稱,和把鑰匙加密的密碼,檔案名稱使用默認的路徑和名稱即可以,密碼則無需輸入:

創建賬號的 RSA 加密鑰匙

這個指令會創造兩個檔案,一個名爲 id_rsa,是你的 RSA 密鑰,另外一個是 id_rsa.pub,是你的 RSA 公鑰。公鑰必需上傳到服務器而且附加於用戶賬號裏面的 .ssh/authorized_keys 檔案中,這個檔案儲存全部可透過 ssh 登入到這一個賬號的公鑰,一行一條公鑰:

上傳 RSA 公鑰到服務器

順便一提,這個檔案的存取權限必須是 0700,不然 sshd 不會讀取:

存放公鑰的檔案的權限必須是 0700

使用公鑰驗證法登入 ssh 又省力又安全,由於咱們不用輸入密碼,天然也沒有密碼被盜取的憂慮,簡簡單單地輸入連線指令即可以了。

可是存放在平常電腦中的密鑰卻帶來新的安全隱患,萬一密鑰被盜取了,其餘人豈不是能夠隨便登入服務器?如今是「雙重驗證」(two-factor authentication) 隆重登場的時候,雙重驗證的理念是咱們必須向服務器證實兩種不一樣性質的東西,才能成功驗證身分,第同樣是咱們知道什麼,第二樣是咱們擁有什麼。首先服務器會要求咱們輸入密碼,咱們知道密碼,過了第一關。跟着服務器要求咱們證實擁有公鑰驗證法中的密鑰,透過上面的設定程序咱們也經過了驗證,過了第二關。如今服務器纔會讓咱們進入系統。

設定 ssh 的雙重驗證法很簡單,使用 vim  (或任何文本編輯器) 開啓 /etc/ssh/sshd_config,在檔案的末端假如這一行:

1

AuthenticationMethods publickey,password

它告訴服務器用戶必須擁有合法的公鑰,和輸入正確的密碼才能成功登入。修改完成後從新啓動 sshd

1

systemctl restart sshd.service

完成後不要登出系統,使用另外一個視窗嘗試登入,測試無誤即可進行下一步。

6. 更新、更新、天天更新、天天自動更新

每一天都有成千上萬的***在世界各地尋找 Linux 系統和常見軟件的安全漏洞,一有發現便會發動規模龐大而迅速的網絡***,務求在咱們來得及反應前把系統攻陷。不要覺得***都只是十來歲的年輕小毛頭,大部分***背後都有勢力龐大、資源幾乎無限的國家機構支持,有些甚至屬於這些機構的僱員,美國的 NSA,英國的 GQHC,中國的無名***隊伍,都是比較明目張膽由國家支持的網絡黑幫,可見咱們的系統時時刻刻都被兇狠之徒盯着,保持軟件在最新的狀態是其中一項咱們必須作,也很容易作到的工做。

首先咱們當即手動更新全部預先安裝的軟件:

1

yum -y update

跟着設定系統定時自動更新,第一步肯定服務器是否安裝了自動執行指令的工具,跟着使用 yum 一個名叫 yum-cron 插件。

CentOS 7 使用數個軟件來自動執行指令:cronanacronat 和 batch,其中 cron 和 anacron 用來按期重複執行指令,At 和 batch 則用來在特定時間執行一次性的指令。咱們將會使用 cron 和 anacron,二者的分別這裏不細表了,未來有機會再討論,如今使用如下指令安裝 cron 和 anacron

1

yum -y install cronie

下一步就是安裝 yum-cron

1

yum -y install yum-cron

其實你可使用一個指令同時安裝 cronie 和 yum-cron,甚至單獨安裝 yum-cron 也能夠,由於 yum 會自動檢測到 yum-cron 須要 cronie 而後自動替你安裝,上面分開兩個指令純粹令你們容易明白。

完成後系統多了數個檔案,比較重要的包括:

  • /etc/cron.daily/0yum.cron
    Anacron 天天執行這個檔案一次,它根據配置檔案 /etc/yum/yum-cron.conf 來更新軟件

  • /etc/yum/yum-cron.conf
    這是天天執行 yum-cron 的配置檔案,默認只會下載更新的軟件,並不安裝,用意是讓管理員檢視 yum-cron 的輸出,選取須要更新的軟件進行手動安裝。

跟着咱們修改配置檔案,讓 yum-cron 自動更新軟件,使用 vim  (或任何文本編輯器) 開啓 /etc/yum/yum-cron.conf,尋找:

1

apply_updates = no

修改成:

1

apply_updates = yes

確認一下 update_messages = yesdownload_updates = yesapply_updates = yes,正以下圖:

yum-cron 配置檔案

最後,啓動 crond 和 yum-cron

1

2

systemctl start crond

systemctl start yum-cron


7. 防火牆

防火牆的做用比如網絡警察,它監察全部進出系統的 IP 封包,哪些端口允許封包進入,哪些端口允許封包外出等等,都由防火牆控制,保護使用這些端口的應用程式,因此設定防火牆是極重要的工做。

過濾封包功能的 netfilter 已經內建在 CentOS 7 的內核,可是配置 netfilter 的界面程式 firewalld 卻未必有安裝,不管是否已經安裝,均可以執行下面的安裝指令:

1

yum install firewalld

跟着查看一下防火牆如今開啓了哪些服務和端口:

1

firewall-cmd --list-all

檢查防火牆

上圖可見防火牆只開啓了 DHCP 客戶端和 ssh 兩個服務的通信端口,假若往後安裝了其餘網絡軟件,例如網站服務器、域名服務器等等,必需要檢查安裝程式有否開啓他們的通信端口,沒有的話便要手動開啓。若是好像前面第四點那樣使用了很是規的通信端口,也可能要手動配置防火牆,防火牆詳細的配置方法超出了本文的討論範圍,未來有機會再談。

相關文章
相關標籤/搜索