sudo コマンドの使い方|root 権限の取得と sudoers の設定

未分類

sudosuperuser do の略)は、一時的に管理者(root)権限でコマンドを実行するための Linux コマンドです。
Ubuntu ではデフォルトで root への直接ログインが無効化されており、管理者作業が必要なときは sudo を使うのが標準的な方法です。
パッケージのインストール(sudo apt install)やシステム設定の変更など、権限が必要な操作のほぼすべてに使います。

構文(Syntax)

sudo [OPTIONS] COMMAND [ARGS...]

# 主な使い方
sudo COMMAND              # 管理者権限で COMMAND を実行
sudo -u USER COMMAND      # 指定ユーザーとして COMMAND を実行
sudo -i                   # root のログインシェルを起動(root 環境に入る)
sudo -s                   # root シェルを起動(環境変数は引き継ぐ)
sudo -l                   # 現在のユーザーに許可された sudo コマンドを一覧表示
sudo -k                   # 認証キャッシュを即時クリア(次回から再入力が必要)
sudo visudo               # /etc/sudoers を安全に編集

主なオプション一覧

オプション説明使用例
-u USER指定ユーザーとして実行sudo -u www-data cat /var/log/nginx/error.log
-iroot のログインシェルを起動sudo -i
-sroot シェルを起動(現在の環境変数を引き継ぐ)sudo -s
-l許可されたコマンドを一覧表示sudo -l
-k認証キャッシュをクリアsudo -k
-n非対話モード(パスワード不要なければ失敗)sudo -n apt update
-E現在のユーザーの環境変数を引き継ぐsudo -E make install
--オプション終端(コマンドに - が含まれる場合)sudo -- mycmd -x

実行例

パッケージのインストール(最もよく使うパターン)

説明: apt install はシステムファイルを変更するため root 権限が必要です。
コマンド:

sudo apt update
sudo apt install curl

ファイルの所有権・パーミッション変更

説明: /etc/ 配下など root 所有のファイルを変更するときに使います。
コマンド:

sudo chmod 644 /etc/nginx/nginx.conf
sudo chown root:root /etc/cron.d/myjob

root シェルに切り替える

説明: 複数の管理者操作を続けて行う場合、都度 sudo を付けるより sudo -i で root 環境に入るほうが効率的です。
コマンド:

sudo -i
# root として操作...
exit   # 一般ユーザーに戻る

自分に許可された sudo コマンドを確認

説明: -l で自分が sudo できるコマンドの一覧を確認できます。
コマンド:

sudo -l

出力例(抜粋):

User ubuntu may run the following commands on this host:
    (ALL : ALL) ALL

エラー例:sudo グループに未追加のユーザー

sudo apt install nginx

出力例(エラー):

newuser is not in the sudoers file. This incident will be reported.

対処法: 管理者権限を持つユーザーで sudo usermod -aG sudo newuser を実行して sudo グループに追加します。

sudoers の設定と注意点

/etc/sudoersどのユーザー・グループが sudo を使えるかを定義するファイルです。
Ubuntu では初期ユーザーが sudo グループに自動追加されており、そのグループに対して次のルールが設定されています:

# /etc/sudoers の既定ルール(Ubuntu の場合)
%sudo   ALL=(ALL:ALL) ALL

これは「sudo グループのメンバーは、あらゆるホスト・ユーザーで、あらゆるコマンドを実行できる」という意味です。

sudoers を安全に編集する方法

必ず visudo を使ってください。 直接エディタで開いて編集すると、構文エラーが入ったまま保存されて sudo が完全に使えなくなるリスクがあります。visudo は保存前に構文チェックを実行します。

# sudoers の安全な編集
sudo visudo

# 追加設定は /etc/sudoers.d/ に別ファイルで書く(推奨)
sudo visudo -f /etc/sudoers.d/myconfig

よく使う sudoers の設定例

# ユーザー alice にすべての権限を付与
alice   ALL=(ALL:ALL) ALL

# deploy ユーザーが apt コマンドのみをパスワードなしで実行できる
deploy  ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get

# %devops グループに全権限を付与
%devops ALL=(ALL:ALL) ALL

sudoers の重要な注意点

  • /etc/sudoers を直接編集しない: 構文エラーで sudo が使えなくなる。必ず sudo visudo を使うこと。
  • NOPASSWD: ALL の乱用に注意: パスワードなしで何でも実行できる設定はセキュリティリスクが高い。CI/CD 専用ユーザーへの特定コマンド限定など、スコープを絞ること。
  • 追加設定は /etc/sudoers.d/ に分割する: メインファイルを汚さず管理しやすい。sudo visudo -f /etc/sudoers.d/FILENAME で編集する。
  • ユーザーの sudo 権限を確認する: sudo -l -U ユーザー名 で特定ユーザーの権限を確認できる(管理者権限が必要)。
  • ログはシステムログに残る: sudo の実行記録は /var/log/auth.log(Ubuntu)に保存される。不正な sudo 実行(「This incident will be reported」のメッセージ)もここに記録される。

sudo と su の違い

比較項目sudosu
動作1コマンドだけ権限昇格して実行別ユーザー(通常 root)のシェルに切り替える
認証自分のパスワードで認証対象ユーザー(root)のパスワードが必要
ログ実行コマンドがシステムログに記録されるセッション中の操作はほぼ記録されない
Ubuntu のデフォルト初期ユーザーは sudo が使えるroot パスワードが未設定のため使いにくい
推奨度推奨(最小権限の原則に沿っている)必要なときのみ(root 全権限が必要な場合)

関連コマンド

  • apt / apt-get : Debian/Ubuntu 系パッケージ管理コマンド。sudo apt install PKG のように sudo と組み合わせて使う。
  • su : 別ユーザーのシェルに切り替えるコマンド。su - root で root シェルに入る(root パスワードが必要)。
  • visudo : /etc/sudoers を安全に編集するためのコマンド。構文チェック付き。
  • usermod : ユーザーのグループ追加など属性変更。sudo usermod -aG sudo USERNAME で sudo グループへ追加。
  • id / groups : 現在のユーザーが所属するグループを確認。sudo グループへの追加確認に使う。

関連記事

備考

  • 認証キャッシュ: sudo 認証後、デフォルト15分間はパスワード不要で繰り返し実行できる。sudo -k でキャッシュを手動クリア可能。
  • 環境変数の引き継ぎ: sudo はデフォルトで環境変数をリセットする(安全のため)。sudo -E で引き継ぎ可能。
  • 対話コマンドへの対応: sudo vim /etc/hosts のように対話型コマンドも問題なく動作する。
  • パイプとリダイレクト: sudo echo "text" > /etc/file はシェルがリダイレクトを先に処理するため root 権限が効かない。echo "text" | sudo tee /etc/file を使うか、sudo sh -c 'echo "text" > /etc/file' とする。
  • 対象OS: Linux 全般で利用可能。macOS でも同様に動作する。

参考

  • manページ: man 8 sudo, man 5 sudoers, man 8 visudo
  • Ubuntu 公式ドキュメント: RootSudo ページ(sudo の設定と推奨事項)
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント