su和sudo的小知识
su命令
1 | su cqd |
表示切换到cqd用户模式,需要输入该用户密码。如果是root用户使用该命令,则不需要输入密码,因为root权限高。1
su
只输入su后面不加账户名称时,系统默认切换到root账户,需要知道root的密码。没有时间限制。1
su -
表示申请切换root用户,需要申请root用户密码。
有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root设置root用户密码。
su和su -区别
[su]只是切换了root身份,但Shell环境仍然是普通用户的Shell;
[su -]连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。
[su]切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用[su -]命令切换以后,工作目录变成root的工作目录了。
用echo $PATH命令看一下su和su - 后的环境变量已经变了。
实际例子:
1 | cqd@cqd:~$ su - |
sudo命令
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。
这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。
是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。
特性
sudo能够限制用户只在某台主机上运行某些命令。
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。默认的安全策略记录在 /etc/sudoers 文件中,属性必须为0440
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
1
2root@cqd:/home/cqd# ll /etc/sudoers
-r--r----- 1 root root 755 Feb 3 2020 /etc/sudoerssudoers主要内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22格式:授权用户/组 主机 =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
字段1:
不以%号开头的表示"将要授权的用户" root
以%号开头的表示"将要授权的组" %wheel
字段2:表示允许登录的主机
ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令
eg:jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown
表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令
字段3:
如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。
注意:如果没省略,必须使用( )双括号包含起来
字段4:
可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码
eg:lucy ALL=(ALL) NOPASSWD: /bin/useradd
表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码
字段5:授权给用户的操作
逗号分开一系列命令或者ALL表示允许所有操作例子:
1
2
3
4
5
6
7
815 # User privilege specification
16 root ALL=(ALL:ALL) ALL
17 # Members of the admin group may gain root privileges
18 %admin ALL=(ALL) ALL
19 # Allow members of group sudo to execute any command
20 %sudo ALL=(ALL:ALL) ALLsudo暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
由于不需要超级用户的密码,部分类Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、[Mac OS X]。
系统默认创建了一个名为 sudo 的组。只要把用户加入这个组,用户就具有了 sudo 的权限。
至于如何把用户加入 sudo 组,您可以直接编辑 /etc/group 文件,当然您得使用一个有 sudo 权限的用户来干这件事:1
2
3
4
5cqd@cqd:~$ cat /etc/group
root:x:0:
lxd:x:117:cqd
systemd-coredump:x:999:
cqd:x:1000:在 ubuntu 中,sudo 的日志默认被记录在 /var/log/auth.log 文件中。当我们执行 sudo 命令时,相关日志都是会被记录下来的。root@cqd:/home/cqd# cat /var/log/auth.log
1
2
3
4
5root@cqd:/home/cqd# cat /var/log/auth.log
Apr 19 21:06:01 cqd useradd[1068]: new group: name=cqd, GID=1000
Apr 19 21:06:01 cqd useradd[1068]: new user: name=cqd, UID=1000, GID=1000, home=/home/cqd, shell=/bin/bash, from=none
Apr 19 21:06:01 cqd useradd[1068]: add 'cqd' to group 'adm'
Apr 19 21:06:01 cqd useradd[1068]: add 'cqd' to group 'cdrom'
sudo su
根据以上的解释,sudo su就很容易理解了。
sudo su是当前用户暂时申请root权限,所以输入的不是root用户密码,而是当前用户的密码。
sudo是用户申请管理员权限执行一个操作,而此处的操作就是变成管理员。
[sudo -l]列出目前的权限。 从以下例子中就看出此用户的权限。1
2
3
4
5
6root@cqd:/home/cqd# sudo -l
Matching Defaults entries for root on cqd:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User root may run the following commands on cqd:
(ALL : ALL) ALL






