Linuxコマンド · 1 min read · Jan 31, 2026

Linuxにおけるsudoとsuコマンドの違いを理解する

以前の記事の中で、私たちは「sudo」コマンドについて詳しく説明しました。そのチュートリアルの最後の方で、別の類似のコマンド「su」に関する小さなメモがありました。さて、この記事では「su」コマンドについて詳しく説明し、どのように「sudo」コマンドと異なるのかを議論します。

しかし、その前に、このチュートリアルで言及されているすべての指示と例は、Ubuntu 18.04 LTSおよびDebian 10でテストされていることに注意してください。

Linuxにおけるsuコマンド

suコマンドの主な役割は、ログインセッション中に他のユーザーに切り替えることを可能にすることです。言い換えれば、このツールは、ログアウトしてからそのユーザーとして再ログインすることなく、他のユーザーのアイデンティティを引き受けることを可能にします。

suコマンドは、主にスーパーユーザー/ルートアカウントに切り替えるために使用されます(コマンドラインで作業する際にルート権限が頻繁に必要とされるため)が、すでに述べたように、他の非ルートユーザーに切り替えるためにも使用できます。

以下は、ルートユーザーに切り替えるためにこのコマンドを使用する方法です:

このコマンドが必要とするパスワードは、ルートユーザーのものである必要があります。したがって、一般的に、suコマンドはターゲットユーザーのパスワードを入力する必要があります。正しいパスワードが入力されると、ツールはターミナルの既存のセッション内でサブセッションを開始します。

su -

ルートユーザーに切り替える別の方法があります:’su -‘コマンドを実行します:

さて、「su」と「su -」の違いは何でしょうか?前者は、ルートに切り替えた後も古い/元のユーザーの環境を保持しますが、後者は新しい環境を作成します(ルートユーザーの~/.bashrcによって指示されるように)、ログイン画面からルートユーザーとして明示的にログインする場合と同様です。

重要 Debian 10ユーザーにとって。’su’と’su -‘を使用する際、Debian 10ではルートユーザーのPATH変数が異なります。’su’のみを使用した場合、/sbinのようなディレクトリが欠けているため、基本的なシステム管理コマンドでも「コマンドが見つかりません」というエラーが発生する可能性があります。したがって、Debian 10では常に’su -‘を使用してルートユーザーになります。

‘su’のmanページも明確にしています:

オプションの引数 - は、ユーザーが直接ログインした場合に期待される環境を提供するために使用できます。

したがって、’su -‘でログインする方が理にかなっていることに同意するでしょう。しかし、’su’コマンドも存在するため、それがいつ役立つのか疑問に思うかもしれません。以下の抜粋は、ArchLinux wikiウェブサイトからのもので、’su’コマンドの利点と欠点について良いアイデアを提供します:

  • システム管理者が自分自身のシェルアカウントではなく、通常のユーザーのシェルアカウントを使用することが有利な場合があります。特に、ユーザーの問題を再現またはデバッグするために、そのユーザーのアカウントにログインすることが最も効率的な方法であることがあります。

  • しかし、多くの状況では、ルートユーザーが通常のユーザーのシェルアカウントおよびそのアカウントの環境変数から操作することは望ましくないか、さらには危険です。通常のユーザーのシェルアカウントを誤って使用している間に、ルートはプログラムをインストールしたり、システムに他の変更を加えたりすることができ、ルートアカウントを使用している場合とは異なる結果をもたらす可能性があります。たとえば、通常のユーザーにシステムを誤って損傷させたり、特定のデータに不正アクセスしたりする権限を与えるプログラムがインストールされる可能性があります。

注意:’su -‘で-の後にさらに引数を渡したい場合は、コマンドが提供する-lコマンドラインオプションを使用する必要があります(-の代わりに)。以下は-および-lコマンドラインオプションの定義です:

-, -l, --login  
ユーザーが直接ログインした場合に期待される環境を提供します。  

-が使用される場合、最後のsuオプションとして指定する必要があります。他の形式(-lおよび--login)にはこの制限はありません。

su -c

言及する価値のある’su’コマンドの別のオプションがあります:-c。これは、ターゲットユーザーに切り替えた後に実行したいコマンドを提供することを可能にします。

‘su’のmanページは次のように説明しています:

-c, --command COMMAND  
シェルがその-cを使用して呼び出すコマンドを指定します。  

