命令简介

sudo 是 Linux 系统中一个非常有用的命令,它允许系统管理员让普通用户暂时获得 root 权限来执行某些需要 root 权限的命令或操作。

命令格式

1
sudo [选项] 命令

参数说明

参数 描述 备注
-b 在后台执行指定命令 -
-E 保留环境变量 -
-g 从指定组执行命令 例如: sudo -g admin command
-h 打印 sudo 的帮助信息 -
-H 将 HOME 环境变量设置为目标用户的主目录 -
-i 模拟初始登录的环境 环境变量会被初始化
-k 在下次执行 sudo 时需要输入密码 终止 sudo 的活动会话
-l 列出当前用户可执行的命令 sudo -l
-n 不提示输入密码 如果有活动会话则不需要输入密码
-S 从标准输入读取密码,而不是终端设备 通常与脚本一起使用
-u user 以指定用户的身份执行命令 例如: sudo -u www whoami
-V 显示版本信息并退出 -

命令实例

基本用法

1.切换到 root 用户

1
sudo -i     # 或 sudo su -     

切换到 root 用户,环境也会被初始化。

sudo su - 和 sudo -i 的区别:

1. 命令格式

  • sudo su -:先使用 sudo 提升权限,再使用 su 切换用户。
  • sudo -i:使用 sudo 提升权限,并以指定用户身份运行shell。

2. 执行环境

  • sudo su -:切换到root用户环境,但保留当前用户的部分环境变量,例如HOME、PATH等。
  • sudo -i:切换到完全的root用户环境,包括环境变量和当前目录。

3. 安全性

  • sudo su -:安全性相对较高,因为可以通过 sudoers 文件限制用户可执行的命令。
  • sudo -i:安全性相对较低,因为用户可以执行任何命令。

4. 适用场景

  • sudo su -:适合需要执行特定命令的普通用户,例如更新系统软件包。
  • sudo -i:适合需要完全root用户权限的运维人员,例如创建新用户、修改系统配置等。

以下是表格总结:

特性 sudo su - sudo -i
命令格式 sudo su - sudo -i
执行环境 保留部分环境变量 完全root用户环境
安全性 较高 较低
适用场景 执行特定命令 完全root权限操作

使用建议

  • 在大多数情况下,建议使用 sudo su - 来切换到root用户身份。
  • 只有在需要完全root用户权限时,才使用 sudo -i 命令。

以下是一些使用示例:

  • 使用 sudo su - 更新系统软件包:

    1
    2
    3
    sudo su -
    apt update
    apt upgrade
  • 使用 sudo -i 创建新的用户账户:

    1
    2
    sudo -i root
    useradd newuser

额外说明

  • sudo -ssudo -i 类似,都是以指定用户身份运行shell,但 sudo -s 会保留当前用户的环境变量。
  • su 命令也可以不加 - 使用,例如 su root,但这种方式不建议使用,因为它不安全。

2.模拟登录到目标用户环境

1
sudo -i postgres

3.使用指定 shell 执行命令

1
sudo -s bash

4.执行单个命令

1
sudo command

以 root 权限执行单个命令。

5.后台运行命令

1
sudo -b apt-get update

在后台以 root 权限执行 apt-get update

6.以其它用户身份运行

1
sudo -u www-data /usr/sbin/apache2ctl start

www-data 用户身份启动 Apache 服务。

7.列出可执行的命令

1
sudo -l

列出当前用户可以以 root 权限执行的命令列表。

扩展用法

1.使用别名

1
alias ll='sudo ls -l'

2.使用配置文件

1
2
3
4
5
# /etc/sudoers

Defaults:user1 !requiretty

user1 ALL=(ALL) ALL

3.使用 sudoers 文件限制命令

1
2
3
# /etc/sudoers

user1 ALL=(ALL) NOPASSWD: /usr/bin/vim

高级用法

1.使用 sudoedit 编辑配置文件

1
sudoedit /etc/passwd

2.使用 sudoers 文件控制命令执行权限

  • 限制用户只能执行特定的命令
    1
    2
    3
    # /etc/sudoers

    user1 ALL=(ALL) NOPASSWD: /usr/bin/vim, /usr/bin/nano
  • 限制用户只能在特定的时间段内执行命令
    1
    2
    3
    # /etc/sudoers

    user1 ALL=(ALL) NOPASSWD: /usr/bin/vim, /usr/bin/nano 00:00-23:59
  • 限制用户只能在特定的主机上执行命令
    1
    2
    3
    # /etc/sudoers

    user1 ALL=(ALL) NOPASSWD: /usr/bin/vim, /usr/bin/nano @localhost

3.在脚本中使用 sudo

在脚本中,通常需要从标准输入读取密码,而不是交互式输入。

1
2
3
#!/bin/bash

echo "mypassword" | sudo -S apt-get update

4.配置不需密码

可以在 /etc/sudoers 文件中为某些命令或用户配置无需输入密码。

1
%admin ALL=(ALL) NOPASSWD:ALL

上面这行表示,属于 admin 组的用户可以无密码执行任何命令。

5.日志记录

sudo 还带有日志功能,记录了执行的命令和时间等信息,默认存储在 /var/log/sudo/ 目录下。

1
Defaults logfile=/var/log/sudo/sudo.log

以上配置指定了 sudo 的日志文件路径。

通过以上实例和扩展用法介绍,相信你已经对 sudo 命令有了全面的了解。如果还有任何疑问,欢迎随时咨询。