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 |
显示帮助消息并退出。 |