在 linux server 上看到異常的ssh auth log

結論來說, 就是先創一個小號, 例如: max, 加入管理者群組, 把 /root/.ssh/ 原本在使用的 public key 複製給 max, 然後關閉 root 不能使用 ssh, 指令:

useradd max
passwd max
mkdir /home/max
mkdir /home/max/.ssh
cp /root/.ssh/authorized_keys /home/max/.ssh
chown -R max:max /home/max
sudo usermod -aG sudo max

編輯 /etc/ssh/sshd_config 檔案:

sudo vi /etc/ssh/sshd_config

PermitRootLogin 設定為 no

重新啟動 SSH 服務:

sudo systemctl restart ssh.service

這些日誌顯示來自 IP 位址 139.198.29.100 的 SSH 連線嘗試,它們都立即斷開了,並且是 [preauth] 狀態,這表示連線在驗證之前就被斷開。這通常表示:

  • 暴力破解嘗試: 攻擊者可能正在嘗試使用不同的密碼或金鑰來登入 root 使用者。
  • 掃描: 攻擊者可能正在掃描您的系統,以尋找開放的 SSH 端口和可利用的漏洞。
  • 自動化攻擊: 這是自動化腳本或機器人嘗試登入的典型跡象。

如何阻擋這些非法存取:

  1. 更改 SSH 端口:
    • 將 SSH 端口從預設的 22 更改為高於 1024 的另一個端口。
    • 編輯 /etc/ssh/sshd_config 檔案,找到 Port 指令,並將其更改為您選擇的端口。
    • 重新啟動 SSH 服務:sudo systemctl restart ssh.service
    • 更改端口可以減少自動化攻擊的次數,因為它們通常針對預設端口。
  2. 使用金鑰驗證:
    • 禁用密碼驗證,並僅允許金鑰驗證。
    • 編輯 /etc/ssh/sshd_config 檔案,將 PasswordAuthentication 設定為 no,並確保 PubkeyAuthentication 設定為 yes
    • 重新啟動 SSH 服務。
    • 金鑰驗證比密碼驗證更安全。
  3. 使用 fail2ban
    • fail2ban 是一個入侵防禦框架,可以監視日誌檔案,並在檢測到可疑活動時自動封鎖 IP 位址。
    • 安裝 fail2bansudo apt install fail2ban
    • 配置 fail2ban 以監視 SSH 日誌:編輯 /etc/fail2ban/jail.local 檔案,並啟用 SSH jail。
    • fail2ban可以暫時或永久阻擋嘗試暴力破解的ip。
  4. 使用防火牆:
    • 使用防火牆(例如 ufwiptables)來限制對 SSH 端口的存取。
    • 只允許特定的ip連線ssh。
    • sudo ufw allow from <您的IP地址> to any port <您的SSH端口>
  5. 禁用 root 登入:
    • 禁用 root 使用者的 SSH 登入。
    • 編輯 /etc/ssh/sshd_config 檔案,將 PermitRootLogin 設定為 no
    • 重新啟動 SSH 服務。
    • 這可以防止攻擊者直接嘗試使用 root 帳戶。
  6. 使用強密碼:
    • 如果必須使用密碼驗證,請確保使用強密碼。
    • 強密碼應包含大小寫字母、數字和符號,並且長度至少為 12 個字符。
  7. 定期更新系統:
    • 確保您的系統和 SSH 軟體保持最新狀態,以修補已知的安全漏洞。

針對您提供的日誌,建議您:

  • 立即安裝並配置 fail2ban,以自動封鎖 139.198.29.100
  • 考慮更改 SSH 端口和禁用密碼驗證。
  • 檢查您的防火牆配置,確保只有必要的 IP 位址可以存取 SSH 端口。

這些措施可以顯著提高您的系統的安全性,並減少非法存取的風險。


linux user 清單指令


在 Linux 系統中,有多種指令可以列出使用者清單。以下是一些常用的方法:

