1. 程式人生 > >20 個 OpenSSH 最佳安全實踐 | Linux 中國

20 個 OpenSSH 最佳安全實踐 | Linux 中國

OpenSSH 是 SSH 協議的一個實現。一般通過 scp 或 sftp 用於遠端登入、備份、遠端檔案傳輸等功能。SSH能夠完美保障兩個網路或系統間資料傳輸的保密性和完整性。儘管如此,它最大的優勢是使用公匙加密來進行伺服器驗證。時不時會出現關於 OpenSSH 零日漏洞的傳言[1]。本文將描述如何設定你的 Linux 或類 Unix 系統以提高 sshd 的安全性。

OpenSSH 預設設定

◈ TCP 埠 - 22
◈ OpenSSH 服務配置檔案 - sshd_config (位於 /etc/ssh/

1、 基於公匙的登入

OpenSSH 服務支援各種驗證方式。推薦使用公匙加密驗證。首先,使用以下 ssh-keygen

命令在本地電腦上建立密匙對:

1024 位或低於它的 DSA 和 RSA 加密是很弱的,請不要使用。當考慮 ssh 客戶端向後相容性的時候,請使用 RSA密匙代替 ECDSA 密匙。所有的 ssh 金鑰要麼使用 ED25519 ,要麼使用 RSA,不要使用其它型別。

  1. $ ssh-keygen -t key_type -b bits -C "comment"

示例:

  1. $ ssh-keygen -t ed25519 -C "Login to production cluster at xyz corp"

  2. $ 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 命令安裝公匙:

  1. $ ssh-copy-id-i /path/to/public-key-file [email protected]

  2. $ ssh-copy-id [email protected]-server-ip-or-dns-name

示例:

  1. $ ssh-copy-id [email protected]-aws-server

提示輸入使用者名稱和密碼的時候,確認基於 ssh 公匙的登入是否工作:

  1. $ ssh [email protected]-aws-

    server

OpenSSH 服務安全最佳實踐

更多有關 ssh 公匙的資訊,參照以下文章:

◈ 為備份指令碼設定無密碼安全登入[2]
◈ 如何為一個 Linux/類 Unix 系統設定 SSH 登入密匙[4]
◈ 如何使用 Ansible 工具上傳 ssh 登入授權公匙[5]

2、 禁用 root 使用者登入

禁用 root 使用者登入前,確認普通使用者可以以 root 身份登入。例如,允許使用者 vivek 使用 sudo 命令以 root 身份登入。

在 Debian/Ubuntu 系統中如何將使用者 vivek 新增到 sudo 組中

允許 sudo 組中的使用者執行任何命令。 將使用者 vivek 新增到 sudo 組中[6]

  1. $ sudo adduser vivek sudo

使用 id 命令[7] 驗證使用者組。

  1. $ id vivek

在 CentOS/RHEL 系統中如何將使用者 vivek 新增到 sudo 組中

在 CentOS/RHEL 和 Fedora 系統中允許 wheel 組中的使用者執行所有的命令。使用 usermod 命令將使用者 vivek 新增到 wheel 組中:

  1. $ sudousermod-aG wheel vivek

  2. $ id vivek

測試 sudo 許可權並禁用 ssh root 登入

測試並確保使用者 vivek 可以以 root 身份登入執行以下命令:

  1. $ sudo-i

  2. $ sudo/etc/init.d/sshd status

  3. $ sudosystemctl status httpd

新增以下內容到 sshd_config 檔案中來禁用 root 登入:

  1. PermitRootLoginno

  2. ChallengeResponseAuthenticationno

  3. PasswordAuthenticationno

  4. UsePAMno

更多資訊參見“如何通過禁用 Linux 的 ssh 密碼登入來增強系統安全[8]” 。

3、 禁用密碼登入

所有的密碼登入都應該禁用,僅留下公匙登入。新增以下內容到 sshd_config 檔案中:

  1. AuthenticationMethods publickey

  2. PubkeyAuthenticationyes

CentOS 6.x/RHEL 6.x 系統中老版本的 sshd 使用者可以使用以下設定:

  1. PubkeyAuthenticationyes

4、 限制使用者的 ssh 訪問

預設狀態下,所有的系統使用者都可以使用密碼或公匙登入。但是有些時候需要為 FTP 或者 email 服務建立 UNIX/Linux 使用者。然而,這些使用者也可以使用 ssh 登入系統。他們將獲得訪問系統工具的完整許可權,包括編譯器和諸如 Perl、Python(可以開啟網路端口乾很多瘋狂的事情)等的指令碼語言。通過新增以下內容到 sshd_config 檔案中來僅允許使用者 root、vivek 和 jerry 通過 SSH 登入系統:

  1. AllowUsers vivek jerry

當然,你也可以新增以下內容到 sshd_config 檔案中來達到僅拒絕一部分使用者通過 SSH 登入系統的效果。

  1. DenyUsers root saroj anjali foo

你也可以通過配置 Linux PAM[9] 來禁用或允許使用者通過 sshd 登入。也可以允許或禁止一個使用者組列表[10]通過 ssh 登入系統。

5、 禁用空密碼

你需要明確禁止空密碼賬戶遠端登入系統,更新 sshd_config 檔案的以下內容:

  1. PermitEmptyPasswordsno

6、 為 ssh 使用者或者密匙使用強密碼

為密匙使用強密碼和短語的重要性再怎麼強調都不過分。暴力破解可以起作用就是因為使用者使用了基於字典的密碼。你可以強制使用者避開字典密碼[11]並使用約翰的開膛手工具[12]來檢測弱密碼。以下是一個隨機密碼生成器(放到你的 ~/.bashrc 下):

  1. genpasswd(){

  2. local l=$1

  3. ["$l"==""]&& l=20

  4. tr-dc A-Za-z0-9_ </dev/urandom |head-c ${l}|xargs

  5. }

執行:

  1. genpasswd 16

輸出:

  1. uw8CnDVMwC6vOKgW

◈ 使用 mkpasswd / makepasswd / pwgen 生成隨機密碼[13]
◈ Linux / UNIX: 生成密碼[14]
◈ Linux 隨機密碼生成命令[15]

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 的連線,輸入:

  1. -A RH-Firewall-1-INPUT -s 192.168.1.0/24-m state --state NEW -p tcp --dport 22-j ACCEPT

  2. -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目錄下的20Linux日誌檔案功能詳解

    原文連結 以下介紹的是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桌面版,還提供了伺服器解決方案,可以讓您線上生成視覺化報告。伺服器解決方案可以提