Telnet 為明文傳輸協定,生產環境強烈建議改用 SSH。但在舊系統維護、網路設備管理、教學實驗等場景仍可能需要部署 Telnet。本文詳細說明 Red Hat/CentOS/Fedora 系列下 Telnet Server 的安裝、啟動、連接埠修改、存取控制與 Root 登入限制。
# 檢查是否已安裝
rpm -q telnet telnet-server
# 安裝(RHEL/CentOS 7/8/9, Fedora)
dnf install telnet telnet-server -y
# 或 yum install telnet telnet-server -y
# RHEL 9 / Fedora 可能已將 telnet-server 拆分為 krb5-telnet-server
dnf install krb5-telnet-server -y
兩個套件角色:
- telnet / telnet-client:客戶端程式 /usr/bin/telnet。
- telnet-server / krb5-telnet-server:伺服器端 xinetd 服務定義。
ntsysv
# 在清單中找到 telnet 或 krb5-telnet,按空白鍵選取(*),Tab 到 OK,Enter 確認
# RHEL 6/7 傳統路徑
vi /etc/xinetd.d/telnet
# 或 RHEL 8/9 krb5-telnet
vi /etc/xinetd.d/krb5-telnet
# 修改 disable = yes → disable = no
# 完整範例:
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
only_from = 192.168.1.0/24 10.0.0.0/8 # 建議限制來源 IP
}
systemctl restart xinetd
# 或舊版
service xinetd restart
telnet
# 或指定埠
telnet 23
成功將提示 Login: Password:。預設僅允許一般使用者登入,Root 被 PAM 拒絕。
vi /etc/servicestelnet,將 23/tcp 23/udp 改為未使用埠(如 2023)。systemctl restart xinetd。telnet 2023 。注意:修改 /etc/services 僅影響本機服務名稱解析,防火牆規則需同步開放新埠。
# /etc/hosts.allow
in.telnetd : 192.168.1.0/255.255.255.0 : ALLOW
in.telnetd : 10.0.0.0/255.0.0.0 : ALLOW
# /etc/hosts.deny
in.telnetd : ALL : DENY
見上方設定檔範例,直接在 service 區塊限制 IP 範圍。
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="23" accept'
firewall-cmd --reload
Root 登入被 PAM 模組 pam_securetty.so 阻擋。兩種解除方式:
vi /etc/pam.d/login#auth required pam_securetty.somv /etc/securetty /etc/securetty.bak最佳實踐:一般使用者登入後 su - 或 sudo -i 切換 Root,保留稽核軌跡。
systemctl disable --now xinetd 或 systemctl mask telnet.socket。部署 Telnet 易,安全用 Telnet 難。請將本指南視為「不得已而為之」的最小化風險操作手冊,優先推動 SSH 全面取代。