sudo -i
これらとそしての違いは何ですかsudo su
?
ベストアンサー1
マニュアルページの説明に基づいて、以下を想定してくださいsu
。sudo
- ログインシェルを表しているため、これはまたは
sudo -iu <user>
と同じです。su - <user>
su -l <user>
- パラメータを使用しないと、
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()であることです。環境変数$LOGNAME
はroot
。
$ 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
テイクアウト?
- 最大の利点は、ルートになる方法は、
sudo -i
自分のパスワードを使用してルートのパスワードを公開する必要がないという点で、他の方法に比べて利点があることです。 - いつになるのかについてのログがありますが
root
、神秘的に誰かがroot
通り過ぎたりsu
になりますsu -
。 sudo -i
あなたとあなたをsu
保護するので、これらのいずれかよりも優れたユーザーエクスペリエンスを提供します。$DISPLAY
$TERM
sudo -i
root
ユーザーが特定の環境を制限することで、システムを一部保護します。
どうですか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