ユーザーとしてログインすることと、root経由でsuを使用してユーザーを変更することの違いは何ですか?


17

ある種のサーバーがある場合は、たとえば、次の方法でアクセスできます。また、su特権を使用してrootユーザーに移動してからに移動するssh user1@ipこともできssh root@ipますsu user1。私の考えでは、これらの両方の方法は同じユーザー環境(この場合は「user1」)につながるはずですが、私の実際の経験ではそうではなく、ssh user1@ipインストールされているものsu user1があります。

何故ですか?

回答:


15

SSHはログインシェルを開始します。su、デフォルトではありません。

特に、これは、~/.profileそのユーザーの(または同様のファイル)がソースされていないことを意味します。したがって、変更は~/.profile有効になりません。次の場合もあります。

  • ログインシェルを起動した場合でも、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からログインする場合に適用されます。

ログインシェルを起動するには、次のいずれかを実行します。

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で使用すると、コマンドを実行する代わりにシェルを起動する場合、ログインシェルは、(注記がない場合に実行されることはありません~/bin中に存在しているSSHのテスト、中su -sudo -i)。真の結果を得るには、ログインシェルとしてシェルを実行します。

# 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、ルートシェルを取得する安っぽい方法です。これらの方法は両方とも環境によって汚染されています。


関連:


2
質問をする前に目を覚ましている必要があります:)あなたの答えは素晴らしいです、そして、私のものは適切な答えを目標とするのを逃しました。よくやった+1
Videonauth

-1

概して、それは主に戦略的な違いです。

スーパーユーザーとしてログインしている場合は、いつでも変更できます。つまり、致命的なミスに対する保護はありません。安全のために一時的に他のユーザーに変更する必要があります。

一方、限られた特権でログインしている場合、その電源に一時的にアクセスするために意図的にsu rootに移行する必要があるため、致命的なミスのリスクを回避できますが、安全なユーザーへのデフォルトのフォールバック位置があります。

したがって、違いは技術的なものではなく、本当に戦略的なものです。


問題は、rootユーザーと他のユーザーの違いではありません。これは、sshを介してサーバーユーザーに直接アクセスすることと、rootユーザー内で既にsuを介してサーバーユーザーにアクセスすることとの違いでした。とにかく、私もあなたが言ったことに同意します笑ありがとう
ミゲルコルティ

ああ、ごめんなさい...私は実際に誰もが技術的な詳細に取り組んでいるのか疑問に思っていました、私はあなたの意図を誤解していると思います。
-Mr.プレジデント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.