基本操作系

【Linuxの基礎知識】sudoとsuの違いと安全な権限管理

Linuxを使っていると必ず直面する疑問があります。「sudoとsuはどちらを使えばいいのか?」というものです。

両方とも管理者権限に関わるコマンドであり、日常的にシステムを扱う上で避けては通れません。

しかし、sudoは特定のコマンドを一時的に管理者権限で実行する仕組みである一方、suはユーザーを切り替えることでroot権限を取得する方法です。

同じように見えて、実際には運用方法やセキュリティ上の意味が大きく異なります。

例えば、サーバー運用の現場では「なぜrootで直接作業してはいけないのか?」や「どのように権限を分けることで安全性が高まるのか?」といった実践的な課題が必ず出てきます。

sudoとsuを正しく理解し、適切に使い分けることは、システムを守りながら効率的に管理するための第一歩です。

本記事では、両者の違いを整理し、安全な権限管理の基本を具体例とともに解説していきます。

sudoとsuの基本概要

Linuxで管理作業を行う際に必ず登場するのが「sudo」と「su」です。どちらも管理者権限に関わる重要なコマンドですが、その仕組みや使い方には明確な違いがあります。

ここでは、sudoとsuの役割や特徴を整理し、混同しがちなポイントを明確にしていきます。

sudoの概要と特徴

sudoは特定のコマンドを一時的に管理者権限で実行する仕組みです。

ユーザーごとに利用可能なコマンドを設定できるため、最小限の権限だけを付与できる点が特徴です。

ユーザーのメリットは「rootに直接ログインせずに管理作業ができること」「不要な権限を与えずに済むためセキュリティが向上すること」です。

$ sudo ls /root

【出力例:】

anaconda-ks.cfg initial-setup-ks.cfg

このように必要なコマンドだけをroot権限で実行できるため、システム運用時の安全性を確保しつつ効率的に作業を進められます。 

suの概要と特徴

suはLinuxでユーザーを切り替えるためのコマンドです。

引数を省略して実行するとrootユーザーに切り替わり、以後はすべての操作が管理者権限で行えるようになります。

$ su - Password: (rootのパスワードを入力)

コマンドを入力するとrootのパスワードが要求され、認証に成功するとプロンプトが「$」から「#」に変化します。これはシェルがroot権限で動作していることを意味します。

切り替え後に「whoami」を実行することで、現在のユーザーがrootに変わっていfることを確認できます。

# whoami

【出力例:】

root

このようにsuは、管理者アカウントに完全に切り替えて操作できる便利なコマンドです。しかし長時間root権限を保持するため、誤操作やセキュリティリスクを招きやすい点に注意が必要です。

通常のシステム管理では、必要な作業だけをroot権限で実行できるsudoを利用する方が推奨されます。

両者の役割と違い

sudoとsuの大きな違いは「権限の扱い方」です。sudoは特定コマンド単位で管理者権限を利用するのに対し、suはユーザーを切り替えてシェル全体をroot権限にします。

ユーザーにとっては、sudoは「限定的に安全に作業するメリット」があり、suは「連続した管理作業を効率的に進められるメリット」があるといえます。

管理者(トップ)の視点から見れば、セキュリティリスクを考慮して「なるべくsuは使わせたくない」というのが基本方針です。一方で現場(ボトム)の担当者からすれば、suの危険性を理解していても、構築初期の段階ではsuを使う方が手早く効率的に作業できるという本音があります。この方針を曖昧にすると、後の運用で「いつでもrootで作業する」状態が常態化し、システム全体の安全性に大きな影響を及ぼしかねません。そのため、構築時に一時的にsuを利用した後は、sudoを徹底的に活用するルールを明文化し、運営に組み込むことが重要です。

コマンド特徴ユーザーのメリット
sudoコマンド単位で管理者権限を付与最小限の権限で安全に作業できる
suユーザー切り替えでroot権限を取得構築作業など短期間での効率性が高い

sudoとsuの導入手順

sudoとsuはLinux環境で管理者権限を扱うための基本的なコマンドです。

多くのディストリビューションでは初期状態で利用可能ですが、環境によってはインストールや設定が必要になる場合があります。

ここではインストール手順と基本的な利用方法を解説します。

パッケージのインストール方法

sudoやsuは多くのRHEL系Linuxでは標準で導入されています。

