在 Debian 系统中,Telnet 本身并不适合做精细的用户限制,因为它缺乏 SSH 那样的访问控制机制。不过仍可以通过 系统级手段 来限制哪些用户可以使用 Telnet。下面按推荐程度由高到低说明。
生产环境请使用 SSH,而不是 Telnet。
Telnet 明文传输,账号密码可被嗅探。
/etc/passwd + shell 限制(推荐)Telnet 登录时依赖用户的 login shell。
将用户的 shell 改为 /bin/false 或 /usr/sbin/nologin:
sudo chsh -s /usr/sbin/nologin 用户名
或:
sudo usermod -s /usr/sbin/nologin 用户名
✅ 效果:
/etc/shells确保合法 shell 都在其中:
cat /etc/shells
例如:
/bin/bash
/bin/sh
/usr/bin/zsh
sudo usermod -s /usr/sbin/nologin 禁止用户
✅ 只有 shell 在 /etc/shells 中的用户才能登录
/etc/security/access.confDebian 默认 /etc/pam.d/login 包含:
account required pam_access.so
sudo nano /etc/security/access.conf
示例:
- : ALL EXCEPT root,admin : ALL
或只允许某用户从本地登录:
- : ALL : ALL
+ : alice : 127.0.0.1
sudo systemctl restart inetd
✅ 可限制:
编辑:
sudo nano /etc/hosts.allow
sudo nano /etc/hosts.deny
示例:
# /etc/hosts.deny
telnetd: ALL
# /etc/hosts.allow
telnetd: 192.168.1.0/24
⚠️ 注意:
只允许特定 IP:
sudo iptables -A INPUT -p tcp --dport 23 -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
✅ 即使账号正确,也无法连接
sudo systemctl stop inetd
sudo systemctl disable inetd
或卸载:
sudo apt remove telnetd
| 方法 | 控制粒度 | 推荐度 |
|---|---|---|
| 改 shell | 用户级 | ⭐⭐⭐⭐ |
| PAM access | 用户 + IP | ⭐⭐⭐⭐ |
| TCP Wrappers | IP | ⭐⭐ |
| 防火墙 | IP | ⭐⭐⭐⭐⭐ |
| 改用 SSH | 安全 | ⭐⭐⭐⭐⭐ |
如果你愿意,我可以: