什么是sudo
sudo是用来执行需要提升权限的命令。
Sudo配置
1 | # visudo |
sudo执行命令的流程
- 当用户执行sudo时,系统会主动寻找
/etc/sudoers
文件,判断该用户是否有执行sudo权限 - 确认用户具有可执行的权限后,让用户输入自己的密码确认
- 若密码输入成功,则开始执行sudo后续的命令
- 当用户执行sudo时,系统会主动寻找
不需要密码的情况
root执行sudo时不需要输入密码(sudoers文件中有配置root ALL=(ALL)ALL这样一条规则)
要切换的身份与执行者的身份相同,不需要输入密码
/etc/sudoers
文件设置为允许用户在不输入该用户密码的情况下使用所有命令如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
%wheel ALL=(ALL) NOPASSWD:ALL
/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重要的参数
考虑下这种情况:输入密码后你刚刚运行了几个sudo命令。现在,如你所知,sudo会话默认保持15分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用sudo,你将会怎么做?
-k
的参数,就是允许用户取消sudo权限。
-s
参数有时你的工作要求你运行一堆需要root权限的命令,你不想每次都输入密码。你也不想通过改变/etc/sudoers文件调整sudo会话的过期时限。这种情况可以使用
sudo -s
-s
命令行参数给你一个有root权限的shell,但那不是root环境,还是执行的你自己的.bashrc
-i
参数-i
参数跟我们讨论过的-s
参数相像。然而,还是有点区别。一个重要的区别是-i
给你的是root环境,意味着你的(用户的).bashrc
被忽略。这就像没有显式地用root登录也能成为root。此外,你也不用输入root用户密码。
重要:请注意su命令也能让你切换用户(默认切换到root)。这个命令需要你输入root密码。为了避免这一点,你可以使用sudo执行它(
sudo su
),这样你只需要输入你的登录密码。