結論來說, 就是先創一個小號, 例如: 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 端口和可利用的漏洞。
- 自動化攻擊: 這是自動化腳本或機器人嘗試登入的典型跡象。
如何阻擋這些非法存取:
- 更改 SSH 端口:
- 將 SSH 端口從預設的 22 更改為高於 1024 的另一個端口。
- 編輯
/etc/ssh/sshd_config
檔案,找到Port
指令,並將其更改為您選擇的端口。 - 重新啟動 SSH 服務:
sudo systemctl restart ssh.service
。 - 更改端口可以減少自動化攻擊的次數,因為它們通常針對預設端口。
- 使用金鑰驗證:
- 禁用密碼驗證,並僅允許金鑰驗證。
- 編輯
/etc/ssh/sshd_config
檔案,將PasswordAuthentication
設定為no
,並確保PubkeyAuthentication
設定為yes
。 - 重新啟動 SSH 服務。
- 金鑰驗證比密碼驗證更安全。
- 使用
fail2ban
:fail2ban
是一個入侵防禦框架,可以監視日誌檔案,並在檢測到可疑活動時自動封鎖 IP 位址。- 安裝
fail2ban
:sudo apt install fail2ban
。 - 配置
fail2ban
以監視 SSH 日誌:編輯/etc/fail2ban/jail.local
檔案,並啟用 SSH jail。 - fail2ban可以暫時或永久阻擋嘗試暴力破解的ip。
- 使用防火牆:
- 使用防火牆(例如
ufw
或iptables
)來限制對 SSH 端口的存取。 - 只允許特定的ip連線ssh。
sudo ufw allow from <您的IP地址> to any port <您的SSH端口>
- 使用防火牆(例如
- 禁用
root
登入:- 禁用
root
使用者的 SSH 登入。 - 編輯
/etc/ssh/sshd_config
檔案,將PermitRootLogin
設定為no
。 - 重新啟動 SSH 服務。
- 這可以防止攻擊者直接嘗試使用
root
帳戶。
- 禁用
- 使用強密碼:
- 如果必須使用密碼驗證,請確保使用強密碼。
- 強密碼應包含大小寫字母、數字和符號,並且長度至少為 12 個字符。
- 定期更新系統:
- 確保您的系統和 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
選擇哪種指令?
- 如果您只需要簡單地列出使用者名稱,
awk
或cut
指令可能更方便。 - 如果您需要獲取更詳細的使用者資訊,
cat /etc/passwd
或getent 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. exit
或 Ctrl + D
- 如果您已經使用
su
或su -
切換到一般使用者,可以使用exit
指令或按下Ctrl + D
組合鍵來返回 root 使用者。
如何選擇指令?
- 如果您只是想快速切換使用者,可以使用
su <使用者名稱>
。 - 如果您需要載入目標使用者的環境變數,請使用
su - <使用者名稱>
或sudo -u <使用者名稱> -i
。 - 如果您已經切換到一般使用者,可以使用
exit
或Ctrl + D
返回 root。
注意事項:
- 使用
su
或su -
切換使用者時,需要知道目標使用者的密碼。 - 使用
sudo -u <使用者名稱> -i
切換使用者時,需要具有sudo
權限。 - 建議使用
su - <使用者名稱>
,因為它會載入目標使用者的環境變數,確保環境一致性。