20 個 OpenSSH 最佳安全實踐 | Linux 中國
OpenSSH 是 SSH 協議的一個實現。一般通過 scp
或 sftp
用於遠端登入、備份、遠端檔案傳輸等功能。SSH能夠完美保障兩個網路或系統間資料傳輸的保密性和完整性。儘管如此,它最大的優勢是使用公匙加密來進行伺服器驗證。時不時會出現關於 OpenSSH 零日漏洞的傳言[1]。本文將描述如何設定你的 Linux 或類 Unix 系統以提高 sshd 的安全性。
OpenSSH 預設設定
sshd_config
(位於 /etc/ssh/
)1、 基於公匙的登入
OpenSSH 服務支援各種驗證方式。推薦使用公匙加密驗證。首先,使用以下 ssh-keygen
1024 位或低於它的 DSA 和 RSA 加密是很弱的,請不要使用。當考慮 ssh 客戶端向後相容性的時候,請使用 RSA密匙代替 ECDSA 密匙。所有的 ssh 金鑰要麼使用 ED25519 ,要麼使用 RSA,不要使用其它型別。
$ ssh-keygen -t key_type -b bits -C "comment"
示例:
$ ssh-keygen -t ed25519 -C "Login to production cluster at xyz corp"
或
$ ssh-keygen -t rsa -b 4096-f ~/.ssh/id_rsa_aws_$(date+%
Y-%m-%d)-C "AWS key for abc corp clients"
下一步,使用 ssh-copy-id
命令安裝公匙:
$ ssh-copy-id-i /path/to/public-key-file [email protected]
或
$ ssh-copy-id [email protected]-server-ip-or-dns-name
示例:
$ ssh-copy-id [email protected]-aws-server
提示輸入使用者名稱和密碼的時候,確認基於 ssh 公匙的登入是否工作:
$ ssh [email protected]-aws-
server
OpenSSH 服務安全最佳實踐
更多有關 ssh 公匙的資訊,參照以下文章:
2、 禁用 root 使用者登入
禁用 root 使用者登入前,確認普通使用者可以以 root 身份登入。例如,允許使用者 vivek 使用 sudo
命令以 root 身份登入。
在 Debian/Ubuntu 系統中如何將使用者 vivek 新增到 sudo 組中
允許 sudo 組中的使用者執行任何命令。 將使用者 vivek 新增到 sudo 組中[6]:
$ sudo adduser vivek sudo
使用 id 命令[7] 驗證使用者組。
$ id vivek
在 CentOS/RHEL 系統中如何將使用者 vivek 新增到 sudo 組中
在 CentOS/RHEL 和 Fedora 系統中允許 wheel 組中的使用者執行所有的命令。使用 usermod
命令將使用者 vivek 新增到 wheel 組中:
$ sudousermod-aG wheel vivek
$ id vivek
測試 sudo 許可權並禁用 ssh root 登入
測試並確保使用者 vivek 可以以 root 身份登入執行以下命令:
$ sudo-i
$ sudo/etc/init.d/sshd status
$ sudosystemctl status httpd
新增以下內容到 sshd_config
檔案中來禁用 root 登入:
PermitRootLoginno
ChallengeResponseAuthenticationno
PasswordAuthenticationno
UsePAMno
更多資訊參見“如何通過禁用 Linux 的 ssh 密碼登入來增強系統安全[8]” 。
3、 禁用密碼登入
所有的密碼登入都應該禁用,僅留下公匙登入。新增以下內容到 sshd_config
檔案中:
AuthenticationMethods publickey
PubkeyAuthenticationyes
CentOS 6.x/RHEL 6.x 系統中老版本的 sshd 使用者可以使用以下設定:
PubkeyAuthenticationyes
4、 限制使用者的 ssh 訪問
預設狀態下,所有的系統使用者都可以使用密碼或公匙登入。但是有些時候需要為 FTP 或者 email 服務建立 UNIX/Linux 使用者。然而,這些使用者也可以使用 ssh 登入系統。他們將獲得訪問系統工具的完整許可權,包括編譯器和諸如 Perl、Python(可以開啟網路端口乾很多瘋狂的事情)等的指令碼語言。通過新增以下內容到 sshd_config
檔案中來僅允許使用者 root、vivek 和 jerry 通過 SSH 登入系統:
AllowUsers vivek jerry
當然,你也可以新增以下內容到 sshd_config
檔案中來達到僅拒絕一部分使用者通過 SSH 登入系統的效果。
DenyUsers root saroj anjali foo
你也可以通過配置 Linux PAM[9] 來禁用或允許使用者通過 sshd 登入。也可以允許或禁止一個使用者組列表[10]通過 ssh 登入系統。
5、 禁用空密碼
你需要明確禁止空密碼賬戶遠端登入系統,更新 sshd_config
檔案的以下內容:
PermitEmptyPasswordsno
6、 為 ssh 使用者或者密匙使用強密碼
為密匙使用強密碼和短語的重要性再怎麼強調都不過分。暴力破解可以起作用就是因為使用者使用了基於字典的密碼。你可以強制使用者避開字典密碼[11]並使用約翰的開膛手工具[12]來檢測弱密碼。以下是一個隨機密碼生成器(放到你的 ~/.bashrc
下):
genpasswd(){
local l=$1
["$l"==""]&& l=20
tr-dc A-Za-z0-9_ </dev/urandom |head-c ${l}|xargs
}
執行:
genpasswd 16
輸出:
uw8CnDVMwC6vOKgW
7、 為 SSH 的 22埠配置防火牆
你需要更新 iptables
/ufw
/firewall-cmd
或 pf 防火牆配置來為 ssh 的 TCP 埠 22 配置防火牆。一般來說,OpenSSH 服務應該僅允許本地或者其他的遠端地址訪問。
Netfilter(Iptables) 配置
更新 /etc/sysconfig/iptables (Redhat 和其派生系統特有檔案) [16] 實現僅接受來自於 192.168.1.0/24 和 202.54.1.5/29 的連線,輸入:
-A RH-Firewall-1-INPUT -s 192.168.1.0/24-m state --state NEW -p tcp --dport 22-j ACCEPT
-A RH-Firewall-1-INPUT -s 202.54.1.5/29
相關推薦
20 個 OpenSSH 最佳安全實踐 | Linux 中國
OpenSSH 是 SSH 協議的一個實現。一般通過 scp 或 sftp 用於遠端登入、備份、遠端檔案傳輸等功能。SSH能夠完美保障兩個網路或系統間資料傳輸的保密性和完整性。儘管如此,它最大的優勢是使用公匙加密來進行伺服器驗證。時不時會出現關於 OpenSSH 零日漏洞的傳言[1]。本文將描述如何設定你的
20 個 OpenSSH 最佳安全實踐
1.0 保密 was 打補丁 penssh 關鍵詞 phy mit tput 來源:https://linux.cn/article-9394-1.html OpenSSH 是 SSH 協議的一個實現。一般通過 scp 或 sftp 用於遠程登錄、備份、遠程文件傳輸等功能。
Top20的OpenSSH伺服器最佳安全實踐--SSHD_CONFIG配置檔案詳細解讀
OpenSSH是SSH協議的實現。建議使用OpenSSH進行遠端登入,備份,通過scp或sftp進行遠端檔案傳輸等等。SSH非常適合保持兩個網路和系統之間交換的資料的機密性和完整性。但是,主要優點是伺服器身份驗證,通過使用公鑰加密。有時會有關於OpenSSH零日攻擊的傳聞。此頁面顯
管理API訪問令牌的最佳安全實踐
【51CTO.com快譯】如今,無論是基於Web的應用、還是本地原生的各種程式,都需要通過後端的API來實現資源的訪問保護。要想得到API的授權,各種訪問請求就必須包含相應的訪問令牌或金鑰。本文將向API提供者和應用程式開發人員重點介紹,我們在管理訪問令牌中的各種最佳安全實踐。 管理AP
[譯] 最佳安全實踐:在 Java 和 Android 中使用 AES 進行對稱加密
原文地址:Security Best Practices: Symmetric Encryption with AES in Java and Android 原文作者:Patrick Favre-Bulle 最佳安全實踐:在 Java 和 Android 中使用 AES 進行
[譯]最佳安全實踐:在 Java 和 Android 中使用 AES 進行對稱加密:第2部分:AES-CBC + HMAC
原文地址:Security Best Practices: Symmetric Encryption with AES in Java and Android: Part 2: AES-CBC + HMAC 本文是我上一篇文章:“最佳安全實踐:在 Java 和 Android 中使用 AES 進行
面向敏捷開發團隊的 7 個開源專案管理工具 | Linux 中國
在這篇開源專案管理工具的綜述中,讓我們來了解一下支援 Scrum、看板等敏捷開發模式的軟體。--
Kubernetes 部署的最佳安全實踐
Kubernetes提供了許多可以極大地提高應用程式安全性的選項。配置它們要求你熟悉 Kubernetes 以及其部署的安全要求。我們在這裡強調的最佳實踐與容器生命週期相匹配:構建、分發和執行,並專門為Kubernetes量身打造。我們在執行在Google雲平臺
MongoDB最佳安全實踐
在前文[15分鐘從零開始搭建支援10w+使用者的生產環境(二)]中提了一句MongoDB的安全,有小夥伴留心了,在公眾號後臺問。所以今天專門開個文,寫一下關於MongoDB的安全。 一、我的一次MongoDB被黑經歷 近幾年,MongoDB應用越來越多,MongoDB也越來越火。 從2015年開始,Mo
Kubernetes 最佳安全實踐指南
> 原文連結:[https://fuckcloudnative.io/posts/security-best-practices-for-kubernetes-pods/](https://fuckcloudnative.io/posts/security-best-practices-for-kuberne
15個適用於Linux的最佳安全工具
面對現今網際網路各類病毒和攻擊的層出不窮,即使是Linux也不能倖免。本文我將為大家介紹15款Linux安全工具並附下載連結: 1. Firejail Firejail是一個基於c的社群SUID專案,通過管理使用Linux名稱空間和
20個超實用的JavaScript技巧及最佳實踐
眾所周知,JavaScript是一門非常流行的程式語言,開發者用它不僅可以開發出炫麗的Web程式,還可以用它來開發一些移動應用程式(如PhoneGap或Appcelerator),它還有一些服務端實現,比如NodeJS、Wakanda以及其它實現。此外,許多開發者都會把JavaScript選為入門語言,使
關於JAVA異常處理的20個最佳實踐
部分 http 行數據 似的 輸入 如果 並不會 中產 建議 在我們深入了解異常處理最佳實踐的深層概念之前,讓我們從一個最重要的概念開始,那就是理解在JAVA中有三種一般類型的可拋類: 檢查性異常(checked exceptions)、非檢查性異常(unchecked E
Java 異常處理的 20 個最佳實踐,你知道幾個?
異常處理是 Java 開發中的一個重要部分,是為了處理任何錯誤狀況,比如資源不可訪問,非法輸入,空輸入等等。Java 提供了幾個異常處理特性,以try,catch 和 finally 關鍵字的形式內建於語言自身之中。Java 程式語言也允許建立新的自定義異常,並通過使用 throw 和 throws關鍵字丟擲
6 個開源的家庭自己主動化工具 | Linux 中國
用這些開源軟體解決方式構建一個更智慧的家庭。 -- Jason Baker 實用的原文連結請訪問文末的“ 原文連結”獲得可點選的文內連結、全尺寸原圖和相關文章。 致謝 編譯自 | https://opensource.com/life/
菜鳥們,通過這幾個樣例,包你學會 uptime 命令的使用方法 | Linux 中國
望名生義。uptime 命令告訴你係統啟動了(執行了)多長時間。這是語法:-- Himanshu Arora 本文導航◈ Linux uptime 命令 09%◈ Q1、怎樣使用 uptime 命令 22%◈ Q2、怎樣以更人
/var/log目錄下的20個Linux日誌檔案功能詳解
原文連結 以下介紹的是20個位於/var/log/ 目錄之下的日誌檔案。其中一些只有特定版本採用,如dpkg.log只能在基於Debian的系統中看到。 /var/log/messages — 包括整體系統資訊,其中也包含系統啟動期間的日誌。此外,mail,cron,daem
20個堪稱神器的Linux命令列軟體
1.ag:比grep、ack更快的遞迴搜尋檔案內容。 2.tig:字元模式下互動檢視git專案,可以替代git命令。 3.mycli:mysql客戶端,支援語法高亮和命令補全,效果類似ipython,可以替代mysql命令。 4.jq: json檔案處理以及格式化顯示,支援高亮,可以替換py
從入門到精通,全球20個最佳大資料視覺化工具
資料視覺化之初級篇 零程式設計工具 1. Tableau Tableau 是一款企業級的大資料視覺化工具。Tableau 可以讓你輕鬆建立圖形,表格和地圖。 它不僅提供了PC桌面版,還提供了伺服器解決方案,可以讓您線上生成視覺化報告。伺服器解決方案可以提