以前の記事の1つで、「sudo」コマンドについて詳しく説明しました。そのチュートリアルの終わりに向かって、小さなメモに別の同様のコマンド「su」についての言及がありました。この記事では、「su」コマンドと、「sudo」コマンドとの違いについて詳しく説明します。
ただし、その前に、このチュートリアルで説明されているすべての手順と例がUbuntu18.04LTSとDebian10でテストされていることに注意してください。
Linuxのsuコマンド
suコマンドの主な機能は、ログインセッション中に他のユーザーに切り替えることができるようにすることです。つまり、このツールを使用すると、ログアウトしてからログインすることなく、他のユーザーのIDを推測できます(そのユーザーとして)。
suコマンドは主にスーパーユーザー/rootアカウントに切り替えるために使用されます(コマンドラインでの作業中にroot権限が頻繁に必要になるため)が、すでに述べたように、他のroot以外のユーザーに切り替えるために使用できます。よく。
このコマンドを使用してrootユーザーに切り替える方法は次のとおりです。
このコマンドに必要なパスワードもrootユーザーのものです。したがって、一般に、suコマンドでは、ターゲットユーザーのパスワードを入力する必要があります。正しいパスワードを入力すると、ツールは端末の既存のセッション内でサブセッションを開始します。
su-
rootユーザーに切り替える別の方法があります:「su-」コマンドを実行します:
さて、「su」と「su-」の違いは何ですか?前者はrootに切り替えた後も古い/元のユーザーの環境を維持し、後者は(rootユーザーの〜/ .bashrcで指定されたように)新しい環境を作成します。ログイン画面からrootユーザーとして明示的にログインします。
重要 Debian10ユーザー向け。 「su」と「su-」を使用する場合、rootユーザーのPATH変数はDebian 10で異なります。「su」のみを使用すると、/ sbinなどのディレクトリが欠落します。つまり、基本的なシステム管理でもコマンドが見つからないというエラーが発生する可能性があります。コマンド。したがって、rootユーザーになるには常にDebian10で「su-」を使用してください。
'su'のmanページもそれを明確にしています:
The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.
したがって、「su-」を使用してログインする方が理にかなっていることに同意するでしょう。しかし、「su」コマンドも存在するので、それがいつ役立つのか疑問に思うかもしれません。次の抜粋(ArchLinux wiki Webサイトから抜粋)は、「su」コマンドの利点と落とし穴についての良いアイデアを示しています。
- システム管理者が、自分のシェルアカウントではなく、通常のユーザーのシェルアカウントを使用すると有利な場合があります。特に、ユーザーの問題を解決する最も効率的な方法は、問題を再現またはデバッグするために、そのユーザーのアカウントにログインすることです。
- ただし、多くの場合、rootユーザーが通常のユーザーのシェルアカウントから、そのアカウントの環境変数ではなく、そのアカウントの環境変数を使用して操作することは望ましくないか、危険でさえあります。誤って通常のユーザーのシェルアカウントを使用しているときに、rootがプログラムをインストールしたり、システムに他の変更を加えたりしても、rootアカウントを使用している場合と同じ結果にはなりません。たとえば、通常のユーザーが誤ってシステムに損傷を与えたり、特定のデータに不正にアクセスしたりする可能性のあるプログラムをインストールできます。
注:「su-」の--の後にさらに引数を渡したい場合は、コマンドが提供する-lコマンドラインオプションを(-の代わりに)使用する必要があります。 -および-lコマンドラインオプションの定義は次のとおりです。
-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.
When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.
su -c
言及する価値のある「su」コマンドの別のオプションがあります:-c。ターゲットユーザーに切り替えた後に実行するコマンドを提供できます。
'su'のmanページでは、次のように説明されています。
-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.
The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.
次のテンプレートの例を検討してください。
su [target-user] -c [command-to-run]
したがって、この場合、「実行するコマンド」は次のように実行されます。
[shell] -c [command-to-run]
'shell'は、 / etc / passwdで定義された'target-user'シェルに置き換えられます。 ファイル。
Sudo vs Su
「su」コマンドの基本についても説明したので、次は「sudo」コマンドと「su」コマンドの違いについて説明します。
2つの主な違いは、必要なパスワードです。「sudo」には現在のユーザーのパスワードが必要ですが、「su」にはrootユーザーのパスワードを入力する必要があります。
非常に明確に、セキュリティに関する限り、「sudo」は2つの間のより良い代替手段です。たとえば、rootアクセスも必要とする複数のユーザーがコンピューターを使用している場合を考えてみます。このようなシナリオで「su」を使用することは、ルートパスワードをすべてのユーザーと共有することを意味しますが、これは一般的には適切な方法ではありません。
さらに、特定のユーザーのスーパーユーザー/ルートアクセスを取り消す場合、唯一の方法は、ルートパスワードを変更してから、他のすべてのユーザーに新しいルートパスワードを再配布することです。
一方、Sudoを使用すると、これらの両方のシナリオを簡単に処理できます。 「sudo」ではユーザーが自分のパスワードを入力する必要があるため、最初にすべてのユーザーがルートパスワードを共有する必要はありません。また、特定のユーザーがroot権限にアクセスするのを防ぐには、「sudoers」ファイルの対応するエントリを微調整するだけです。
2つのコマンドのその他の違いは、デフォルトの動作にあります。 「sudo」では昇格された権限で1つのコマンドしか実行できませんが、「su」コマンドでは新しいシェルが起動され、その販売を明示的に終了するまで、root権限で必要な数のコマンドを実行できます。
そのため、「su」コマンドのデフォルトの動作は、ユーザーがrootとして機能しているという事実を忘れてしまい、誤って回復不能な変更を加える可能性があるため、潜在的に危険です(「rm-rf」コマンドを誤って実行するなど)。ディレクトリ)。常にrootとして機能することが推奨されない理由の詳細については、こちらをご覧ください。
'sudo'を介して実行されるコマンドは、ターゲットユーザー(デフォルトでは'root')として実行されますが、sudoerのユーザー名でタグ付けされます。ただし、「su」の場合、rootアカウントにsuした後にユーザーが行ったことを直接追跡することはできません。
'sudo'コマンドは、sudo-erがアクセスできるコマンドを制限することもできるという点ではるかに柔軟性があります。つまり、「sudo」にアクセスできるユーザーには、自分のジョブに必要なコマンドへのアクセスのみを許可できます。ただし、「su」を使用することはできません。すべてを実行する権限があるか、何もしないかのどちらかです。
Sudo su
おそらく、「su」を使用したり、rootとして直接ロギングしたりすることに伴う潜在的なリスクが原因で、Ubuntuなどの一部のLinuxディストリビューションはデフォルトでrootユーザーアカウントを無効にします。 root権限が必要な場合は、常に「sudo」を使用することをお勧めします。
ただし、ルートパスワードを入力しなくても、「su」を正常に実行できます。次のコマンドを実行するだけです。
sudo su
'sudo'を使用してコマンドを実行しているため、パスワードを入力するだけで済みます。したがって、これが完了すると、「su」コマンドがrootとして実行されます。つまり、パスワードを要求されません。
PS :システムでrootアカウントを有効にする場合(ただし、「sudo」または「sudo su」はいつでも使用できるため、強くお勧めしません)、rootパスワードを手動で設定する必要があります。これは、次を使用して行うことができます。次のコマンド:
sudo passwd root
結論
これと以前のチュートリアル(「sudo」に焦点を当てています)の両方で、エスカレートされた(または完全に異なるセットの)特権を必要とするタスクを実行できる利用可能なツールについての良いアイデアが得られるはずです。 'su'または'sudo'について何か共有したい場合、または自分の経験を共有したい場合は、以下のコメントでそれを歓迎します。