sudo suを実行する正当な理由はありますか?


78

ルートアカウントが無効になっているマシンでルートシェルを起動するには、次のいずれかを実行できます。

  • sudo -i:対話型ログインシェルを実行します(読み取り/root/.bashrc/root/.profile
  • sudo -s:非ログインインタラクティブシェルを実行します(読み取り/root/.bashrc

Ubuntuの世界ではsudo su、ルートシェルを取得する方法として提案されていることがよくあります。1つが実行するのに、なぜ2つの別々のコマンドを実行するのですか?私が知る限り、はとsudo -i同等sudo su -sudo -sあり、と同じsudo suです。

唯一の違いは次のとおりです(sudo -i左側とsudo su -右側を比較):

「sudo -i」と「sudo su-」を比較したmeldのスクリーンショット

sudo -s(左)とsudo su(右)の比較:

「sudo -s」と「sudo su」を比較したmeldのスクリーンショット

主な違い(SUDO_foo変数とを無視LS_COLORS)はXDG_foosudo suバージョンのシステム変数のようです。

その違いがかなりエレガントなものを使用することを保証するケースはありますsudo suか?(よくあることですが)他の人に安全に、走っても意味がない、sudo suまたは何かが足りないと伝えてもいいですか?


8
ubuntuユーザーが標準化するのを妨げるそのような派手なシステムを理解したことがないsu -。彼らは問題を作成し、今ではそれを解決する方法についての議論が絶え間なくあります。
-jimmij

16
@jimmij rootパスワードを知っている必要はありませんsu -か?これは、複数のユーザーがルートアクセスを必要とするマルチユーザー環境にセキュリティホールをもたらすと思いませんか?
エラティエル

4
@Christopher問題は、システムをハッキングするためのsudo特権またはrootパスワードを持っているユーザーではありません。問題はパスワードの安全性に関するものです。ルートパスワードを変更するとき、それを必要とするすべてのユーザーに知らせる必要がありますが、これは難しい場合があります。sudoを使用すると、この問題は発生しません。
ホイヘンス

4
diffツールとは何ですか?
ジョシュジオタク

5
@jimmij Ubuntuはの使用をどのように防止しますsu -か?はい、rootパスワードを設定する必要がありますが、それは簡単です。
-Phizes

回答:


62

質問で述べたように、主な違いは環境です。

sudo su -sudo -i

以下の場合にはsudo su -、それログインシェルである、そう/etc/profile.profileおよび.bashrc実行され、あなたがrootの環境とrootのホームディレクトリに自分自身を見つけるでしょう。

sudo -iほぼ同じである(最初のログインをシミュレート)オプションは、ログインシェルとして、ターゲットユーザのパスワードデータベースのエントリで指定されたシェルを実行します。これは、次のようなログイン固有のリソースファイルことを意味し、またはシェルによって読み込まれて実行されます。sudo su --i.profile.bashrc.login

sudo susudo -s

sudo susudoコマンドで呼び出しますsu。Bashは、対話型の非ログインシェルと呼ばれます。したがってbash、実行のみ.bashrcです。ルートに切り替えた後も同じディレクトリにいることがわかります。

user@host:~$ sudo su
root@host:/home/user#

sudo -s$SHELL変数を読み取り、コンテンツを実行します。$SHELLが含まれ/bin/bashている場合、それを呼び出しますsudo /bin/bash。つまり、/bin/bash非ログインシェルとして起動されるため、すべてのドットファイルは実行されず、それbash自体が読み取ります。bashrc呼び出し元ユーザーの。環境は変わりません。あなたの家は根の家ではありません。したがって、あなたはルートですが、呼び出しユーザーの環境にいます。

結論

この-iフラグは2004年に追加さsudoれ、同様の機能を提供するため、テンプレートも同様に機能するようになりました。環境が重要でない限り、どちらを使用するかは重要ではないと思います。sudo su -sudo su -sudo -i

添加

ここで言及しなければならない基本的なポイントは、より高い特権で1つのコマンドsudoのみを実行し、それらの特権を元のコマンドにドロップするように設計されていることです。ユーザーを実際に切り替えて、ルートシェルを開いたままにすることを意図したものではありません。時間が経つsudoにつれて、そのようなメカニズムで拡張されました。なぜなら、人々はsudoすべてのコマンドの前で使用する理由について悩んでいたからです。

の意味sudoが乱用されました。sudoユーザーにルート権限の使用を最小限に抑えることを奨励するためのものでした。

私たちが今持っているものはsudo、ますます一般的になっています。ほぼすべての有名なLinuxディストリビューションに統合されています。別のユーザーアカウントに切り替える元のツールはsuです。古い学校の* nixベテランにとって、そのようなsudoことは不必要に思えるかもしれません。Microsoftのos-familyから私たちが知っているメカニズムに複雑さを加え、動作する可能性が高いため、* nixシステムのシンプルさの哲学に反しています。

私は本当にベテランではありませんが、私の意見でsudoは常に私の側にいばらsudoでした。私は使用することに最も消極的ですsudo。すべてのシステムで、ルートアカウントが有効になっています。しかし、状況は変わります。おそらく、su廃止される時期が来て、完全にsudo置き換えられsuます。

したがって、などの古いツールに頼るのではなく、sudo内部メカニズム(-s-i)を使用するのが最善だと思いますsu


4
ああ、だから2004年前に実際に実行する理由がありましたsudo suか?当時は、sudoおよびアクティブなrootアカウントなしでディストリビューションを使用していたため、わかりません。これは、Ubuntuの世界でのsudo su memeの普及を説明している可能性があります。
テルドン

8
1991年以来、私はさまざまな種類のUNIXを実行してきましたが、私にとってはこれまでsudo -iまたはまったく知らなかったsudo -sのでsudo su -、この時点ではただの習慣です。
ふわふわ

2
であるsudo -sと同じsudo $SHELL、その後?
サミュエルエドウィン区

3
(@chaosに同意)使用する理由sudo su -は、1)動作し、その動作を正確に知っていること、2)sudo(既に知っている場合su -)、3)しないという別のオプションを覚えておく必要がないことです。sudo現時点でどのバージョンを使用しているかを覚えておく必要があります。すでに持っているものがうまく機能するのに、なぜもう1つのトリビアを覚えているのですか?su -iログエントリを回避する以外に良い方法はありますか?私はそれsudo su -を心配するほど使いません。
jrw32982

3
更新を見ただけで、とてもいいです!記録のために、私はシステムの* nix歯もnoでsudo、非常に慣れてsuいると述べましょう。私を悩ませているのは、この2つの組み合わせです。
テルドン

16

あなたの質問に直接答えるために:いいえ、これを行う正当な理由はありません。また、sudo suは、1つで十分な場合に2つのログエントリを生成します。

私は多くの人がこれを行うのを見てきましたが、なぜ実行しないのかと尋ねるsudo -sと、答えは単に-ssudo のフラグを知らないということであり、一般的に私が指摘した後に彼らは切り替わります。

ただし、sudo -sandのリストにsudo -i、もう1つのオプションを追加したいと思いますsudo -sE。これは、の代わりになりsu -mます。 sudo -sEホームディレクトリを含む環境を保持します。ホームディレクトリが安全でない場合(NFS上)、これにはリスクがあります。しかし、多くの人がルートを使用する環境では、ルート.bashrcファイルの内容に同意する必要がなくなります。私の.bashrcルートには多くの専門分野が含まれているため、ルートとまったく同じ環境を取得することはできませんが、少なくとも必要な環境を正確に取得できます。


4
を含む環境が保持される場合$HOME、ホームフォルダーの下に作成されるすべての新しいファイルは、ユーザーではなくルートによって所有されます。これにより、多くのアクセス許可エラーの診断が困難になりました。
エリス

sudo -sEその後、echo $HOME与え/rootCentOSの7は、bash 4.2に。-sEあなたが述べたように、ホームディレクトリを保存するようには見えません。
jeremysprofile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.