當你初次創建新的 Centos 伺服器的時候, Centos 預設的配置安全性和可用性上會存在一點缺陷(運維人員往往會有初始化的腳本)。為了增強伺服器的安全性和可用性,有些配置你應該儘快地完成。 這篇文章大致從這方面去講 - 賬號安全 - ssh 安全 - 防火牆 - 交換區文件(swap file... ...
當你初次創建新的 Centos 伺服器的時候, Centos 預設的配置安全性和可用性上會存在一點缺陷(運維人員往往會有初始化的腳本)。為了增強伺服器的安全性和可用性,有些配置你應該儘快地完成。 這篇文章大致從這方面去講 - 賬號安全 - ssh 安全 - 防火牆 - 交換區文件(swap file)
用戶密碼安全
關於 root 用戶
root 用戶是在linux環境下擁有非凡許可權的的超級管理員。因為root用戶的許可權很高,所以在日常使用中不建議使用。這是因為 root 用戶能做出一些非常有破壞性的行為,甚至是事故。(比如是臭名昭彰的rm -rf /
,或者你會對這篇文章《Linux 中如何避免 rm -rf /*》感興趣) 下一步,我們為了日常工作會設置一個許可權較小的替代用戶。我們會教你當你需要更大的許可權的時候怎樣獲取。
創建一個新的用戶
這個例子會創建一個用戶叫 demo,你可以替換成你喜歡的用戶名:
adduser demo
下一步,為新的用戶分配密碼(再次說明,用你剛創建的用戶替換demo)
passwd demo
輸入一個強密碼,然後再重覆輸入以完成驗證。
用戶許可權
現在,我們已經有了一個普通許可權的用戶。然而我們有時需要執行一些管理員任務。 為了避免要註銷普通用戶,然後用 root 用戶重新登錄,Linux 中有個優雅的解決方式,系統授權特定用戶或用戶組作為 root 或他用戶執行某些(或所有)命令系統。在這個用戶組的用戶在每條命令前加個單詞 sudo,就可以用管理員許可權執行命令。
安裝 sudo
有些版本會沒有 sudo
命令的,所以首先要安裝 sudo
yum install -y sudo
屬於wheel
用戶組的用戶可以使用sudo
命令。 在 RedHat 系只需我們需要添加用戶到那個wheel
組。屬於wheel
組的用戶可以使用sudo
命令。 以root
的身份執行以下命令,會將新用戶添加到wheel
組中(將 demo 替換成你的新用戶)
gpasswd -a demo wheel
ssh 安全
保護你的伺服器的下一步是為你的新用戶設置公鑰認證。通過使用 SSH 私鑰登錄來會提高伺服器的安全性。
生成密鑰對
如果你沒有包含公鑰和私鑰的密鑰對,你需要生成一個。如果你已經有了想要使用的密鑰,請跳到複製公鑰的步驟。 要生成新的密鑰對,請在本地機器終端輸入以下命令:
ssh-keygen
假設你的本地用戶叫 localuser
,你會看到的輸出如下所示
ssh-keygen output
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):
按回車鍵以接受這文件名和路徑(或者輸入新的名稱) 下一步,系統會提示你輸入密碼確保密鑰的安全。你可以輸入密碼或者將密碼留空。 註意:如果你將密碼留空,你可以用私鑰進行身份驗證,不輸入再輸入密碼。如果你輸入密碼了,你需要私鑰和密碼才能登陸。使用密碼保護密碼會更加安全,但兩者都有自己的用途,並且都比基本密碼驗證更安全。 這會在 localuser 的Home
(主)目錄的 .ssh
文件夾 中生成一個私鑰 id_rsa
和一個公鑰 id_rsa.pub
。記住私鑰不要和任何不該訪問你伺服器的人共用。
複製公鑰
生成 ssh
密鑰對後,你需要將你的公鑰複製到新的伺服器上。我們將介紹兩種簡單的方法來做到這點。
方案一: 使用 ssh-copy-id
如果您的本地電腦安裝了 ssh-copy-id ,則可以使用它將你的公鑰安裝到你擁有登錄憑據的任何用戶。 執行 ssh-copy-id腳本需要指定要安裝密鑰的伺服器的用戶名和 IP 地址來,如下所示:
ssh-copy-id demo@SERVER_IP_ADDRESS
在提示符處輸入密碼後,你的公鑰用會被添加到遠程用戶的.ssh/authorized_keys
的文件中。現在可以使用相應的私鑰登錄到伺服器了。
方案二:手動配置密鑰
1.如果伺服器上沒有.ssh/authorized_keys
文件, 要先創建.ssh
文件夾以及.ssh/authorized_keys
文件
cd ~
mkdir .ssh
chmod 700 ~/.ssh
cd ssh
touch authorized_keys
chmod 600 authorized_keys
2.複製公鑰內容到伺服器上
scp id_rsa.pub userName@host:/home/userName/.ssh/wait_to_authorized_key
3.將公鑰字元串添加到authorized_keys
文件中
cat wait_to_authorized_key >> authorized_keys
禁止 root 用戶登錄
現在我們有了新用戶,通過修改 SSH 的守護進程(允許我們遠程登錄的程式)的配置來禁止遠程SSH訪問 root 用戶,這樣可以更好第保護我們的伺服器。 /etc/ssh/sshd_config
中
#PermitRootLogin yes
改成
PermitRootLogin no
- (可選) 禁止密碼登錄: 把
PasswordAuthentication yes
修改為PasswordAuthentication no
然後重載一下ssh
的配置
sudo systemctl reload sshd
現在,在我們退出伺服器之前,我們應該測試我們的新配置。直到我們確認可以成功建立新的連接。
更多
你可以看我這篇文章 提高-ssh-安全性
防火牆設置
防火牆能控制埠、應用程式的流量,讓伺服器更加安全。在 Centos 7 中引進 firewalld 作為 iptables 的前端。firewalld 對比 iptables,有區域(zones)劃分, 更簡單,能動態配置等特點。 下麵主要介紹雜在新伺服器中 Firewalld 的基本配置 啟動
sudo systemctl start firewalld
設置預設區域
sudo firewall-cmd --set-default-zone=public
查看激活區域
sudo firewall-cmd --get-active-zones
如果激活區域中沒有public
的話,可能是沒有為public
區域設置介面,你需要用id addr
查看網卡介面(其中 lo 是本地迴環介面),再使用設置
sudo firewall-cmd --permanent --zone=public --change-interface=eth0
給防火牆添加允許通過的服務
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=ssh
查看更多可以添加的服務
sudo firewall-cmd --get-services
查看你的 firewalld 信息
sudo firewall-cmd --list-all
重載配置
sudo firewall-cmd --reload
開機啟動
sudo systemctl enable firewalld
更多
更多的你可以看官方文檔
設置交換分區(可選)
當你伺服器記憶體不夠用的時候,就會被訪問頻率較低暫時放在交換分區的磁碟文件中。現在設置交換分區的公司應該不多,因為不夠用還不如直接加記憶體。分區文件執行效率肯定比記憶體低很多。 為何還是會有人用分區文件呢? 窮。比如我(逃 下麵來講下如何設置分區文件。 交換分區的大小大概等於或者是物理記憶體的2倍。 比如說,如果我們需要創建一個4千兆位元組的文件,我們可以通過輸入以下內容創建在 /swapfile
的交換文件
sudo fallocate -l 4G /swapfile
我們需要限制對文件的訪問,要讓其他用戶或其他進程無法看到寫入的內容
sudo chmod 600 /swapfile
格式化分區文件
sudo mkswap /swapfile
告訴系統可以用這個文件可以用於交換
sudo swapon /swapfile
開機自動執行
sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
可以用free -m
查看使用的情況
最後
以上幾個步驟會讓你的 Linux 更加安全和可用,如果你不想每次創建伺服器都要做同樣的步驟,建議你上面的內容都寫都腳本中。