web-dev-qa-db-ja.com

「su」、「Sudo -s」、「Sudo -i」、「Sudo su」の違いは何ですか?

私はすでにマニュアルからそれを読みましたが、違いを見ることはできません。

su-ユーザーIDを変更するか、スーパーユーザーになります

Sudo -s [command]

-s(シェル)オプションは、設定されている場合はシェル環境変数で指定されたシェルを実行し、passwd(5)で指定されたシェルを実行します。コマンドが指定されている場合、コマンドは実行のためにシェルに渡されます。それ以外の場合、対話型シェルが実行されます。

Sudo -iマニュアルの説明が消えます

147
Smile.Hunter

これらのコマンドの主な違いは、機能へのアクセスを制限する方法にあります。

su(「代替ユーザー」または「ユーザーの切り替え」を意味する)-まさにそれを行い、別のシェルインスタンスをターゲットユーザー。それを行う権利があることを確認するために、パスワードターゲットユーザーのを要求します。そのため、rootになるには、rootパスワードを知る必要があります。 rootとしてコマンドを実行する必要があるマシン上に複数のユーザーがいる場合、すべてのユーザーがrootパスワードを知っている必要があります-同じパスワードになることに注意してください。ユーザーの1人から管理者権限を取り消す必要がある場合は、rootパスワードを変更し、アクセスを維持する必要のある人だけに伝える必要があります。

Sudo(うーん...ニーモニックは何ですか?Super-User-DO?)はまったく異なります。構成ファイル(/ etc/sudoers)を使用します。このファイルには、特定のアクション(rootとしてコマンドを実行するなど)に対する権限を持つユーザーがリストされます。呼び出されると、開始したユーザーのパスワード -端末のユーザーが/etc/sudoersにリストされているのと同じ「ジョー」であることを確認します。個人の管理者権限を取り消すには、構成ファイルを編集するだけです(または、その構成にリストされているグループからユーザーを削除します)。これにより、特権の管理がよりクリーンになります。

この結果、多くのDebianベースのシステムでrootユーザーはパスワードが設定されていません-つまり、rootとして直接ログインすることはできません。

また、/etc/sudoersはいくつかの追加オプションを指定できます。つまり、ユーザーXはプログラムYなどのみを実行できます。

よく使用されるSudo suの組み合わせは、次のように機能します。最初のSudoは、yourパスワードの入力を求めます。許可されている場合、スーパーユーザーとして次のコマンド(su)を呼び出します。 surootによって呼び出されるため、ターゲットユーザーのパスワードを入力する必要はありません。そのため、Sudo suファイルによるスーパーユーザーアクセスが許可されている場合、/etc/sudoersを使用すると、シェルを別のユーザー(rootを含む)として開くことができます。

118
Sergey

Sudoを使用すると、root権限を持つ独自のユーザーアカウントでコマンドを実行できます。 suを使用すると、実際にルートとしてログインするようにユーザーを切り替えることができます。

Sudo -sは、root権限でシェルを実行します。 Sudo -iは、rootユーザーの環境も取得します。

suSudo -sの違いを確認するには、cd ~を実行し、それぞれの後にpwdを実行します。最初のケースでは、rootであるため、rootのホームディレクトリに移動します。 2番目のケースでは、自分自身がルート特権を持っているため、自分のホームディレクトリに移動します。

この正確な質問についての詳細な議論があります こちら

59
Mike Scott

この答えは この質問のだまし に関する私の答えのだまし書きです。人々が見つけられるように、ここに標準的な答えを載せてください!

Sudo -iSudo -sの主な違いは次のとおりです。

  • Sudo -iはルート環境を提供します。つまり、~/.bashrcは無視されます。
  • Sudo -sはユーザーの環境を提供するため、~/.bashrcは尊重されます。

以下に例を示します。~/.bin/からはアクセスできますが、Sudo -sからはアクセスできないSudo -iディレクトリにアプリケーションlslがあることがわかります。また、BashプロンプトはSudo -iで変更されますが、Sudo -sでは変更されないことに注意してください。

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ Sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ Sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Sudo -sは使い慣れた環境を提供するのに便利ですが、2つの理由からSudo -iの使用をお勧めします:

  1. 「ルート」セッションにいることを視覚的に通知します。
  2. ルート環境は、.bashrcの不正な行など、マルウェアで汚染される可能性がはるかに低いです。
36
dotancohen

suは、ユーザー「root」のパスワードを要求します。

Sudoは、独自のパスワードを要求します(また、/etc/sudoersで構成されているルートとしてコマンドを実行できるかどうかも確認します。デフォルトでは、 "admin"または " Sudo」グループはSudoを使用できます)。

Sudo -sはシェルをルートとして起動しますが、作業ディレクトリは変更しません。 Sudo -iはルートアカウントへのログインをシミュレートします。作業ディレクトリは/rootになり、ルートの.profileなどはログイン時のようにソースされます。

9
Marius Gedminas

Ubuntuまたは関連システムでは、従来のスーパーユーザーの意味でsuを使用することはあまりありません。 Sudoは、そのケースをはるかにうまく処理します。ただし、suは、sudoerの構成が愚かな1回限りの状況で別のユーザーになるのに最適です。

たとえば、ライブCD/USBからシステムを修復する場合、ハードドライブやその他の必要なものとchrootをシステムにマウントすることがよくあります。このような場合、最初のコマンドは一般的に次のとおりです。

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

そのようにして、私はrootとしてではなく、通常のユーザーとして操作し、必要に応じてSudoを使用します。

2
Scott Severance
  • su rootパスワードを要求し、rootになり、対話型の非ログインシェルを開きます。
  • su - rootパスワードを要求し、rootになり、対話型ログインシェルを開きます。

  • Sudo -sパスワードを要求し、rootになり、対話型の非ログインシェルを開きます。
  • Sudo -iパスワードを要求し、rootになり、対話型ログインシェルを開きます。

ベストプラクティスは、これら2つを使用することです。


  • Sudo suパスワードを要求し、しばらくrootになり、suをrootとして実行します `。
  • Sudo su -パスワードを要求し、しばらくrootになり、su -をrootとして実行します。

したがって、この場合、suを使用してSudoを実行しているので、ルートの実際のパスワードを知る必要はありません。結果はsuおよびsu -と同じです。

0
Ravexina