centos 如何添加子用户 赋予子用户所有权限 只允许子用户进行ssh登录
复制问题

在 CentOS 中创建子用户并配置 SSH 访问权限,以下是完整的步骤:
1. 创建新用户
# 创建新用户(例如用户名为 subuser)
sudo useradd -m -s /bin/bash subuser
# 设置用户密码
sudo passwd subuser
2. 赋予用户 sudo 权限
方法 1:添加到 wheel 组(推荐)
# 将用户添加到 wheel 组
sudo usermod -aG wheel subuser
# 确认 wheel 组有 sudo 权限
sudo visudo
# 确保以下行未被注释:
# %wheel ALL=(ALL) ALL
方法 2:直接编辑 sudoers 文件
sudo visudo
# 在文件末尾添加:
subuser ALL=(ALL:ALL) ALL
方法 3:创建专门的 sudoers 文件
sudo echo "subuser ALL=(ALL:ALL) ALL" > /etc/sudoers.d/subuser
sudo chmod 440 /etc/sudoers.d/subuser
3. 配置 SSH 只允许特定用户登录
编辑 SSH 配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo nano /etc/ssh/sshd_config
在配置文件中添加以下设置:
# 禁用 root 登录
PermitRootLogin no
# 只允许特定用户 SSH 登录
AllowUsers subuser
# 或者如果你想允许多个用户:
# AllowUsers subuser user2 user3
# 可选:更改默认 SSH 端口(增加安全性)
# Port 2222
# 禁用密码为空的账户
PermitEmptyPasswords no
# 启用公钥认证(推荐)
PubkeyAuthentication yes
# 可选:禁用密码认证,只允许密钥认证
# PasswordAuthentication no
重启 SSH 服务
# 测试配置文件语法
sudo sshd -t
# 如果没有错误,重启 SSH 服务
sudo systemctl restart sshd
4. 设置 SSH 密钥认证(推荐)
在客户端生成密钥对
# 在你的本地机器上执行
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将公钥复制到服务器
# 方法 1:使用 ssh-copy-id
ssh-copy-id subuser@your_server_ip
# 方法 2:手动复制
# 在服务器上执行:
sudo -u subuser mkdir -p /home/subuser/.ssh
sudo -u subuser touch /home/subuser/.ssh/authorized_keys
sudo -u subuser chmod 700 /home/subuser/.ssh
sudo -u subuser chmod 600 /home/subuser/.ssh/authorized_keys
# 然后将客户端的公钥内容添加到 authorized_keys 文件中
5. 进一步的安全配置
限制 SSH 连接尝试
在 /etc/ssh/sshd_config
中添加:
# 最大认证尝试次数
MaxAuthTries 3
# 最大会话数
MaxSessions 2
# 登录宽限时间
LoginGraceTime 60
# 客户端存活间隔
ClientAliveInterval 300
ClientAliveCountMax 2
配置防火墙
# 如果更改了 SSH 端口,需要开放新端口
sudo firewall-cmd --permanent --add-port=2222/tcp # 如果改了端口
sudo firewall-cmd --permanent --remove-service=ssh # 移除默认 SSH 服务
sudo firewall-cmd --reload
# 或者只允许特定 IP 访问 SSH
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='YOUR_IP' service name='ssh' accept"
sudo firewall-cmd --reload
6. 验证配置
测试新用户登录
# 从另一个终端测试(不要关闭当前会话)
ssh subuser@your_server_ip
# 测试 sudo 权限
sudo whoami
验证 root 无法登录
# 这应该被拒绝
ssh root@your_server_ip
7. 完整的安全检查脚本
创建一个脚本来验证配置:
sudo nano /usr/local/bin/ssh_security_check.sh
#!/bin/bash
echo "=== SSH Security Check ==="
echo "1. Checking SSH configuration:"
sudo sshd -t && echo "SSH config is valid" || echo "SSH config has errors"
echo "2. Checking if root login is disabled:"
grep "^PermitRootLogin no" /etc/ssh/sshd_config && echo "Root login disabled" || echo "WARNING: Root login may be enabled"
echo "3. Checking allowed users:"
grep "^AllowUsers" /etc/ssh/sshd_config || echo "No specific user restrictions found"
echo "4. Checking user sudo permissions:"
sudo -l -U subuser
echo "5. Checking SSH service status:"
sudo systemctl status sshd --no-pager
echo "6. Checking active SSH connections:"
who
echo "=== Check Complete ==="
sudo chmod +x /usr/local/bin/ssh_security_check.sh
sudo /usr/local/bin/ssh_security_check.sh
8. 应急访问方案
为了防止配置错误导致无法访问服务器,建议:
保留一个管理员会话
在修改 SSH 配置时,保持至少一个 root 或管理员会话开启。
创建应急用户
# 创建应急访问用户
sudo useradd -m -s /bin/bash emergency
sudo passwd emergency
sudo usermod -aG wheel emergency
# 在 SSH 配置中同时允许应急用户
# AllowUsers subuser emergency
配置控制台访问
确保你有物理访问权限或者云服务商的控制台访问权限。
9. 日志监控
查看 SSH 登录日志
# 查看 SSH 登录尝试
sudo tail -f /var/log/secure
# 查看成功登录
sudo grep "Accepted" /var/log/secure
# 查看失败登录
sudo grep "Failed" /var/log/secure
完整配置示例
以下是一个完整的配置示例:
#!/bin/bash
# 设置变量
USERNAME="subuser"
SSH_PORT="2222" # 可选:更改 SSH 端口
# 1. 创建用户
sudo useradd -m -s /bin/bash $USERNAME
echo "Please set password for $USERNAME:"
sudo passwd $USERNAME
# 2. 添加 sudo 权限
sudo usermod -aG wheel $USERNAME
# 3. 备份 SSH 配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d_%H%M%S)
# 4. 配置 SSH
sudo tee -a /etc/ssh/sshd_config << EOF
# Custom security settings
PermitRootLogin no
AllowUsers $USERNAME
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 60
ClientAliveInterval 300
ClientAliveCountMax 2
PubkeyAuthentication yes
EOF
# 5. 测试并重启 SSH
sudo sshd -t && sudo systemctl restart sshd
echo "Configuration completed!"
echo "Test the new user login from another terminal:"
echo "ssh $USERNAME@\$(hostname -I | awk '{print \$1}')"
按照以上步骤配置后,你就有了一个具有完整管理权限但更安全的 SSH 访问方案。记得保存好密钥文件,并定期检查日志以确保安全。
重新生成
语音播放
复制回答