MENU

一時的に管理者権限で作業する手順|環境変数の罠と権限昇格の使い分け

管理者権限(root)が必要な作業のたびにログアウト・ログインし直すのは非効率です。su - または sudo を使えば現在のセッションのまま権限を昇格できます。ただし使い方を誤ると「command not found」が連発します。まず結論から示し、その後で落とし穴を説明します。

目次

まず結論:用途別の最短パターン

よく使う3パターンを先に示します。

# rootシェルに入り、複数の管理コマンドをまとめて実行する
su -

# 1コマンドだけroot権限で実行する(推奨)
sudo コマンド名

# sudoでrootのログインシェルを起動する(Ubuntu等でsu -が使えない環境向け)
sudo -i

Ubuntu・Debian系はデフォルトでrootアカウントのパスワードが無効化されているため、su - はパスワードエラーになります。その環境では sudo -i または sudo -s を使います。

「ハイフンなし」でrootになると管理コマンドが消える理由

ある運用現場では、su(ハイフンなし)でrootに切り替えたのに shutdownuseradd が「command not found」になり、原因が分からないまま時間を消費したという話をよく聞きます。原因はPATH環境変数の引き継ぎ方にあります。

su(ハイフンなし)は元ユーザーの環境変数をそのまま引き継いでrootのシェルを起動します。一般ユーザーのPATHには /sbin/usr/sbin が含まれていないため、システム管理コマンドが見つかりません。

$ su          # ハイフンなし
Password:
# echo $PATH
/home/operator/.local/bin:/usr/bin:/bin    # /sbin, /usr/sbin が入っていない

# shutdown -h now
bash: shutdown: command not found          # PATHにないのでエラーになる

su -(ハイフンあり)はrootのログインシェルを起動するため、/etc/profile~root/.bash_profile が読み込まれ、rootの正しいPATHが設定されます。

$ su -        # ハイフンあり(これが正解)
Password:
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/bin    # /sbin が含まれる

# shutdown -r now    # 問題なく動作する
# useradd testuser   # 問題なく動作する

実務ではほぼ必ず su - を使います。su(ハイフンなし)は、元ユーザーの環境変数を意図的に引き継ぎたいスクリプト内などの特殊用途に限ります。

sudoで1コマンドだけroot権限を借りる

sudo は指定した1コマンドだけをroot権限で実行し、それ以外の操作は一般ユーザーのまま続けられます。現代のLinux運用では su - よりも sudo を使う場面のほうが多くなっています。

# パッケージのインストール(Debian/Ubuntu系)
sudo apt update && sudo apt install nginx

# パッケージのインストール(RHEL/AlmaLinux/Rocky Linux系)
sudo dnf install httpd

# サービスの再起動(systemd環境)
sudo systemctl restart sshd

# 設定ファイルの編集
sudo vi /etc/ssh/sshd_config

sudo を使うには、そのユーザーが sudoers に登録されている必要があります。Ubuntuでは初期ユーザーが自動で sudo グループに属していますが、RHEL系では wheel グループへの追加が別途必要です。

# RHEL/AlmaLinux/Rocky Linux で wheel グループに追加(rootまたは既存のsudo権限で実行)
usermod -aG wheel ユーザー名

# Debian/Ubuntu 系で sudo グループに追加
usermod -aG sudo ユーザー名

# 追加後はいったんログアウト→再ログインしてグループを反映させる

suとsudoの使い分け:現場での判断基準

sudo コマンド名 を使う場面:パッケージインストール・サービス再起動・設定ファイル変更など、1〜数回の管理操作が目的のとき。実行ログが /var/log/auth.log(Debian系)または /var/log/secure(RHEL系)に残るため、複数人が管理するサーバーでは監査の面でも有利です。

su - を使う場面:サーバー初期設定・障害対応など、連続して多数の管理コマンドを実行するとき。毎回 sudo を付ける手間が省けます。作業終了後は必ず一般ユーザーに戻ります。

組織のセキュリティポリシーでrootへの直接ログインや su を禁止している場合は、sudo または sudo -i に統一します。CISベンチマーク等の標準的なハードニングガイドラインでは、rootシェルへの直接切り替えよりも sudo による最小権限の原則が推奨されています。

作業後に一般ユーザーへ戻る方法と注意点

root権限での作業が終わったら、必ず一般ユーザーに戻します。

# rootシェルから一般ユーザーに戻る
exit
# または Ctrl + D

# 現在のユーザーを確認する
whoami

# シェルのネスト深度を確認する(値が大きいほど su を重ねている)
echo $SHLVL

su - の中でさらに su - を重ねると、exit を1回打つだけでは一般ユーザーに戻れません。whoami で現在のユーザーを確認する習慣をつけると、権限を間違えたまま操作するミスを防げます。

rootで作業中は rm -rf などの破壊的なコマンドが確認なしに実行されます。誤ったパスへの削除・上書きは取り返しのつかない事態につながるため、コマンドを打つ前に対象パスを目視確認する習慣が重要です。特に変数を含むパス(rm -rf $DIR/ など)は、変数が空のときに意図しないディレクトリを消す危険があります。スクリプト内では set -u を先頭に入れて未定義変数を検出するか、パスを展開してから確認する手順を踏みます。

<PR>この記事に関連するおすすめ書籍

[試して理解]Linuxのしくみ 増補改訂版

ユーザー権限やプロセスの仕組みを図解で理解できる一冊。su/sudoで管理者権限を扱う際の勘所が腑に落ちます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次