もし環境に含まれていない場合は、パッケージマネージャを利用してインストールします。

$ sudo dnf install sudo

【出力例:】

パッケージsudoがインストールされました 完了しました!

suは基本的に「shadow-utils」パッケージに含まれており、通常は最初から利用可能です。必要に応じて再インストールすることも可能です。

$ sudo dnf install shadow-utils

【出力例:】

パッケージshadow-utilsはすでにインストールされています

sudoとsuの基本的な使い方

sudoとsuは管理者権限を扱うために頻繁に利用されるコマンドです。

どちらもシステム管理には欠かせませんが、使い方や特徴が異なります。ここでは代表的な実行方法を紹介し、出力例を確認しながら違いを理解できるように解説します。

sudoの基本コマンド例

sudoは一般ユーザーが必要な時だけ管理者権限を付与してコマンドを実行するために使用します。実行時にはユーザー自身のパスワードを入力する仕組みです。

$ sudo ls /root

【出力例:】

anaconda-ks.cfg initial-setup-ks.cfg

このようにsudoは指定したコマンド単位で管理者権限を与えるため、操作範囲を限定でき安全性が高い点が特徴です。

suの基本コマンド例

suはユーザーを切り替えるためのコマンドで、rootに切り替えるとそのシェル全体が管理者権限になります。rootパスワードを入力する必要があります。

$ su - Password: (rootのパスワードを入力)
# whoami

【出力例:】

root

このようにsuを利用すると、一般ユーザーから完全にrootユーザーに切り替わり、以降の操作はすべてroot権限で実行されます。

よく使うオプション比較表

sudoとsuには実行方法の違いがあり、特にsuはオプションによって環境変数の扱いが変わります。下記の表で整理します。

コマンドオプション意味
sudo-l現在のユーザーが実行可能なコマンド一覧を表示
sudo-u ユーザー名指定したユーザー権限でコマンドを実行
suユーザー名現在の環境変数を引き継いで指定ユーザーに切り替え
su- ユーザー名ログインシェルとして切り替え、環境変数を初期化

suの挙動はオプションの有無で大きく変わります。

単に「su ユーザー名」と入力した場合は、もともとの環境変数が残るため、PATHなどの設定は元ユーザーのものが優先されることがあります。そのため切り替え後に思った通りのコマンドが実行できない場合があります。

一方「su - ユーザー名」とすると、新しくログインした状態を再現するため、環境変数が初期化され、対象のユーザーが本来持つ環境設定が適用されます。

管理作業を正しく行うためには、基本的に「su -」を用いる方が安全です。

sudo権限と設定方法

sudoは「誰にどこまで権限を与えるか」を柔軟に制御できる仕組みを備えています。これを理解し正しく設定しておくことで、日常的な運用を安全に効率化できます。

ここではwheelグループ、sudoersファイル、ログ監査の三つの観点から解説します。

wheelグループの役割

RHEL系Linuxでは、wheelグループに所属するユーザーはsudoを使ってすべての管理作業を実行できます。

これはroot権限を直接与えるのではなく、グループを通じて権限を委譲する仕組みです。「必要なユーザーだけをwheelに追加すればよい」と言ったメリットがあります。

$ sudo usermod -aG wheel ユーザー名

【出力例:】

ユーザー名 を wheel に追加しました

sudoersファイルの設定

sudoersファイルは書式を間違えるとsudo自体が動かなくなり、管理作業に大きな支障をきたします。そのため直接viで編集するのではなく、必ず visudo コマンドを使います。

visudo はsudoers専用の編集モードを提供しており、次のような安全機能があります。

visudoの安全機能

  • 保存時に文法チェックを行い、誤りがあればエラーを出して保存を防ぐ

  • 編集中にロックをかけ、複数の管理者が同時に編集して競合するのを防ぐ

  • エラー検知でsudoが無効化される事故を未然に防げる

この仕組みにより、管理者は安心して設定を追記できると言ったメリットがあります。

$ sudo visudo

ファイルを開くと次のような部分があります。

## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

一般ユーザーへの権限委譲は、この root や %wheel の設定直下に追記するのが分かりやすく、運用でも推奨されます。

sudoersの基本フォーマット

sudoersファイルの権限定義は、必ず一定の順序で記述します。下記の表に整理すると理解しやすくなります。

