Linux提升权限主要有su和sudo两种方式:su切换用户身份需目标密码,环境随之改变;sudo以当前用户身份执行特权命令,需自身密码或免密配置,更安全可控。

Linux 中提升权限主要有 su 和 sudo 两种方式,核心区别在于:su 切换用户身份(默认 root),需目标用户密码;sudo 以当前用户身份临时执行特权命令,需自身密码(或免密配置),更安全、更可控。
su:切换用户身份
su(substitute user)用于切换到另一个用户,默认是 root。执行后会启动新 shell,环境变量、工作目录等随之改变。
- 不加参数:su → 提示输入 root 密码,切换为 root,但保留当前用户的环境(非登录 shell)
- 加 - 或 -l:su - 或 su -l → 完整登录 root,加载 /root/.bashrc、/root/.profile 等,工作目录变为 /root
- 指定用户:su -l username → 切换到指定用户,需该用户密码
- 注意:普通用户需知道 root 密码才能用 su 切换,这在多管理员环境中存在密码分发与审计难题
sudo:以授权方式执行命令
sudo(superuser do)允许特定用户在不暴露 root 密码的前提下,按策略执行特权命令。行为由 /etc/sudoers 配置文件控制,推荐用 visudo 编辑(自动语法检查)。
- 基本用法:sudo command → 以 root 身份运行 command,首次使用需输入当前用户密码(5 分钟内再次 sudo 不再提示)
- 切换用户:sudo -u username command → 以指定用户身份运行命令(如 sudo -u www-data php artisan migrate)
- 获得交互式 shell:sudo -i → 类似 su -,启动 root 的登录 shell;sudo -s → 启动 root 的非登录 shell(环境变量不变)
- 查看权限:sudo -l → 显示当前用户被授予的 sudo 命令列表
安全配置建议
避免直接开放 root 密码或无限制 sudo 权限,应遵循最小权限原则。
- 禁用 root 远程登录:修改 /etc/ssh/sshd_config 中 PermitRootLogin no,重启 sshd
- 将用户加入 sudo 组(Debian/Ubuntu):usermod -aG sudo username
- 精细授权示例(写入 /etc/sudoers):username ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx, /usr/bin/apt update → 允许该用户免密重启 nginx 和更新 apt
- 禁止 shell 逃逸:避免授权 /bin/bash、/bin/sh、/usr/bin/python 等交互式程序,除非明确需要
遇到权限失败时,别急着改密码或加权限,先确认根本原因。
- “user is not in the sudoers file”:用户不在 sudo 组,也未在 /etc/sudoers 中显式授权 → 加入 sudo 组或配置 sudoers
- “sudo: no tty present”:脚本中非交互式执行 sudo 报错 → 改用 sudo -n(非交互模式),或在 sudoers 中添加 Defaults:username !requiretty
- 密码输对仍失败:检查键盘布局、Caps Lock、是否被 PAM 模块限制(如 /etc/pam.d/sudo)
- 命令找不到(如 sudo service):部分命令路径不在 root 的 PATH 中 → 使用绝对路径(sudo /usr/sbin/service)或配置 Defaults env_reset 与 secure_path
基本上就这些。su 简单直接,适合单人维护场景;sudo 更灵活、可审计、易管理,是现代 Linux 系统的标准做法。选哪个不关键,关键是理解背后的身份模型和最小权限逻辑。
以上就是Linux su与sudo使用说明_Linux用户权限提升方法的详细内容,更多请关注php中文网其它相关文章!