496 0 1linux
本文中,咱們將討論如何經過一些Linux的安全命令,加固你的Linux系統。數據庫
在最開始,咱們須要問的一個問題是:Linux是已經足夠被安全加固了嗎?答案固然是否認的。那些嫺熟的攻擊者所帶來的危險是與日俱增的。天天、甚至是每小時都有新的漏洞被發現。對這些漏洞的利用方法一般創建在它們被發現後的數小時以內。一些漏洞甚至直到有人將其利用到攻擊的主機上才被發現。可見,安全應該是咱們全部人須要關心的。所以,我想在本文中用一些實際的例子來展現如何加強系統的安全性。centos
沒有一個帖子或是一本書可以回答Linux全部的安全問題或是涉及全部可能的威脅。所以,本文理所固然地也不可能包括全部,可是咱們但願你必定會發現到其「用武之處」。安全
咱們的主要議題包括:服務器
控制檯安全密碼生命週期Sudo的通知SSH調優使用Tripwire進行入侵檢測使用Firewalld迴歸iptable限制編譯器不可修改文件太棒了用Aureport來管理SELinux使用sealert工具
1、控制檯安全網絡
你能夠經過限制可以登陸的一組特定終端來限制root用戶的訪問。爲了實現該目的,請編輯/etc/下安全文件的內容。該文件列出的是容許root用戶登陸的全部設備。dom
我建議你只容許root用戶去登陸到一個終端之上,且強制全部其餘用戶都使用非root用戶的身份進行登陸。而若是確實須要root用戶權限的時候,請使用su命令來獲取。ssh
2、密碼生命週期工具
密碼的生命週期就是容許你爲密碼指定一個有效的時間週期。時間到期後,系統將強制要求用戶輸入一個新的密碼。這樣有效地確保了密碼的按期更換,以及密碼在被偷盜、破解或爲人所知的狀況下可以迅速過時。
有兩種方法能夠實現這個效果。第一種方法是經過命令行使用以下的改變命令:
$ chage -M 20 likegeeks
咱們使用- M選項爲likegeeks用戶設置了有效期限爲20天的密碼。
你也能夠輸入不帶任何選項的chage命令,它會自動提示你選項:
$ chage likegeeks
第二種方法是在/etc/login.defs中爲全部用戶設置默認值。你能夠參照下面,按需改變其數值:
PASS_MAX_DAYS 20 PASS_MIN_DAYS 0 PASS_WARN_AGE 5
3、Sudo的通知
Sudo命令雖然可使得你的「生活」更爲輕鬆,可是它們也會由於Linux的安全問題而毀了你的「生活」。
咱們都知道,sudo命令容許非root用戶以root身份運行各類命令。你能夠在/etc/sudoers文件中查到全部的sudo配置。
你能夠禁止用戶去運行那些root才能運行的命令。
當sudo命令被使用的時侯,你能夠經過在文件中添加以下一行語句,以配置其向外發送電子郵件。
mailto yourname@yourdomain.com
固然你也能夠用以下語句改變sudo的發郵件狀態:
mail_always on
4、SSH調優
只要說到Linux安全,咱們必然會討論到SSH服務。SSH應該是你係統中重要的一種服務,它使你可以輕鬆地鏈接到本身的系統。並且這多是在出現各類情況的時候,惟一能讓你的系統「倖存」的途徑。因此對SSH的調優是很是重要的。
因爲咱們在本文所使用的是CentOS 7,那麼其SSH的配置文件就存放在:
/etc/ssh/sshd_config
讓咱們來深刻了解一下吧。
攻擊者所使用的掃描器或自動工具通常嘗試運用默認端口22來鏈接SSH。所以一般狀況下,你應該改變SSH的原有端口到另外一個未使用的端口上,好比說5555。
Port 5555
你也能夠經過更新PermitRootLogin的值爲no來限制root的登陸,例如:
PermitRootLogin no
並禁用無密碼的通道,且改用公鑰登陸的方式。
PasswordAuthentication no PermitEmptyPasswords no
其實還有另一種可能阻止攻擊的調整,但它要求SSH經過正向和反向DNS查詢遠程的主機名,這將在系統日誌文件中生成一些適當的警告。你只需啓用UseDNS的值即可實現。
UseDNS yes
此外,當GSSAPI服務器被要求驗證相關用戶的身份時,SSH會調用一個不經常使用的功能來實現GSSAPI的認證方式。爲了不這種狀況可能會引發的某種麻煩,請按照以下將GSSAPIAuthentication設爲no:
GSSAPIAuthentication no
考慮到SSH一般會出現的超時問題,你能夠經過正確地配置ServerAliveInterval、ServerAliveCountMax和TCPKeepAlive的值來進行管控。
例以下面的規則就意味着每隔60秒就產生一個數據包。
ServerAliveInterval 15 ServerAliveCountMax 3 TCPKeepAlive yes
經過調整這些值,你能夠提供一個更長的鏈接。
ClientAliveInterval 30 ClientAliveCountMax 5
你能夠經過指定那些被容許用來使用SSH的用戶名,從而使得SSH服務更爲安全。
AllowUsers user1 user2
或者指定容許的組:
AllowGroup group1 group2
除此以外,你還能夠爲SSH啓用諸如Google Authenticator這樣的雙因素認證方式:
$ yum install google-authenticator
而後運行之,以驗證是否成功安裝:
$ google-authenticator
你的移動手機上應該已經安裝了Google authenticator的應用,那麼請將下面一行添加到/etc/pam.d/sshd之中。
auth required pam_google_authenticator.so
最後的事情就是經過添加下面一行到/etc/ssh/sshd_config中,以通知SSH。
ChallengeResponseAuthentication yes
而後重啓你的SSH:
$ systemctl restart sshd
以後,當你使用SSH登陸的時候,它將會詢問一個驗證碼。這便意味着你的SSH已經可以應對暴力破解的攻擊,且更爲穩固了。
5、使用Tripwire進行入侵檢測
Tripwire是Linux安全裏的重要工具之一。這是一種基於主機的入侵檢測系統(HIDS)。它經過收集配置和文件系統的細節,並使用這些信息來提供系統先前與當前狀態之間的參考點等方式進行工做。該過程監測文件或目錄的屬性包括:進去哪些被添加或修改了、誰修改的、修改了什麼、什麼時候修改的。所以它就是你文件系統的「看門狗」。
你須要訪問EPEL存儲庫來獲取Tripwire。你能夠按以下方法輕鬆地添加該庫:
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm $ rpm -ivh epel-release-7-9.noarch.rpm
一旦成功安裝了EPEL庫,你就能夠安裝Tripwire了:
$ sudo yum install tripwire
在使用Tripwire以前,你須要用以下命令來建立本地和網站密鑰:
$ tripwire-setup-keyfiles
它會提示你輸入一個用於網站和本地密鑰文件的密碼。Tripwire也會建議你使用大寫字母、小寫字母、數字和標點符號的組合。
你能夠經過更改以下文件來定製Tripwire:
/etc/tripwire/twpol.txt
由於每一行都有註釋,且描述也很到位,所以該文件仍是比較容易閱讀和修改的。
你能夠用以下的方式更新本身的Tripwire策略。
$ tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt
Tripwire將經過參考你的更改,在屏幕上持續刷新顯示各個階段的步驟。當這些完成以後,你就應該可以以以下方式初始化Tripwire數據庫了:
$ tripwire --init
而後Tripwire將開始掃描系統。它所須要的時長取決於系統的整體規模。
任何對文件系統更改將被認爲是一種系統的入侵,所以管理員會被通知到,並且他須要使用受信任的文件予以系統恢復。正是出於這個緣由,Tripwire必須去驗證任何的系統更改。你能夠經過以下命令來驗證你的現有的策略文件:
$ tripwire --check
關於Tripwire,個人最後一點建議是:請額外去加固twpol.txt和twcfg.txt文件的安全。
更多有關Tripwire的選項和設置,你能夠經過man tripwire查閱到。
6、使用Firewalld
Firewalld替代了iptables,而且經過在不中止當前鏈接的狀況下啓用各類配置的更改,從而改善了Linux的安全管理。
Firewalld做爲守護進程形式運行着。它容許各類規則被即時地添加和更改,並且它使用各類網絡區域來爲任何以及全部與網絡相關的鏈接定義一種信任級別。
要想知道Firewalld的當前運行狀態,你能夠輸入以下命令:
$ firewall-cmd --state
你能夠用以下命令羅列出預約義的區域:
$ firewall-cmd --get-zones
其值也能夠以下方式進行更新:
$ firewall-cmd --set-default-zone=
你能夠用如下命令獲取任何特定區域的全部相關信息:
$ firewall-cmd --zone= --list-all
你也能列出全部支持的服務:
$ firewall-cmd --get-services
並且你能夠添加或刪除額外的服務。
$ firewall-cmd--zone=--add-service= $ firewall-cmd--zone=--remove-service=
你能經過以下命令列出任何特定區域中全部開放的端口:
$ firewall-cmd --zone= --list-ports
你可用以下方式管理TCP/UDP端口的增長與刪除:
$ firewall-cmd--zone=--add-port= $ firewall-cmd--zone=--remove-port=
你能夠以下命令添加或刪除端口的轉發:
$ firewall-cmd--zone=--add-forward-port= $ firewall-cmd--zone=--remove-forward-port=
Firewalld是很是全面的。其中Firewalld最棒的地方當數:你能夠在不須要中止或從新啓動防火牆服務的狀況下,管理該防火牆的體系結構。而這正是運用IPtables所沒法實現的。
7、迴歸iptable
有一些人仍然仍是喜歡IP tables 賽過Firewalld。那麼若是你正好處於這種想捨去Firewalld而回歸IP tables的話,請首先禁用Firewalld:
$ systemctl disable firewalld $ systemctlstop firewalld
而後來安裝IP tables:
$ yum install iptables-services $ touch /etc/sysconfig/iptables $ touch /etc/sysconfig/ip6tables
如今你就能夠啓動IP tables的服務了:
$ systemctlstart iptables $ systemctlstart ip6tables $ systemctl enable iptables $ systemctl enable ip6tables
爲了能讓內核採用新的配置,你必須從新啓動系統。
8、限制編譯器
若是你的系統被黑掉了,那麼攻擊者會對系統使用的是哪一種編譯器很感興趣。爲何呢?由於他們能夠去下載一個簡單的C文件(POC),而且在你的系統上進行編譯,從而在幾秒鐘以內就成爲了root用戶。若是編譯器是開啓的話,他們還能夠在你的系統上作一些嚴重的破壞。
首先,你須要檢查單個的數據包以肯定其包含有哪些二進制文件。而後你須要限制這些二進制文件的權限。
$ rpm -q --filesbypkg gcc | grep 'bin'
如今咱們須要建立一個能夠訪問二進制文件的編譯器的組名稱了:
$ groupadd compilerGroup
而後,你能夠賦予這個組可以改變任何二進制文件的全部權:
$ chown root:compilerGroup /usr/bin/gcc
最後重要的是:僅編譯器組纔有改變該二進制文件的權限:
$ chmod 0750 /usr/bin/gcc
至此,任何試圖使用gcc的用戶將會看到權限被拒絕的信息了。
我知道有些人可能會說,若是攻擊者發現編譯器被關閉了的話,他會去下載編譯器自己。這就是另一個故事了,咱們會在將來的文章中涉及到的。
9、不可修改文件太棒了
不可修改文件是Linux系統中一種最爲強大的安全特性。任何用戶(即便是root用戶),不管他們的文件權限是怎樣的,都沒法對不可修改文件進行寫入、刪除、重命名甚至是建立硬連接等操做。這真是太棒了!
它們是保護配置文件或防止你的文件被修改的理想選擇。請使用chattr命令來將任何文件變得不修改:
$ chattr +i /myscript
你也能夠以下方法去除其不可修改屬性:
$ chattr -i /myscript
/sbin 和/usr/lib兩個目錄內容能被設置爲不可改變,以防止攻擊者替換關鍵的二進制文件或庫文件成爲惡意軟件版本。我將其餘有關使用不可改變文件的例子,留給你去想象。
10、用Aureport來管理SELinux
一般狀況下,若是你使用的是主機控制面板,或者當有一個或多個特定的應用程序可能會碰到一些問題的時候,他們是不會運行在SELinux已啓用的模式下的,也就是說你會發現SELinux是禁用掉的。
可是禁用SELinux確實會將系統暴露於風險之中。個人觀點是:因爲SELinux有必定的複雜性,對於咱們這些仍想獲益於安全性的人來講,徹底能夠經過運行aureport的選項來使得工做輕鬆些。
aureport工具被設計爲建立一些基於列特徵的報告,以顯示在審計日誌文件中所記錄的那些事件。
$ aureport --avc
你也能夠運用一樣的工具來建立一個可執行文件的列表:
$ aureport -x
你也可使用aureport來產生一個認證的全量報告:
$ aureport -au -i
或者你還能夠列出那些認證失敗的事件:
$ aureport -au --summary -i --failed
或者你也須要一個認證成功的事件的摘要:
$ aureport -au --summary -i --success
可見,當你使用一個運行着SELinux的系統來進行系統的故障診斷的時侯,你做爲系統管理員首要考慮的應該就是使用aureport的各類好處了。
11、使用Sealert工具
除了aureport工具你也可使用一個很好的Linux安全工具—sealert。你能夠用如下的命令來進行安裝:
$ yum install setools
那麼如今咱們就有了一個工具,它將積極地從/var/log/audit/audit.log這一日誌文件中返回各類警告,並將其轉換得更爲「人性化」且可讀。
這個稱爲sealert的工具,其目的是能報告出任何與SELinux有關聯的問題。你能夠這樣來使用它:
$ sealert -a /var/log/audit/audit.log
關於所生成的報告,其最好之處是:在每一個被發現的問題的警報末尾,系統都會給出如何去解決該問題的相關解釋。
在這篇文章中,咱們討論了一些能夠幫助你加固Linux系統的安全技巧。固然,對於各類運行的服務而言,仍有許多值得加固的Linux安全技巧有待發掘。我但願你能從本文中找到對你有用和有趣的內容。
原文標題:Useful Linux Security Tricks To Harden Your System,做者: Seco Max
yhttp://netsecurity.51cto.com/art/201704/536512.htm
本文由 CentOS中文站 - 專一Linux技術 做者:centos 發表,其版權均爲 CentOS中文站 - 專一Linux技術 全部,文章內容系做者我的觀點,不表明 CentOS中文站 - 專一Linux技術 對觀點贊同或支持。如需轉載,請註明文章來源。