記述位置内容意味
先頭ユーザーまたはグループroot, user1, %wheel誰に権限を与えるかを指定
ホスト名ALLどのホストで有効かを指定(ALLで全ホスト)
括弧内実行できるユーザー(ALL)どのユーザー権限として実行できるか(ALLで任意のユーザー)
最後コマンドALL, /bin/systemctl restart httpd許可するコマンドを指定

このルールを踏まえて「root ALL=(ALL) ALL」と書けば「rootはどのホストでも、任意のユーザー権限として、全コマンドを実行できる」という意味になります。

さらに「user1 ALL=(ALL) /bin/systemctl restart httpd」とすれば「user1はどのホストでも、任意のユーザー権限として、httpdの再起動だけが許可される」となります。

こうして表で整理しておくと、sudoersの記法を体系的に理解できると言ったメリットがあります。

【設定例:】

user1 ALL=(ALL) /bin/systemctl restart httpd

この設定は「user1に対して httpd サービスの再起動だけを許可する」という意味です。他の管理コマンドは拒否されるため、不要な権限を与えずに済みます。

設定を保存した後、user1でログインして実際に確認できます。

$ sudo systemctl restart httpd

【出力例:】

[sudo] password for user1:
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since Sat 2025-09-06 14:10:32 JST; 5s ago

このようにsudoersに書き加えることで「管理者が許可した操作だけを安全に委譲できる」と言ったメリットがあります。管理者にとっては最小限の権限だけを与えられ、ユーザーにとっては必要な操作を確実に実行できる環境が整います。

sudo実行ログと監査

sudoを利用すると、実行されたコマンドは /var/log/secure に記録されます。

誰がいつどのコマンドを使ったのか追跡できるため、不正操作や誤操作の調査に役立ちます。これを活用することで「管理作業の透明性が高まる」と言ったメリットがあります。

$ sudo cat /var/log/secure | grep sudo

【出力例:】

Sep 06 14:20:15 server1 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; COMMAND=/bin/systemctl restart httpd 

実践的な活用例

sudoとsuは仕組みを理解しただけでは効果的に使えません。

実際の場面でどう活用するかを知ることで、日々の運用効率が高まり、セキュリティリスクも抑えられます。

ここでは管理者作業やユーザー権限の切り替え、さらに他のツールと組み合わせる活用例を紹介します。

管理者権限が必要な操作の実行例

Linuxではシステム設定やパッケージの導入など、管理者権限がなければ行えない作業があります。

sudoを使うことで一時的に必要な権限だけを得て実行できるため、安全に作業を進められます。ユーザーにとってのメリットは「無駄にrootでログインしなくてよい」「誤操作のリスクを減らせる」ことです。

$ sudo dnf install httpd

【出力例:】

依存関係が解決しました インストールが完了しました

このように必要なときだけ権限を上げることで、運用全体の安全性を確保できます。

特定ユーザー権限での作業例

複数ユーザーが存在する環境では、他のユーザーに切り替えて作業をすることがあります。

その際にsuやsudoの「-u」オプションを利用すると、別ユーザーの権限で実行できるため、検証や管理作業を柔軟に行えます。これにより「アクセス権を持つユーザーの視点で確認できる」「実運用に近い環境でテストできる」と言ったメリットがあります。

$ sudo -u postgres psql

【出力例:】

psql (15.6) Type "help" for help.
postgres=#

このように特定ユーザー権限で作業することで、意図せぬ権限エラーを未然に防げます。

他ツールとの組み合わせ活用

sudoやsuは単体で使うだけでなく、他の管理ツールと組み合わせることで効果が広がります。

ログ管理や自動化ツールと連携させれば、権限操作を記録したり、定期作業を安全に自動化することが可能です。このように活用することで「作業の透明性を高められる」「人的ミスを減らし効率化できる」と言ったメリットがあります。

$ sudo systemctl restart httpd

【出力例:】

● httpd.service - The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
    Active: active (running) since Sat 2025-09-06 13:45:21 JST; 2min ago
      Docs: man:httpd.service(8)
   Main PID: 1234 (httpd)
     Tasks: 213 (limit: 10000)
    Memory: 45.0M
     CGroup: /system.slice/httpd.service
       ├─1234 /usr/sbin/httpd -DFOREGROUND
       ├─1235 /usr/sbin/httpd -DFOREGROUND
       └─1236 /usr/sbin/httpd -DFOREGROUND

