我已经从手册中读到了它,但我看不出区别。
su
- 更改用户 ID 或成为超级用户
sudo -s [command]
( shell -s
) 选项运行由 SHELL 环境变量指定的 shell(如果已设置)或 passwd(5) 中指定的 shell。如果指定了命令,则该命令将传递给 shell 执行。否则,将执行交互式 shell。
sudo -i
手册中的描述消失
答案1
这些命令之间的主要区别在于它们限制对其功能的访问的方式。
su
(意思是“替代用户”或“切换用户”)- 正是这样做的,它会以目标用户的权限启动另一个 shell 实例。为了确保您有权执行此操作,它会要求您输入密码目标用户的。因此,要成为 root,您需要知道 root 密码。如果您的机器上有多个用户需要以 root 身份运行命令,他们都需要知道 root 密码 - 请注意,密码相同。如果您需要撤销某个用户的管理员权限,您需要更改 root 密码,并只告诉那些需要保留访问权限的人 - 很麻烦。
sudo
(嗯...助记符是什么?超级用户 DO?)完全不同。它使用一个配置文件 (/etc/sudoers),该文件列出了哪些用户有权执行特定操作(以 root 身份运行命令等)。调用时,它会要求启动它的用户的密码 - 确保终端上的人确实是 中列出的同一个“joe” /etc/sudoers
。要撤销某人的管理员权限,您只需编辑配置文件(或从该配置中列出的组中删除用户)。这会使权限管理更加清晰。
因此,在许多基于 Debian 的系统中,root
用户没有设置密码 - 即无法直接以 root 身份登录。
此外,/etc/sudoers
还允许指定一些附加选项 - 例如用户 X 只能运行程序 Y 等等。
常用的sudo su
组合方式如下:首先sudo
要求您你的密码,并且,如果允许的话,su
以超级用户身份调用下一个命令 ( )。因为su
是由 调用的root
,所以它不需要您输入目标用户的密码。因此,sudo su
如果文件允许您以超级用户身份访问,则允许您以其他用户(包括 root)身份打开 shell /etc/sudoers
。
答案2
sudo
允许您以 root 权限在您自己的用户帐户中运行命令。su
允许您切换用户,以便您实际上以 root 身份登录。
sudo -s
以 root 权限运行 shell。sudo -i
还获取 root 用户的环境。
su
要查看和之间的区别sudo -s
,请在每个命令后执行cd ~
和pwd
。在第一种情况下,您将位于 root 的主目录中,因为您是 root 用户。在第二种情况下,您将位于您自己的主目录中,因为您自己具有 root 权限。
关于这个问题还有更多讨论这里。
答案3
这个答案与我的答案相同这个问题的重复,把规范答案放在这里,以便人们可以找到它!
sudo -i
和之间的主要区别sudo -s
是:
sudo -i
为您提供根环境,即您的环境~/.bashrc
被忽略。sudo -s
为您提供用户的环境,因此您的环境~/.bashrc
受到尊重。
lsl
下面是一个示例,您可以看到我的目录中有一个应用程序~/.bin/
,可以通过 访问,sudo -s
但无法通过 访问sudo -i
。还请注意,Bash 提示符会随着 而改变,sudo -i
但不会随着 而改变sudo -s
:
dotancohen@melancholy:~$ ls .bin
lsl
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ sudo -i
root@melancholy:~# which lsl
root@melancholy:~# exit
logout
dotancohen@melancholy:~$ sudo -s
Sourced .bashrc
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ exit
exit
虽然sudo -s
可以方便地为您提供熟悉的环境,我建议使用sudo -i
原因有二:
- 视觉提醒您处于“根”会话中。
- 根环境不太可能受到恶意软件(例如 中的恶意线路)的攻击
.bashrc
。
答案4
su
询问用户“root”的密码。
sudo
要求您输入自己的密码(并且还检查您是否被允许以 root 身份运行命令,这是通过以下方式配置的/etc/sudoers
——默认情况下,属于“admin”或“sudo”组的所有用户帐户都被允许使用 sudo)。
sudo -s
以 root 身份启动 shell,但不会更改您的工作目录。 sudo -i
模拟登录到 root 帐户:您的工作目录将是/root
,并且 root 的.profile
目录等将像登录时一样被获取。