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

米格尔·科蒂(Miguel Corti)

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

这是为什么?

muru

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 [email protected] '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 [email protected] '$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的糟糕方法。这两种方式都受到环境的污染。


有关的:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java中的用户线程和守护程序线程之间有什么区别?

用户变量和系统变量之间有什么区别?

Docker Hub上的dockerfile和stackbrew用户之间有什么区别

Asp.net身份:登录时更改用户角色

用于用户身份验证的个人访问令牌和json网络令牌有什么区别?

android:使用功能中的“必需”和用户权限中的“ requiredFeature”之间有什么区别?

有什么办法可以在用户身份验证登录页面中更改用户名字段标签?

Game Center和Apple登录之间有什么区别?

将用户添加到“ sudoers”组与“ root”组之间有什么区别?

用户空间和内核空间之间有什么区别?

Windows:为所有用户和当前用户安装之间有什么区别?

“根”,“用户”,“组”之间有什么区别?

root和超级用户有什么区别?

使用root更改用户密码

以root用户身份登录并执行“ su-user”而不是以user身份登录有什么意义?

图形环境,用户界面,图形外壳和窗口系统之间有什么区别?

runas.exe和“以其他用户身份运行”有什么区别?

用户名,显示名和登录名有什么区别?

对于root用户,/#和〜#有什么区别?

SUDO和更改为root之间有什么区别

root用户和Ubuntu中的sudo命令有什么区别?何时应使用root?

无头,服务和用户Kerberos密钥表之间有什么区别

组和用户之间有什么区别

从终端(fedora)以root用户登录时,为什么要更改用户?为什么我对.bashrc和.bash_profile所做的更改不显示?

用户postgres和超级用户有什么区别?

Debian 10 su命令以root用户身份登录到现有用户,无需密码

“ sudo -s”和“ su root”之间有什么区别?

以用户身份登录运行命令与执行 sudo -u 有什么区别

使用 sudo 执行命令与以 root 用户身份执行命令有什么区别?