sudo进阶

什么是sudo

sudo是用来执行需要提升权限的命令。

Sudo配置

1
# visudo
  1. sudo执行命令的流程

    • 当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo权限
    • 确认用户具有可执行的权限后,让用户输入自己的密码确认
    • 若密码输入成功,则开始执行sudo后续的命令
  2. 不需要密码的情况

    • root执行sudo时不需要输入密码(sudoers文件中有配置root ALL=(ALL)ALL这样一条规则)

    • 要切换的身份与执行者的身份相同,不需要输入密码

    • /etc/sudoers文件设置为允许用户在不输入该用户密码的情况下使用所有命令

      如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令

      %wheel ALL=(ALL) NOPASSWD:ALL

  3. /etc/sudoers文件解释

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ## cat /etc/sudoers
    ## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
    ## Syntax:
    ##语法
    ## user MACHINE=COMMANDS
    ## 用户 登录的主机=(可以变换的身份) 可以执行的命令
    ##
    ## The COMMANDS section may have other options added to it.
    ## 命令部分可以附带一些其它的选项
    ##
    ## Allow root to run any commands anywhere
    ## 允许root用户执行任意路径下的任意命令
    root ALL=(ALL) ALL

    ## Allows members of the 'sys' group to run networking, software,
    ## service management apps and more.
    # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
    ## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令

    ## Allows people in group wheel to run all commands
    # %wheel ALL=(ALL) ALL
    ## 允许wheel用户组中的用户执行所有命令
    ## Same thing without a password
    ## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
    # %wheel ALL=(ALL) NOPASSWD: ALL

    ## Allows members of the users group to mount and unmount the
    ## cdrom as root
    ## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令
    # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

    ## Allows members of the users group to shutdown this system
    # %users localhost=/sbin/shutdown -h now
    ## 允许users用户组中的用户像root用户一样使用shutdown命令

sudo执行命令的流程

sudo会话

sudo默认在输入一次密码后15分钟内不会再次要求密码。15分钟后,你会再次被要求输入密码。

sudo重要的参数

  1. -k参数

考虑下这种情况:输入密码后你刚刚运行了几个sudo命令。现在,如你所知,sudo会话默认保持15分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用sudo,你将会怎么做?

-k的参数,就是允许用户取消sudo权限。

  1. -s参数

    有时你的工作要求你运行一堆需要root权限的命令,你不想每次都输入密码。你也不想通过改变/etc/sudoers文件调整sudo会话的过期时限。这种情况可以使用sudo -s

    -s命令行参数给你一个有root权限的shell,但那不是root环境,还是执行的你自己的.bashrc

  2. -i参数

    -i参数跟我们讨论过的-s参数相像。然而,还是有点区别。一个重要的区别是-i给你的是root环境,意味着你的(用户的).bashrc被忽略。这就像没有显式地用root登录也能成为root。此外,你也不用输入root用户密码。

重要:请注意su命令也能让你切换用户(默认切换到root)。这个命令需要你输入root密码。为了避免这一点,你可以使用sudo执行它(sudo su),这样你只需要输入你的登录密码。