実行されるコマンドには制御端末がありません。このオプションは、制御TTYを必要とするインタラクティブプログラムを実行するためには使用できません。

以下の例のテンプレートを考えてみてください:

su [target-user] -c [command-to-run]

この場合、’command-to-run’は次のように実行されます:

[shell] -c [command-to-run]

ここで’shell’は、/etc/passwdファイルで定義された’target-user’のシェルに置き換えられます。

Sudo vs Su

これで’su’コマンドの基本を議論したので、’sudo’と’su’コマンドの違いについて議論する時が来ました。

パスワード

二つの主な違いは、必要なパスワードです:’sudo’は現在のユーザーのパスワードを必要とし、’su’はルートユーザーのパスワードを入力する必要があります。

明らかに、セキュリティの観点から見ると、’sudo’は二つのうちのより良い選択肢です。たとえば、複数のユーザーがルートアクセスを必要とするコンピュータのケースを考えてみてください。このようなシナリオで’su’を使用することは、すべてのユーザーとルートパスワードを共有することを意味し、一般的には良い慣行ではありません。

さらに、特定のユーザーのスーパーユーザー/ルートアクセスを取り消したい場合、唯一の方法はルートパスワードを変更し、新しいルートパスワードを他のすべてのユーザーに再配布することです。

一方、Sudoを使用すれば、これらの二つのシナリオを簡単に処理できます。’sudo’がユーザーに自分のパスワードを入力させるため、最初からすべてのユーザーとルートパスワードを共有する必要はありません。そして、特定のユーザーがルート権限にアクセスできないようにするには、’sudoers’ファイルの対応するエントリを調整するだけで済みます。

デフォルトの動作

二つのコマンドのもう一つの違いは、デフォルトの動作です。’sudo’は、昇格された権限で単一のコマンドを実行することしか許可しませんが、’su’コマンドは新しいシェルを起動し、明示的にそのシェルを終了するまでルート権限で好きなだけコマンドを実行できるようにします。

したがって、’su’コマンドのデフォルトの動作は、ユーザーがルートとして作業していることを忘れる可能性があるため、潜在的に危険です。ユーザーは、誤って取り返しのつかない変更を行う可能性があります(たとえば、間違ったディレクトリで’rm -rf’コマンドを実行するなど)。常にルートとして作業することが推奨されない理由についての詳細な議論は、こちらを参照してください。

ロギング

‘sudo’を通じて実行されたコマンドは、ターゲットユーザー(デフォルトでは’root’)として実行されますが、sudoerのユーザー名がタグ付けされます。しかし、’su’の場合、ユーザーがルートアカウントにsuした後に何をしたかを直接追跡することはできません。

柔軟性

‘sudo’コマンドは、sudoerがアクセスできるコマンドを制限することさえできるため、はるかに柔軟です。言い換えれば、’sudo’にアクセスできるユーザーには、仕事に必要なコマンドのみを与えることができます。しかし、’su’ではそれは不可能です - すべてを行う権限があるか、何もないかのどちらかです。

Sudo su

‘su’を使用することによる潜在的なリスクや、直接ルートとしてログインすることに関連して、UbuntuのようないくつかのLinuxディストリビューションでは、デフォルトでルートユーザーアカウントが無効になっています。ユーザーは、ルート権限が必要なときは常に’sudo’を使用することが推奨されています。

ただし、ルートパスワードを入力せずに’su’を成功裏に実行することもできます。必要なのは、次のコマンドを実行することだけです:

sudo su

‘sudo’でコマンドを実行しているため、パスワードを入力する必要があるのはあなたのパスワードだけです。これが完了すると、’su’コマンドはルートとして実行され、パスワードを要求しません。

PS:システムでルートアカウントを有効にしたい場合(ただし、’sudo’または’sudo su’を常に使用できるため、強く推奨されません)、次のコマンドを使用してルートパスワードを手動で設定する必要があります:

sudo passwd root

結論

このチュートリアルと、’sudo’に焦点を当てた以前のチュートリアルは、特権を昇格させる(またはまったく異なるセットの)タスクを実行するために利用可能なツールについて良いアイデアを提供するはずです。’su’または’sudo’について共有したいことがある場合や、自分の経験を共有したい場合は、以下のコメントでお知らせください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。