sudo -iとsudo suの違い[重複]

sudo -iとsudo suの違い[重複]

sudo -iこれらとそしての違いは何ですかsudo su

ベストアンサー1

マニュアルページの説明に基づいて、以下を想定してくださいsusudo

  1. ログインシェルを表しているため、これはまたはsudo -iu <user>と同じです。su - <user>su -l <user>
  2. パラメータを使用しないと、su有効なユーザーIDは変更されますが、元の<user>環境を使用してwho am iいます<user>

sudo のマニュアルページから抜粋

-i [command]
        The -i (simulate initial login) option runs the shell specified in
        the passwd(5) entry of the target user as a login shell.  This means
        that login-specific resource files such as .profile or .login will 
        be read by the shell.  If a command is specified, it is passed to 
        the shell for execution.  Otherwise, an interactive shell is 
        executed.  sudo attempts to change to that user's home directory 
        before running the shell.  It also initializes the environment, 
        leaving DISPLAY and TERM unchanged, setting HOME, MAIL, SHELL, 
        USER, LOGNAME, and PATH, as well as the contents of 
        /etc/environment on Linux and AIX systems.  All other environment 
        variables are removed.

はい

UID 500を持つユーザーアカウントがありますsaml

$ egrep "Uid|Gid" /proc/$$/task/$$/status
Uid:    500 500 500 500
Gid:    501 501 501 501

上記の出力では、最初の列は実際のUID(uid)、2番目の列は有効なUID(euid)です。

(su)経由でルートになる

$ su

今私はルートですが、まだ環境を維持しており、実際のUIDもそのまま残ります500。私のeuidは現在0(ルート)です。

$ egrep "Uid|Gid" /proc/$(pgrep su -n)/task/$(pgrep su -n)/status
Uid:    500 0   0   0
Gid:    501 501 501 501

しかし、私の環境はまだsaml同じです。環境変数の1つです$LOGNAME

$ env | grep LOGNAME
LOGNAME=saml

(su -)または(sudo -i)を介してルートになります。

$ su -

私の有効なUIDを新しいユーザーに使用または変更するsu -だけでsudo -iなく、ログインしたかのようにファイルをインポートし、今や私の環境は直接ログインしたのと同じになります。

$ egrep "Uid|Gid" /proc/$(pgrep su -n)/task/$(pgrep su -n)/status
Uid:    500 0   0   0
Gid:    501 501 501 501

しかし、私の環境は現在ですroot。これで同じ変数を$LOGNAME設定するために使用されますroot

$ env | grep LOGNAME
LOGNAME=root

では、違いは何ですか?

さて、上記の方法を試してみましょsudo -iう。

$ sudo -i

それでは、同じ情報を見てみましょう。

$ egrep "Uid|Gid" /proc/$(pgrep su -n)/task/$(pgrep su -n)/status
Uid:    0   0   0   0
Gid:    501 501 501 501

rootしかし、重要なのは、この方法を使用すると、私の有効なIDと実際のIDの両方が0()であることです。環境変数$LOGNAMEroot

$ env | grep LOGNAME
LOGNAME=root

環境比較

この3つの方法で行数を数えると、追加情報が得られます。

$ env > /tmp/<method used to become root>

これで、次の3つのファイルが残りました。

  • -rw-r--r-- root root 1 1999年11月2日06:43 sudo_root.txt
  • -rw-r--r-- ルート 1個 1970年11月2日 06:44 sudash_root.txt
  • -rw-r--r-- 1 root root 4859 11月2日06:44 su_root.txt

私たちはすでにsimple.environmentだけを見ることができますsu。他のサイズに比べて2倍以上大きいです。

1行あたりの行数:

$ wc -l su*
  28 sudash_root.txt
  32 sudo_root.txt
  92 su_root.txt

実際にファイルをもっと詳しく見る必要はありませんsu_root.txt。このファイルには、コマンドを実行するためのほとんどのユーザーエクスペリエンスが含まれていますsu。それでは、残りの2つのファイルを見てみましょう。

いくつかの外観上の変数(例えば、わずかに異なる変数)を除いて、$LANG実際には同じです。リストで最も恐ろしい証拠は$PATH

Sudo

 PATH=/usr/lib64/ccache:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/brlcad/bin:/root/bin

数 -

PATH=/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/brlcad/bin:/root/bin

ご覧のように、疑わしいパスを削除して追加の保護を提供しますが、GUIを別の場所に表示してもそのままにsudo -iしてください。$DISPLAY$TERM

テイクアウト?

  1. 最大の利点は、ルートになる方法は、sudo -i自分のパスワードを使用してルートのパスワードを公開する必要がないという点で、他の方法に比べて利点があることです。
  2. いつになるのかについてのログがありますがroot、神秘的に誰かがroot通り過ぎたりsuになりますsu -
  3. sudo -iあなたとあなたをsu保護するので、これらのいずれかよりも優れたユーザーエクスペリエンスを提供します。$DISPLAY$TERM
  4. sudo -irootユーザーが特定の環境を制限することで、システムを一部保護します。

どうですかsudo su?この問題についてまだ議論していませんか?

OPはこれについて質問したが、IMOという質問を混乱させる可能性があるため、意図的に議論に含めることを避けた。sudo suこのコマンドを実行すると、sudoコマンドの効果が隠され、su通常の環境で得られた環境の大部分がsu失われます。 Sudoはそのタスクを実行し、制限された保護された環境を提供しsudo suますsudo -i

はい

これは環境がダンプされた結果ですsudo su

ls -l /tmp/sudosu_root.txt
-rw-r--r-- 1 root root 1933 Nov  2 14:48 /tmp/sudosu_root.txt

行数は次のとおりです。

$ wc -l /tmp/sudosu_root.txt 
31 /tmp/sudosu_root.txt

sudo su -aとaの間に違いがある唯一の変数は次のとおりですsudo -i

$ sdiff /tmp/sudosu_root.txt /tmp/sudo_root.txt  | grep ' |'
USERNAME=saml                             | USERNAME=root
PATH=/usr/lib64/ccache:/sbin:/bin:/usr/sbin:/usr/bin:/usr/brl | PATH=/usr/lib64/ccache:/usr/local/sbin:/sbin:/bin:/usr/sbin:/
MAIL=/var/spool/mail/saml                 | MAIL=/var/spool/mail/root
PWD=/home/saml/tst                        | PWD=/root
SUDO_COMMAND=/bin/su                      | SUDO_COMMAND=/bin/bash
XAUTHORITY=/root/.xauthYFtlL3             | XAUTHORITY=/var/run/gdm/auth-for-saml-iZePuv/datab

ご覧のとおり、それらの間には実際に大きな違いはありません。若干異なる$PATH、、$SUDO_COMMANDの違いのみ$MAILあります。$USERNAME

引用する

おすすめ記事