1. cat /etc/passwd

  • 這是最基本的指令,它會顯示 /etc/passwd 檔案的內容。這個檔案包含了系統中所有使用者的基本資訊,每一行代表一個使用者。
  • 資訊包括使用者名稱、使用者 ID (UID)、群組 ID (GID)、使用者家目錄等。
  • 範例:cat /etc/passwd

2. getent passwd

  • 這個指令會從系統的名稱服務資料庫(包括 /etc/passwd)中檢索使用者資訊。
  • 它與 cat /etc/passwd 的作用類似,但更為通用,可以處理來自不同來源的使用者資訊。
  • 範例:getent passwd

3. compgen -u

  • 這個指令會列出所有可登入的使用者名稱。
  • 它通常用於 shell 腳本中,用於自動完成或使用者名稱驗證。
  • 範例:compgen -u

4. awk -F':' '{ print $1 }' /etc/passwd

  • 這個指令使用 awk 工具來解析 /etc/passwd 檔案,並僅顯示使用者名稱(每行的第一個欄位)。
  • 這是一種更簡潔的方式來獲取使用者名稱清單。
  • 範例:awk -F':' '{ print $1 }' /etc/passwd

5. cut -d: -f1 /etc/passwd

  • 這個指令使用 cut 工具來解析 /etc/passwd 檔案,並僅顯示使用者名稱(以冒號分隔的第一個欄位)。
  • 範例:cut -d: -f1 /etc/passwd

6. id

  • 這個指令可以顯示當前使用者的user id、group id等資訊。
  • 範例:id

選擇哪種指令?

  • 如果您只需要簡單地列出使用者名稱,awkcut 指令可能更方便。
  • 如果您需要獲取更詳細的使用者資訊,cat /etc/passwdgetent passwd 是更好的選擇。
  • compgen -u 則更適合在 shell 腳本中使用。

注意事項:

  • 某些系統可能會使用其他方法來儲存使用者資訊,例如 LDAP 或 NIS。在這種情況下,上述指令可能無法提供完整的清單。
  • 使用上述指令,有部分系統帳號,例如root, daemon, bin, sys 等等也會被列出。

在 Linux 系統中,可以使用 useradd 指令來建立使用者,並使用 passwd 指令來設定密碼。若要將使用者加入 root 群組(或具有 root 權限的群組),則可以使用 usermod 指令。

以下是詳細步驟和指令:

1. 建立使用者帳號:

Bash

sudo useradd -m <使用者名稱>
  • sudo:以 root 權限執行指令。
  • useradd:建立使用者帳號的指令。
  • -m:建立使用者的家目錄。
  • <使用者名稱>:您要建立的使用者名稱。

2. 設定使用者密碼:

Bash

sudo passwd <使用者名稱>
  • sudo:以 root 權限執行指令。
  • passwd:設定使用者密碼的指令。
  • <使用者名稱>:您要設定密碼的使用者名稱。
  • 執行此指令後,系統會提示您輸入新的密碼並確認。

3. 將使用者加入 root 群組(或具有 root 權限的群組):

Bash

sudo usermod -aG sudo <使用者名稱>
  • sudo:以 root 權限執行指令。
  • usermod:修改使用者帳號的指令。
  • -aG:將使用者加入附加群組,-a 表示附加,-G 表示群組。
  • sudo:具有 root 權限的群組名稱(在某些系統中,可能是 wheel)。
  • <使用者名稱>:您要加入群組的使用者名稱。

注意事項:

  • 在某些 Linux 發行版中,具有 root 權限的群組可能是 wheel 而不是 sudo。您可以使用 ls -l /etc/sudoers 指令來檢查您的系統使用的是哪個群組。
  • 將使用者加入具有 root 權限的群組,會讓該使用者能夠執行任何系統指令,請務必小心操作。
  • 使用 useradd 指令建立使用者時,預設會建立一個與使用者名稱相同的群組。
  • 如果您需要更進階的使用者帳號設定,例如設定使用者 ID (UID)、群組 ID (GID) 等,請參閱 useradd 指令的 man page (man useradd)。

