zzxworld

Linux sudo 命令使用指南

Linux sudo 命令使用指南

sudo 在 Linux 中可以让当前用户以其他用户身份执行命令。这个其他用户大多数时候指的都是 root 用户,也就是让当前用户能够以超级用户的身份越权执行一些命令。毕竟这个命令本身就是 Super User DO 的缩写。

sudo 命令配置

跟其他 Linux 命令不一样,sudo 命令不是任何用户直接就能拿来用的,需要先进行一些配置。正常情况下在系统的 /etc 目录中会有一个 sudoers 文件,这是命令的配置文件。如果没有这个文件说明系统还没安装 Sudo 程序,请先去安装好再说。

在这个配置文件中,通常会有这样两行配置:

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

这是两种让用户可以执行 sudo 命令的配置方式。第一种是在 root 下面新增一行,内容和它一样,把 root 换成要执行 sudo 命令的用户名即可。

第二种方式是给用户绑定用户组。比如看上面的配置,只要把用户绑定到 sudo 用户组就可以执行 sudo 命令了。这里需要注意的是不同系统可能默认提供的用户组名称可能不一样,比如在 CentOS 中,这个用户组的名称是 wheel。所以需要自己查看 /etc/sudoers 文件来确定。

我个人建议使用绑定用户组的方式来给用户指定 sudo 权限,用 usermod 命令即可。比如我要给 zzxworld 用户追加 sudo 用户组:

sudo usermod -aG sudo zzxworld

关于 usermod 命令的更多使用介绍可以参考下面这篇文章:

普通用户执行 sudo 命令时会要求输入当前用户的密码。如果嫌这个过程有点麻烦,可以在 /etc/sudoers 中配置免密码功能。格式如下:

zzxworld ALL=(ALL) NOPASSWD:ALL

上面就为 zzxworld 用户配置了免密码功能。不过我不太建议这样做。在使用 sudo 命令时,通常都是越权操作,没了这层密码提示作为警醒,容易导致一些无法挽回的误操作。

sudo 命令格式

sudo [选项]... 命令

sudo 命令示例

在 Debian 或是 Ubuntu 中,apt 命令只有超级用户权限才能执行,普通用户可以通过 sudo 命令来执行:

sudo apt update

查看当前普通用户本无权访问的日志文件:

sudo cat /var/log/nginx/access.log

列出当前用户的 sudo 权限:

sudo -l

自定义密码输入提示消息:

sudo -p '%p 在 %h 上以 %U 执行命令,请输入密码:' apt update

sudo 命令选项

缩写 完整名称 说明
-A --askpass 使用助手程序进行密码提示。
-b --background 在后台运行命令。
-B --bell 提示时响铃。
-C --close-from=num 关闭所有 >= num 的文件描述符。
-D --chdir=directory 运行命令前改变工作目录。
-E --preserve-env 在执行命令时保留用户环境。
--preserve-env=list 保留特定的环境变量。
-e --edit 编辑文件而非执行命令。
-H --set-home HOME 变量设为目标用户的主目录。
-h --host=host 在主机上运行命令(如果插件支持)。
-i --login 以目标用户身份运行一个登录 shell;可同时指定一条命令。
-K --remove-timestamp 完全移除时间戳文件。
-k --reset-timestamp 无效的时间戳文件。
-l --list 列出用户权限或检查某个特定命令。
-n --non-interactive 非交互模式,不提示。
-P --preserve-groups 保留组向量,而非设置为目标的组向量。
-p --prompt=prompt 使用指定的密码提示。
-R --chroot=directory 运行命令前改变根目录。
-r --role=role 以指定的角色创建 SELinux 安全环境。
-S --stdin 从标准输入读取密码。
-s --shell 以目标用户运行 Shell;可同时指定一条命令。
-t --type=type 以指定的类型创建 SELinux 安全环境。
-T --command-timeout=timeout 在达到指定时间限制后终止命令。
-U --other-user=user 在列表模式中显示用户的权限。
-u --user=user 以指定用户或 ID 运行命令(或编辑文件)。
-g --group=group 以指定的用户组或 ID 执行命令。
-v --validate 更新用户的时间戳而不执行命令。
-- 停止处理命令行。
-V --version 显示版本信息并退出。
-h --help 显示帮助消息并退出。