sudo

sudo #

sudo(superuser do)命令允许授权用户以其他用户(通常是超级用户或 root)的身份执行命令。它提供了一种更安全的方式来执行需要提升权限的操作,而不需要直接登录为 root 用户。

语法 #

sudo [选项] [命令]

选项 #

选项 描述
-A, --askpass 使用辅助程序获取密码
-b, --background 在后台运行命令
-E, --preserve-env 保留用户环境变量
-H, --set-home 将 HOME 环境变量设置为目标用户的主目录
-i, --login 模拟目标用户的初始登录 shell
-k, --reset-timestamp 使时间戳无效(下次使用 sudo 时将提示输入密码)
-l, --list 列出用户可以运行的命令
-n, --non-interactive 非交互模式,不提示输入密码
-s, --shell 运行指定的 shell
-S, --stdin 从标准输入读取密码
-u, --user=<用户> 以指定用户身份运行命令,默认为 root
-v, --validate 更新用户的时间戳,延长认证有效期
--help 显示帮助信息
--version 显示版本信息

示例 #

  1. 以 root 身份执行命令:
sudo apt update
  1. 以特定用户身份执行命令:
sudo -u username ls -la /home/username
  1. 列出当前用户可以使用 sudo 执行的命令:
sudo -l
  1. 切换到 root 用户的 shell:
sudo -i

sudo -s
  1. 编辑系统配置文件:
sudo nano /etc/fstab
  1. 在后台运行命令:
sudo -b apt upgrade
  1. 保留当前环境变量:
sudo -E apt upgrade
  1. 更新认证时间戳(延长免密码期限):
sudo -v

sudo 配置 #

sudo 的配置文件是 /etc/sudoers,应该使用 visudo 命令来编辑此文件,以避免语法错误导致的问题:

sudo visudo

典型的 sudoers 条目格式:

用户名 主机名=(可切换到的用户) 命令

例如:

# 允许 admin 用户执行任何命令
admin ALL=(ALL) ALL

# 允许 webadmin 用户不需要密码执行特定命令
webadmin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart apache2

注意事项 #

  • sudo 命令的使用受到 /etc/sudoers 文件的控制。
  • 首次使用 sudo 时,系统会提示输入当前用户的密码(不是 root 密码)。
  • 默认情况下,sudo 会在一段时间内(通常是 15 分钟)记住密码,之后需要重新输入。
  • 使用 sudo 的所有命令都会被记录在系统日志中,通常在 /var/log/auth.log/var/log/secure 中。

相关命令 #

  • su - 切换用户
  • visudo - 安全地编辑 sudoers 文件
  • id - 显示用户和组信息
  • whoami - 显示当前用户名