suコマンドでユーザーを切り替える方法|sudoとの違いや「su -」の意味もコマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, ユーザ・グループ管理コマンド > suコマンドでユーザーを切り替える方法|sudoとの違いや「su -」の意味もコマンド
「suコマンドでrootに切り替えたいけど、su と su - の違いがわからない」
「sudoとsuはどう使い分ければいいの?」

Linuxでは、セキュリティの観点から普段は一般ユーザーで作業し、管理者権限が必要な時だけrootに切り替えるのが基本です。このユーザー切り替えに使うのがsuコマンドです。

この記事では、suコマンドの基本的な使い方から、「su」と「su -」の決定的な違い、sudoとの使い分け、セキュリティ上の注意点まで、現場で必要な知識をまとめて解説します。
【この記事でわかること】
・su - でrootに切り替えるとログインシェルとして環境変数(PATH・HOME)も読み込まれる
・su(ハイフンなし)は環境変数が元のユーザーのまま引き継がれるため本番での使用は非推奨
・sudo は自分のパスワードで1コマンドだけ別権限で実行でき、実行ログも残るため現在は主流
・su -c "コマンド" でsudoが使えない環境でも1コマンドだけroot権限で実行できる
・wheelグループ制限(/etc/pam.d/su)で su の実行を許可されたユーザーだけに絞れる

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜユーザーの切り替えが必要なのか

Linuxには「最小権限の原則」という考え方があります。これは、普段の作業は必要最小限の権限で行い、管理者権限が必要な時だけ一時的に切り替えるというセキュリティの基本ルールです。

たとえば、設定ファイルの編集やサービスの再起動にはroot権限(管理者権限)が必要ですが、ログの確認やファイルの閲覧は一般ユーザーでも可能です。常にrootで作業していると、タイプミスひとつで重要なファイルを削除してしまうリスクがあります。

そこで活躍するのがsuコマンドです。su は「Substitute User(ユーザーの切り替え)」の略で、現在のセッションから別のユーザーに切り替えることができます。

suコマンドの基本的な使い方

1. 別のユーザーに切り替える(su ユーザー名)

指定したユーザーに切り替えるには、su の後にユーザー名を指定します。切り替え先のユーザーのパスワードを入力する必要があります。

# testuser に切り替える $ su testuser Password:

切り替えが成功すると、プロンプトが変わります。

2. rootユーザーに切り替える(su -)

rootに切り替える場合は、「su -」を使います。ユーザー名を省略するとrootへの切り替えになります。

# rootに切り替える(推奨) $ su - Password: # rootのパスワードを入力 # プロンプトが $ から # に変わる

※ここで入力するのはrootのパスワードです。自分のパスワードではないので注意してください。

3. 元のユーザーに戻る(exit)

切り替え先での作業が終わったら、exitコマンドで元のユーザーに戻ります。

# 元のユーザーに戻る # exit $ # logout または Ctrl+d でも同じ

exitを忘れてrootのまま作業を続けてしまうと、最小権限の原則に反します。作業が終わったらすぐに戻る習慣をつけましょう。

「su」と「su -」の決定的な違い

ここが初心者がもっともつまずくポイントです。ハイフンを付けるか付けないかで、動作がまったく異なります。

su(ハイフンなし)の場合

ハイフンなしの su は、ユーザーだけを切り替えて環境変数はそのままです。つまり、HOME(ホームディレクトリ)やPATH(コマンドの検索パス)が元のユーザーのまま引き継がれます。

# 一般ユーザーの状態を確認 $ echo $HOME /home/tanaka $ echo $PATH /usr/local/bin:/usr/bin:/bin:/home/tanaka/.local/bin # ハイフンなしで切り替え $ su Password: # rootになったが、環境変数は元のまま # echo $HOME /home/tanaka # echo $PATH /usr/local/bin:/usr/bin:/bin:/home/tanaka/.local/bin

su -(ハイフンあり)の場合

