Linux 命令 su 和 sudo 的区别

时间:2022-12-18 07:14:17

前戏

参加某大会和某个运维行业大佬聊天被问到

一直没有研究过这个问题,可能一直是最高权限吧


sudo

sudo是一种权限管理机制,依赖于 /etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令;

格式:​​sudo -u USERNAME COMMAND​

默认情况下,系统只有 root 用户可以执行sudo命令。需要root用户通过使用 visudo 命令编辑 sudo 的配置文件 /etc/sudoers,才可以授权其他普通用户执行sudo命令。

sudo的运行有这样一个流程:

  • 当用户运行sudo时,系统于 /etc/sudoers 文件里查找该用户是否有运行sudo的权限;
  • 若用户具有可运行 sudo 的权限。那么让用户输入用户自己的 password,注意这里输入的是用户自己的 password。
  • 假设 password 正确。变開始进行 sudo 后面的命令,root 运行 sudo 是不须要输入 password 的,切换到的身份与运行者身份同样的时候。也不须要输入 password。

su

su为switch user,即切换用户的简写。

su是最简单的身份切换名,用su我们能够进行不论什么用户的切换,一般都是su – username,然后输入password就ok了,可是root用su切换到其它身份的时候是不须要输入password的。

格式为两种:

su -l USERNAME(-l为login,即登陆的简写)

su USERNAME

如果不指定 USERNAME(用户名),默认即为 root,所以切换到 root 的身份的命令即为:su -root 或su -,su root 或su。

​su USERNAME,与su – USERNAME的不同之处如下:

  • su – USERNAME切换用户后,同时切换到新用户的工作环境中。
  • su USERNAME切换用户后,不改变原用户的工作目录,及其他环境变量目录。

如何设置初始su密码

​当我们输入su时会发现要输入密码,我们尝试输入自己当前用户的密码,发现failure。

但我们又不知道su密码是什么?其实su初始密码可以通过下面方式进行设置:

sudo passwd

su –

su -,su -l或 su –login 命令改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更 PATH 变量。用su -命令则默认转换成成 root 用户了。

而不带参数的“su命令”不会改变当前工作目录以及HOME,SHELL,USER,LOGNAME。只是拥有了root的权限而已。

注意:su -使用root的密码,而sudo su使用用户密码