以用户身份登录和通过root使用su更改用户之间有什么区别?


17

当您拥有某种服务器时,您可以通过以下方式访问它,例如,ssh user1@ip您也可以ssh root@ip使用su priveleges转到根用户,然后转到su user1。在我的想法中,这两种方式都应该将我引导到相同的用户环境(在本例中为“ user1”),但是根据我的实际经验,并不会导致ssh user1@ip安装了某些东西su user1

这是为什么?

Answers:


15

SSH启动登录外壳程序。su,默认情况下不会。

特别是,这意味着该用户的~/.profile(或类似文件)没有来源。因此所做的更改~/.profile不会生效。也可能是这样的:

  • 即使您启动了登录shell,对root的更改还是不同的~/.profile,这可能会污染用户的环境。
    • /etc/profile并且/etc/profile.d/*可能会针对不同的用户应用不同的设置(不过默认情况下不是)
  • SSH配置中不同用户的设置可能有所不同。
  • PAM配置不同。例如,/etc/pam.d/ssh具有:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    /etc/pam.d/su具有:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    这意味着SSH加载~/.pam_environment,但su不是。这是一个很大的问题,因为~/.pam_environment它是环境变量与外壳程序无关的位置,并且如果您从GUI,TTY或SSH登录,则将应用此位置。

要启动登录shell,请运行以下任一程序:

su - <username>
sudo -iu <username>

例:

# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

即使使用SSH,如果您运行命令而不是启动外壳程序,也不会运行登录外壳程序(请注意~/binSSH测试中缺少su -sudo -i)。为了获得真实的结果,我将把我的shell作为登录shell运行:

# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

这也是为什么sudo su并且sudo -s是获取根shell的糟糕方法。这两种方式都被环境污染。


有关:


2
在回答问题之前,我似乎应该醒着:)您的回答很棒,我错过了针对正确答案的机会。做得好+1
Videonauth

-1

总的来说,这主要是战略差异。

如果您以超级用户身份登录,则可以随时更改任何内容……即-没有针对灾难性错误的保护措施,为了安全起见,您必须临时更改为其他用户。

而:如果您以有限的权限登录,则可以避免灾难性错误,因为您必须有意转移到su root才能暂时使用该功能,但是现在您拥有默认的安全用户后备位置。

因此,差异实际上是战略性的,而不是技术性的。


问题不是root用户与其他用户的区别。直接通过ssh访问服务器用户和通过root用户内部已经存在的su访问服务器之间是有区别的。无论如何,我也同意您所说的内容,哈哈,谢谢
Miguel Corti

啊,好的,对不起...我实际上是想知道为什么每个人都在讨论技术细节,我想我误解了您的意图。
总统先生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.