在 Ubuntu 上“限制 SSH 用户”通常包含几类需求,下面按常见场景给你一套实用做法(基于 OpenSSH)。
一、限制「哪些用户/组」可以登录 SSH
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
1️⃣ 只允许指定用户
AllowUsers alice bob
⚠️ 未列出的用户将无法登录(包括 root)。
2️⃣ 只允许指定用户组
AllowGroups sshusers
然后把用户加入组:
sudo adduser alice sshusers
3️⃣ 禁止某些用户
DenyUsers testuser
DenyGroups nogroup
修改后重启 SSH:
sudo systemctl restart ssh
二、禁止 root 直接登录(强烈推荐)
PermitRootLogin no
三、限制用户只能使用密钥登录(禁用密码)
PasswordAuthentication no
PubkeyAuthentication yes
用户需提前配置:
ssh-copy-id user@server
四、限制用户「只能 SFTP,不能 SSH」(最常见)
1️⃣ 创建用户
sudo adduser sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser
2️⃣ 配置 SSH
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
3️⃣ 设置目录权限(非常关键)
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
五、限制用户「登录后的权限」(系统层面)
1️⃣ 使用 sudo 限制命令
sudo visudo
示例:
alice ALL=(ALL) /usr/bin/systemctl restart nginx
2️⃣ 使用受限 shell
sudo usermod -s /bin/rbash username
六、限制来源 IP(安全加固)
方法 1:SSH 配置
Match User alice
AllowTcpForwarding no
方法 2:防火墙(推荐)
sudo ufw allow from 192.168.1.0/24 to any port 22
七、查看谁登录过 SSH
last
journalctl -u ssh
总结对照表
| 需求 | 做法 |
|---|---|
| 限定登录用户 | AllowUsers |
| 禁止 root | PermitRootLogin no |
| 禁止密码 | PasswordAuthentication no |
| 只能 SFTP | Match + internal-sftp |
| 限制命令 | sudo / rbash |
| 限制 IP | ufw |
如果你能告诉我:
- 是服务器多人共用?
- 还是只给客户 SFTP?
- 还是禁止某些用户 SSH 但保留系统账号?
我可以给你一套精确配置示例。