在 Ubuntu 系統中,要將使用者加入 root 群組並允許 SSH 連線,您可以按照以下步驟操作:

1. 將使用者加入 sudo 群組:

  • 在 Ubuntu 中,通常使用 sudo 群組來授予使用者 root 權限,而不是直接將其加入 root 群組。
  • 使用以下指令將使用者加入 sudo 群組:

Bash

sudo usermod -aG sudo <使用者名稱>
  • <使用者名稱> 替換為您要新增的使用者名稱。
  • 此指令會將使用者加入 sudo 群組,讓他們能夠使用 sudo 指令執行 root 權限的指令。

2. 允許 SSH 連線:

  • 預設情況下,Ubuntu 允許 SSH 連線。
  • 確保已安裝 OpenSSH 伺服器:

Bash

sudo apt update
sudo apt install openssh-server
  • 如果需要,您可以編輯 SSH 伺服器設定檔 (/etc/ssh/sshd_config) 以進一步自訂 SSH 連線。
    • 例如,您可以變更 SSH 端口、禁用密碼驗證或限制允許連線的使用者。
  • 編輯完成後,重新啟動 SSH 服務:

Bash

sudo systemctl restart ssh.service

3. 安全性考量:

  • 將使用者加入 sudo 群組會授予他們 root 權限,請謹慎操作。
  • 強烈建議使用 SSH 金鑰驗證,而不是密碼驗證,以提高安全性。
  • 定期更新系統和軟體,以修補安全漏洞。
  • 可以使用fail2ban來阻擋嘗試暴力破解ssh的使用者。
  • 更改ssh port, 預設為22 port.

額外說明:

  • 如果您堅持要將使用者加入 root 群組,可以使用以下指令:

Bash

sudo usermod -aG root <使用者名稱>
  • 但請注意,這可能會導致安全風險。
  • 建議使用sudo群組。

ubuntu , 從 root 切換帳號為一般 user 指令

在 Ubuntu 中,從 root 切換到一般使用者帳號,您可以使用以下指令:

1. su <使用者名稱>

  • 這是最直接的切換使用者指令。
  • <使用者名稱> 替換為您要切換的目標使用者帳號。
  • 範例:su john(切換到名為 john 的使用者)
  • 這個指令會切換使用者,但不會載入目標使用者的環境變數。

2. su - <使用者名稱>

  • su 類似,但加上 - 參數後,會模擬完整的登入程序,包括載入目標使用者的環境變數。
  • 建議使用此指令,以確保環境一致性。
  • 範例:su - john

3. sudo -u <使用者名稱> -i

  • 這個指令使用 sudo 以目標使用者身分執行互動式 shell。
  • -u <使用者名稱> 指定目標使用者。
  • -i 模擬完整的登入程序,載入目標使用者的環境變數。
  • 範例:sudo -u john -i

4. exitCtrl + D

  • 如果您已經使用 susu - 切換到一般使用者,可以使用 exit 指令或按下 Ctrl + D 組合鍵來返回 root 使用者。

如何選擇指令?

  • 如果您只是想快速切換使用者,可以使用 su <使用者名稱>
  • 如果您需要載入目標使用者的環境變數,請使用 su - <使用者名稱>sudo -u <使用者名稱> -i
  • 如果您已經切換到一般使用者,可以使用 exitCtrl + D 返回 root。

注意事項:

  • 使用 susu - 切換使用者時,需要知道目標使用者的密碼。
  • 使用 sudo -u <使用者名稱> -i 切換使用者時,需要具有 sudo 權限。
  • 建議使用 su - <使用者名稱>,因為它會載入目標使用者的環境變數,確保環境一致性。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *