私はすでにマニュアルからそれを読みましたが、違いを見ることはできません。
su
-ユーザーIDを変更するか、スーパーユーザーになります
Sudo -s [command]
-s
(シェル)オプションは、設定されている場合はシェル環境変数で指定されたシェルを実行し、passwd(5)で指定されたシェルを実行します。コマンドが指定されている場合、コマンドは実行のためにシェルに渡されます。それ以外の場合、対話型シェルが実行されます。
Sudo -i
マニュアルの説明が消えます
これらのコマンドの主な違いは、機能へのアクセスを制限する方法にあります。
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
)を呼び出します。 su
はroot
によって呼び出されるため、ターゲットユーザーのパスワードを入力する必要はありません。そのため、Sudo su
ファイルによるスーパーユーザーアクセスが許可されている場合、/etc/sudoers
を使用すると、シェルを別のユーザー(rootを含む)として開くことができます。
Sudo
を使用すると、root権限を持つ独自のユーザーアカウントでコマンドを実行できます。 su
を使用すると、実際にルートとしてログインするようにユーザーを切り替えることができます。
Sudo -s
は、root権限でシェルを実行します。 Sudo -i
は、rootユーザーの環境も取得します。
su
とSudo -s
の違いを確認するには、cd ~
を実行し、それぞれの後にpwd
を実行します。最初のケースでは、rootであるため、rootのホームディレクトリに移動します。 2番目のケースでは、自分自身がルート特権を持っているため、自分のホームディレクトリに移動します。
この正確な質問についての詳細な議論があります こちら 。
この答えは この質問のだまし に関する私の答えのだまし書きです。人々が見つけられるように、ここに標準的な答えを載せてください!
Sudo -i
とSudo -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
の使用をお勧めします:
.bashrc
の不正な行など、マルウェアで汚染される可能性がはるかに低いです。su
は、ユーザー「root」のパスワードを要求します。
Sudo
は、独自のパスワードを要求します(また、/etc/sudoers
で構成されているルートとしてコマンドを実行できるかどうかも確認します。デフォルトでは、 "admin"または " Sudo」グループはSudoを使用できます)。
Sudo -s
はシェルをルートとして起動しますが、作業ディレクトリは変更しません。 Sudo -i
はルートアカウントへのログインをシミュレートします。作業ディレクトリは/root
になり、ルートの.profile
などはログイン時のようにソースされます。
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
を使用します。
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 -
と同じです。