このようにサービス制御コマンドと組み合わせれば、システム管理を効率的かつ安全に実施できます。

限定メニューシェルによる操作制限

特定のユーザーに決められた操作だけを許可したい場合、ログイン時に通常のシェルを開かせず、専用のメニューシェルを強制的に起動させる方法があります。

この仕組みを利用すると、ユーザーは用意された選択肢以外の操作ができず、システムを誤って扱う危険性を抑えられます。

例えば以下のようにシェルスクリプトでメニューを作成し、ApacheやPostgreSQLの再起動といった定型作業だけを実行させることが可能です。

#!/bin/bash
while true; do
echo @@
  echo "ようこそ$(whoami)さん [ $(date +"%Y-%m-%d")]"
  echo "-----------------------------------"
  echo "1) Apacheを再起動"
  echo "2) PostgreSQLを再起動"
  echo "3) 終了"
  read -p "番号を選んでください: " choice
  case $choice in
    1) sudo systemctl restart httpd;;
    2) sudo systemctl restart postgresql;;
    3) exit;;
    *) echo "無効な入力です";;
  esac
done

スクリプトは「解説のための最小例」として理解し、実際の環境に導入する場合は必ずカスタマイズしてください。

このスクリプトを /usr/local/bin/menu.sh に配置し、実行権限を付与します。

$ sudo chmod +x /usr/local/bin/menu.sh

次に対象ユーザーのログインシェルをこのスクリプトに変更します。

$ sudo usermod -s /usr/local/bin/menu.sh user1

こうすると、user1がログインした際には通常のbashではなくmenu.shが起動し、選択肢にない操作は行えません。

ようこそbeproさん [ 2025-09-06]
--------------------------------
1) Apacheを再起動
2) PostgreSQLを再起動
3) 終了
番号を選んでください:

さらにsudoersでmenu.sh内のコマンドだけを許可しておけば、不要な権限を与えずに済みます。この方法により「誤操作を防ぎ、特定作業だけを安全に委譲できる」と言ったメリットがあります。

ログインシェル固定の具体的な手順

特定のユーザーを必ず menu.sh 経由でログインさせるには、/etc/passwd に記録されているログインシェルを変更し、その設定を維持することが重要です。以下の手順で行います。

  1. 対象ユーザーの現在のシェルを確認します。
    ログインシェルは /etc/passwd に記録されているため、grepで確認できます。

    $ grep user1 /etc/passwd

    【出力例:】

    user1:x:1001:1001::/home/user1:/bin/bash

    この場合、user1 のシェルは /bin/bash になっています。
  2. ログインシェルを menu.sh に変更します。
    usermod -s を使って対象ユーザーのログインシェルを /usr/local/bin/menu.sh に差し替えます。

    $ sudo usermod -s /usr/local/bin/menu.sh user1

    【出力例:】

    usermod: user1 のシェルを /usr/local/bin/menu.sh に変更しました

    再度 /etc/passwd を確認すると、以下のように変更されています。

    user1:x:1001:1001::/home/user1:/usr/local/bin/menu.sh

    これにより、user1 がログインした際は必ず menu.sh が起動します。
  3. menu.sh に実行権限を付与します。
    スクリプトが実行できなければログインが失敗するため、必ず実行権限を付与します。

    $ sudo chmod 755 /usr/local/bin/menu.sh

    この設定で user1 はログイン時に直接 menu.sh を実行できるようになります。
  4. 不要なシェルを禁止するための運用対策を行います。
    /etc/passwd は root のみが編集可能ですが、万が一管理ミスで設定が戻されると通常のシェルにアクセスできてしまいます。
    そのため、以下の点を徹底する必要があります。
    • /etc/passwd のパーミッションを確認し、root 以外が変更できない状態を維持する
    • 定期的に /etc/passwd を監査し、対象ユーザーのシェル設定が /usr/local/bin/menu.sh のまま維持されていることを確認する
    • menu.sh 内で exit を必ず入れて、メニューを抜けたら自動でログアウトさせる
    • sudoers では menu.sh 内で利用するコマンド(systemctl restart httpd など)だけを許可する

これらを徹底することで、対象ユーザーは通常の /bin/bash や /bin/sh を使えず、必ず menu.sh を経由してログインする状態を保証できます。