「su -」はログインシェルとして切り替えます。切り替え先のユーザーの環境変数(HOME、PATH、SHELL など)がすべて読み込まれ、ホームディレクトリにも移動します。

# ハイフン付きで切り替え $ su - Password: # rootの環境が完全に読み込まれる # echo $HOME /root # echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # カレントディレクトリも /root に移動 # pwd /root

【重要】rootへの切り替えは必ず「su -」を使う

rootに切り替える際は、必ず「su -」(ハイフンあり)を使ってください。理由は以下のとおりです。

PATHの問題:ハイフンなしだと /usr/sbin や /usr/local/sbin がPATHに含まれず、systemctl や iptables などの管理コマンドが見つからないことがある
設定ファイルの問題:rootの .bashrc や .bash_profile が読み込まれないため、rootが設定したエイリアスや環境変数が反映されない
ホームディレクトリの問題:カレントディレクトリが元のユーザーのままになり、意図しない場所でファイルを作成してしまうリスクがある

なお、「su -」は「su -l」や「su --login」と同じ意味です。

suコマンドとsudoコマンドの違い

suと並んでよく使われるのがsudoコマンドです。どちらも管理者権限で操作を行うためのコマンドですが、仕組みがまったく異なります。

suコマンドの特徴

動作:ユーザーそのものを切り替える(セッション全体が切り替わる)
パスワード:切り替え先のユーザーのパスワードが必要
操作範囲:exitするまで、すべてのコマンドが切り替え先の権限で実行される

sudoコマンドの特徴

動作:指定した1つのコマンドだけを別のユーザー権限で実行する
パスワード:自分自身のパスワードを入力する(rootのパスワードは不要)
操作範囲:そのコマンドだけに限定される(実行後は元のユーザーのまま)

# su の場合:rootに切り替えてからコマンド実行 $ su - Password: # ← rootのパスワード # systemctl restart httpd # exit # sudo の場合:1コマンドだけroot権限で実行 $ sudo systemctl restart httpd [sudo] password for tanaka: # ← 自分のパスワード

suとsudoの比較表

項目 su sudo
動作 ユーザーを切り替える 1コマンドだけ別の権限で実行
必要なパスワード 切り替え先のパスワード 自分のパスワード
rootパスワードの共有 必要(複数人で共有するリスク) 不要(rootパスワードを知らなくてよい)
操作ログ 切り替えた事実のみ記録 実行したコマンドも記録される
権限の絞り込み できない(全権限) /etc/sudoers で細かく制御可能

現場での使い分け

現在のLinux運用では、sudoを使うのが主流です。理由は明確で、sudoならrootパスワードを複数人で共有する必要がなく、誰がどのコマンドを実行したかのログも残るからです。

UbuntuやAmazon Linuxではデフォルトでrootパスワードが無効化されており、suでrootに切り替えること自体ができない設定になっています。

ただし、RHEL系(Red Hat Enterprise Linux)やCentOSではrootパスワードが設定されている環境も多く、suコマンドを使う場面はまだあります。どちらの方法も理解しておくことが大切です。

実務で役立つsuコマンドの応用テクニック

1. su -c でコマンドを1つだけ実行する

sudoが使えない環境で、rootとして1つだけコマンドを実行したい場合は「su -c」が便利です。

# rootとして1つのコマンドだけ実行する $ su - -c "systemctl restart httpd" Password: # 別のユーザーとして実行する場合 $ su - testuser -c "whoami" Password: testuser

実行後は自動的に元のユーザーに戻るため、exitを打つ必要がありません。

2. シェルを指定して切り替える

切り替え先のデフォルトシェルとは別のシェルを使いたい場合は、-s オプションを指定します。

# bash を指定して切り替える $ su - testuser -s /bin/bash

3. 現在のユーザーを確認する(whoami・id)

suで何度も切り替えていると、今どのユーザーかわからなくなることがあります。以下のコマンドで確認しましょう。

