为云服务器(如阿里云、腾讯云、AWS等)上新建的用户配置“正常使用”权限,需根据具体使用场景(如仅SSH登录、部署Web应用、管理服务、开发调试等)来决定,但核心原则是:遵循最小权限原则(Principle of Least Privilege),避免直接授予 root 权限。
以下是通用、安全且实用的配置步骤和建议:
✅ 一、基础必备配置(所有新用户都应完成)
-
创建用户(非 root)
sudo adduser username # 交互式创建(推荐,自动建家目录、设密码) # 或 sudo useradd -m -s /bin/bash username # -m 创建家目录,-s 指定默认 shell sudo passwd username # 设置密码(若未在 adduser 中设置) -
配置 SSH 免密登录(推荐,更安全)
- 在本地生成密钥对(
ssh-keygen -t ed25519) - 将公钥
id_ed25519.pub内容追加到服务器该用户的~/.ssh/authorized_keys - 确保权限正确:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chown -R username:username ~/.ssh - (可选)禁用密码登录(在
/etc/ssh/sshd_config中设PasswordAuthentication no,重启sudo systemctl restart sshd)
- 在本地生成密钥对(
-
配置 Shell 和环境(确保可用)
- 检查默认 shell 是否有效:
grep username /etc/passwd→ 应含/bin/bash或/bin/zsh - 可复制基础配置(如
.bashrc,.profile)或初始化:sudo cp /etc/skel/.bash* /home/username/ sudo chown -R username:username /home/username/
- 检查默认 shell 是否有效:
✅ 二、按需授权(关键!避免直接给 sudo/root)
| 使用场景 | 推荐授权方式 | 示例命令 / 配置 |
|---|---|---|
| 日常运维、软件安装、服务管理 | ✅ 添加至 sudo 组(Debian/Ubuntu)或 wheel 组(CentOS/RHEL)⚠️ 务必限制 sudo 权限(见下文加固) |
sudo usermod -aG sudo username(Ubuntu)sudo usermod -aG wheel username(CentOS 8+/RHEL 8+) |
| 运行 Web 服务(Nginx/Apache/Node.js) | ❌ 不需要 sudo;✅ 赋予对项目目录、日志、静态资源的读写权限 | bash<br>sudo chown -R username:www-data /var/www/myapp<br>sudo chmod -R 755 /var/www/myapp<br>sudo setfacl -R -m u:username:rwx /var/log/myapp # 如需日志写入<br> |
| Docker 操作 | ✅ 加入 docker 组(避免每次 docker 命令都 sudo) |
sudo usermod -aG docker username⚠️ 注意:docker 组等价于 root 权限,仅信任用户才添加 |
| 数据库管理(MySQL/PostgreSQL) | ✅ 创建数据库级用户 + 授权,而非 OS 级 sudo | mysql -u root -p -e "CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'pwd'; GRANT ALL ON mydb.* TO 'appuser'@'localhost';" |
| 定时任务(crontab) | ✅ 用户自有 crontab 即可(crontab -e),无需 sudo |
crontab -u username -e(管理员可编辑,但普通用户只需自己运行) |
✅ 三、sudo 权限安全加固(强烈建议!)
若用户需 sudo,禁止无限制 ALL=(ALL:ALL) ALL,改用精细化授权:
- 编辑 sudoers(安全方式):
sudo visudo -
添加限制性规则(示例):
# 允许重启 nginx、查看日志,但不能执行任意命令 username ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx, /usr/bin/journalctl -u nginx*, /bin/cat /var/log/nginx/*.log # 允许管理特定服务(如 docker 容器) username ALL=(root) /usr/bin/docker start *, /usr/bin/docker stop *, /usr/bin/docker logs * - ✅ 启用
requiretty和日志审计(可选增强):Defaults:username !requiretty Defaults logfile=/var/log/sudo.log
✅ 四、其他安全与可用性建议
- 🔐 禁用 root 远程 SSH 登录(在
/etc/ssh/sshd_config中设PermitRootLogin no) - 📦 安装常用工具(用户级或系统级):
# Ubuntu/Debian sudo apt update && sudo apt install -y curl wget git vim htop unzip # CentOS/RHEL sudo yum install -y curl wget git vim-enhanced htop unzip - 🌐 配置防火墙白名单(如
ufw或firewalld),仅开放必要端口(22, 80, 443 等) - 📝 记录操作日志:启用
auditd或定期检查/var/log/auth.log/secure - 🔄 定期轮换密钥/密码,尤其对生产环境用户
❌ 绝对避免的操作(高危!)
sudo usermod -aG sudo username后不加限制就让用户随意sudo su -或sudo bash- 直接修改
/etc/passwd将用户 UID 改为 0(等同 root) - 将新用户加入
root组(Linux 中root组无特殊权限,但易混淆且违反最小权限) - 在生产环境长期使用密码登录 SSH(易被暴力破解)
✅ 快速验证清单(创建后必做)
| 检查项 | 命令/方法 |
|---|---|
| ✅ 能否 SSH 登录? | ssh username@your-server-ip |
✅ ls, cd, vim 是否正常? |
登录后执行基本命令 |
✅ sudo -l 是否显示预期权限? |
查看当前 sudo 权限范围 |
✅ groups 是否包含所需组(如 sudo, docker)? |
groups username |
| ✅ 能否访问目标目录/服务? | 如 ls /var/www, systemctl --user status(如启用 user session) |
如告知您的具体用途(例如:“部署 Python Flask 应用”、“管理 MySQL 数据库”、“作为 Jenkins agent 用户”),我可以为您定制一份精准的权限配置脚本 👇
是否需要我提供一个 一键初始化新用户的 Bash 脚本模板(含安全加固)?
ECLOUD博客