利用時の注意点

sudoやsuを利用する際には、便利さの裏側に潜むリスクを正しく理解しておくことが重要です。

権限の濫用やログ管理不足はシステム全体の安全性を脅かす要因となり、長期的な運用に深刻な影響を与えます。

ここでは代表的な注意点を整理して解説します。

権限濫用によるリスク

sudoやsuを使えば簡単に管理者権限を扱えるため、利用方法を誤ると重大なトラブルに直結します。

例えばroot権限のまま誤ってシステムファイルを削除してしまえば、復旧不能な障害を引き起こす可能性があります。

またsuを常用すると、誰がどの操作を行ったのか把握しにくくなり、責任の所在が曖昧になる危険性があります。

これを避けるために「必要なときだけ権限を昇格させる」「sudoersで実行コマンドを制限する」といったルールを徹底することが求められます。

これにより「誤操作を防ぎ、権限を持つ人を限定できる」と言ったメリットがあります。

ログ管理と監査の重要性

sudoの実行履歴は /var/log/secure などのログに記録され、誰がどのコマンドをいつ実行したかを追跡できます。

この情報を定期的に確認することで、不正操作や誤操作を早期に発見できます。

$ sudo cat /var/log/secure | grep sudo

【出力例:】

Sep 06 15:12:05 server1 sudo: user1 : TTY=pts/0 ; PWD=/home/user1 ; COMMAND=/bin/systemctl restart httpd

ログを監査に活用すれば「運用の透明性を高められる」「問題発生時に原因を迅速に特定できる」と言ったメリットがあります。

単にsudoを使わせるのではなく、ログを追跡する体制とセットで運用することが重要です。

セキュリティ運用上の落とし穴

便利さに慣れてしまうと、ついルールを逸脱して権限を濫用するケースが出てきます。

例えば「パスワード入力が面倒だからNOPASSWDオプションを設定する」「全ユーザーをwheelグループに追加する」といった運用は一見効率的でも、セキュリティを大きく損ないます。

さらにsuを常態化すると、監査のしにくさから不正操作を見逃す危険性も増します。これらの落とし穴を回避するためには、sudoersで最小権限を徹底し、運用ルールを文書化して共有することが欠かせません。

これにより「安全性を維持しつつ効率的に管理作業を進められる」と言ったメリットがあります。

まとめ

sudoとsuはLinuxにおける権限管理の中核を担うコマンドです。sudoは特定のコマンドを一時的に管理者権限で実行できる仕組みを持ち、suはユーザーごと切り替えて作業を進められる仕組みを持っています。両者を正しく使い分けることで、効率性と安全性を両立させることができます。

本記事では、sudoとsuの基本概要、導入手順、基本的な使い方、実践的な活用例、そして利用時の注意点までを整理しました。特にsudoではwheelグループやsudoersファイルの設定が重要であり、最小限の権限委譲やログ監査を行うことで、日常的な運用に安心感を加えることができます。一方suは構築時など短期間の作業で有効に活用できますが、常用すればセキュリティリスクが高まるため、利用ポリシーを徹底することが不可欠です。

適切な権限管理を徹底すれば「誤操作のリスクを減らせる」「運用の透明性を高められる」「必要な権限だけを委譲できる」と言ったメリットがあります。記事を参考に、自身の環境でsudoとsuをどう運用するのかを明確にし、安全で効率的なLinux管理を実現してください。

次のおすすめ記事

実践環境を整える

ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
VPS徹底比較!ConoHa・さくら・Xserverの選び方



VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL

よく読まれている記事

1

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

2

Linux環境でよく目にする「Vim」という名前。サーバーにログインしたら突然Vimが開いてしまい、「どうやって入力するの?」「保存や終了ができない!」と困った経験をした人も多いのではないでしょうか。 ...

3

ネットワーク技術は現代のITインフラにおいて不可欠な要素となっています。しかし、ネットワークを深く理解するためには、その基本となる「プロトコル」と「レイヤ」の概念をしっかり把握することが重要です。 こ ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

5

Javaは世界中で広く使われているプログラミング言語であり、特に業務システムやWebアプリケーションの開発において欠かせない存在です。本記事では、初心者向けにJavaの基礎知識を網羅し、環境構築から基 ...

-基本操作系