# 現在のユーザー名を表示 $ whoami tanaka # ユーザーID・グループID・所属グループを表示 $ id uid=1000(tanaka) gid=1000(tanaka) groups=1000(tanaka),10(wheel)

4. rootから他のユーザーへはパスワード不要

rootユーザーは、suで他のどのユーザーにもパスワードなしで切り替えられます。これはrootが全権限を持っているためです。

# rootから一般ユーザーに切り替え(パスワード不要) # su - testuser $ whoami testuser

障害対応で特定ユーザーの環境を確認したい場合などに活用できます。

セキュリティ上の注意点

suの実行ログを確認する

suコマンドの実行はシステムログに記録されます。誰がいつrootに切り替えたかを確認できるので、セキュリティ監査の際に重要です。

# RHEL系のログ確認 # cat /var/log/secure | grep su: # Debian/Ubuntu系のログ確認 # cat /var/log/auth.log | grep su:

wheelグループでsuの利用を制限する

デフォルトでは全ユーザーがsuコマンドを実行できますが、/etc/pam.d/su を編集することで、wheelグループに所属するユーザーだけにsuの実行を制限できます。

# /etc/pam.d/su の該当行のコメントを外す auth required pam_wheel.so use_uid # wheelグループにユーザーを追加する # usermod -aG wheel tanaka

この設定を有効にすると、wheelグループに入っていないユーザーはsu自体を実行できなくなります。複数人でサーバーを管理している環境では、この制限を必ず設定しましょう。

「Authentication failure」が出た時の対処法

suコマンドで切り替えようとして「Authentication failure」が表示された場合、いくつかの原因が考えられます。

原因1:パスワードの入力ミス

もっとも多い原因です。suで求められるのは切り替え先のユーザーのパスワードです。自分のパスワードを入力していないか確認してください。

$ su - Password: su: Authentication failure # 入力しているのはrootのパスワードか確認 # sudo では「自分の」パスワード、su では「切り替え先の」パスワード

原因2:rootパスワードが設定されていない

UbuntuやAmazon Linuxなど、rootパスワードがデフォルトで無効な環境では、suでrootに切り替えること自体ができません。この場合はsudoを使ってください。

# rootパスワードが無効な場合は sudo を使う $ sudo -i # どうしてもrootパスワードを設定したい場合 $ sudo passwd root

原因3:wheelグループによる制限

/etc/pam.d/su でwheelグループ制限が有効になっている場合、wheelグループに所属していないユーザーはsuを実行できません。

# 自分がwheelグループに入っているか確認 $ id uid=1000(tanaka) gid=1000(tanaka) groups=1000(tanaka) # wheelが表示されない場合は追加が必要 # usermod -aG wheel tanaka

「su: must be run from a terminal」の対処

cronやスクリプトからsuを実行しようとすると、このエラーが出ることがあります。suは端末(ターミナル)からの実行が前提のコマンドです。

スクリプト内でユーザーを切り替えてコマンドを実行したい場合は、sudoを使うのが正解です。

# スクリプト内ではsudoを使う sudo -u testuser /path/to/script.sh

本記事のまとめ

suコマンドによるユーザー切り替えの基本から、sudoとの違い、セキュリティ設定までを解説しました。以下の早見表を活用してください。
やりたいこと コマンド
rootに切り替える(環境変数も読み込む) su -
別のユーザーに切り替える su - ユーザー名
rootとして1コマンドだけ実行する su - -c "コマンド"
元のユーザーに戻る exit
現在のユーザーを確認する whoami
ユーザーID・グループ情報を確認する id
sudoで1コマンドだけroot権限で実行する sudo コマンド
sudoでrootのログインシェルに入る sudo -i
suの実行ログを確認する cat /var/log/secure | grep su:
wheelグループにユーザーを追加する usermod -aG wheel ユーザー名

suコマンドとsudoの使い分けを正確に理解していますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。