logo
AI对话
AI写作
AI学术
AI绘画
知识社区

CentOS系统中创建子用户并设置SSH登录权限的详细步骤

此对话是使用 海鲸AI 创建的 • 发布时间:2025年06月29日 21:42

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 访问方案。记得保存好密钥文件,并定期检查日志以确保安全。

重新生成
语音播放
复制回答