はじめに
こんにちは!今回はsudoコマンドについて解説します。
sudoは「Super User DO」の略で、一時的に管理者権限でコマンドを実行するためのコマンドです。システム設定の変更、ソフトウェアのインストール、重要なファイルの編集など、特権が必要な操作を行う際に使います。
Linuxを使っていると「Permission denied」ってエラーに遭遇すること、めっちゃありますよね。そんな時にsudoの出番です!
sudoコマンドとは
sudoは、一般ユーザーが一時的にroot権限(管理者権限)を取得してコマンドを実行するための外部コマンドです。
直接rootユーザーでログインするよりも安全で、どのユーザーがいつ何を実行したかログに記録されるため、セキュリティと監査の面で優れています。また、必要な時だけ権限を昇格させるので、誤操作のリスクも減らせます。
基本構文
|
|
初回実行時、またはタイムアウト後には、ユーザーのパスワード入力が求められます(rootのパスワードではありません)。
主なオプション
| オプション | 説明 |
|---|---|
-u ユーザー名 |
指定したユーザーとしてコマンドを実行 |
-i |
rootユーザーとしてログインシェルを起動 |
-s |
rootユーザーとしてシェルを起動 |
-l |
現在のユーザーが実行可能なコマンドを表示 |
-k |
認証キャッシュをクリア(次回パスワード入力必須) |
-v |
認証の有効期限を延長 |
-b |
バックグラウンドでコマンドを実行 |
-E |
環境変数を保持したまま実行 |
使用例
例1: 基本的な使い方
|
|
実行結果:
|
|
パッケージリストの更新には管理者権限が必要なので、sudoを付けて実行します。初回はパスワードを聞かれます。
例2: ファイルの編集
|
|
実行結果:
|
|
システムファイルの編集には管理者権限が必要です。sudoを付けることで編集できるようになります。
例3: 別のユーザーとしてコマンドを実行
|
|
実行結果:
|
|
-uオプションで、postgresユーザーとしてpsqlコマンドを実行します。
例4: rootシェルを起動
|
|
実行結果:
|
|
rootユーザーとしてログインシェルが起動します。複数のコマンドを連続して実行する時に便利です。
例5: 実行可能なコマンドを確認
|
|
実行結果:
|
|
現在のユーザーがsudoで実行できるコマンドを一覧表示します。
例6: 認証キャッシュをクリア
|
|
実行結果:
|
|
次回sudo実行時に必ずパスワード入力が必要になります。セキュリティ上、席を離れる前に実行すると安全です。
例7: 環境変数を保持して実行
|
|
実行結果:
|
|
通常、sudoは環境変数をリセットしますが、-Eオプションで現在の環境変数を保持できます。
例8: パイプと組み合わせる
|
|
実行結果:
|
|
パイプの後ろのコマンドだけにsudoを適用する例です。teeコマンドを使うことで、標準出力とファイル書き込みの両方を行えます。
例9: 複数のコマンドを実行
|
|
実行結果:
|
|
sh -cを使うことで、複数のコマンドをまとめて管理者権限で実行できます。
例10: コマンドの出力をリダイレクト
|
|
実行結果:
|
|
rootディレクトリの内容を一般ユーザーのファイルに保存します。
Tips・注意点
パスワードのキャッシュ
sudoは一度パスワードを入力すると、デフォルトで15分間はパスワード入力なしで実行できます。
|
|
セキュリティ上、長時間席を離れる場合はsudo -kでキャッシュをクリアしましょう。
sudoers ファイルの編集
sudoの設定は/etc/sudoersファイルで管理されていますが、直接編集してはいけません。
|
|
visudoコマンドを使うと、保存時に文法チェックが行われるので安全です。
sudo su との違い
|
|
sudo suよりsudo -iの方が、環境変数が適切に設定されるのでおすすめです。
リダイレクトの注意点
|
|
リダイレクト(>)はsudoの前に評価されるため、sudoが効きません。teeコマンドやsh -cを使いましょう。
パスワードなしで実行する設定
特定のコマンドをパスワードなしで実行するには、visudoで設定します。
|
|
ただし、セキュリティリスクがあるので慎重に!
実践的な使い方
システムアップデート
|
|
UbuntuやDebianでパッケージを最新に更新します。
サービスの管理
|
|
Nginxサービスを再起動します。サービス管理には管理者権限が必要です。
ファイルの所有者変更
|
|
Webサーバーのファイル所有者を変更します。
ログファイルの閲覧
|
|
システムログをリアルタイムで監視します。ログファイルは通常rootしか読めません。
ディスク使用量の確認
|
|
/varディレクトリ内の各ディレクトリのサイズを確認します。
パッケージのインストール
|
|
新しいソフトウェアをインストールします。
ネットワーク設定の変更
|
|
ネットワークインターフェースにIPアドレスを追加します。
ファイルのパーミッション変更
|
|
設定ファイルのパーミッションを変更します。
まとめ
sudoコマンドのポイント:
- 一時的に管理者権限でコマンドを実行できる
- -u: 指定したユーザーとして実行
- -i: rootシェルを起動
- -l: 実行可能なコマンドを確認
- -k: 認証キャッシュをクリア
- -E: 環境変数を保持
- リダイレクトには
teeやsh -cを使う - 設定変更は
visudoで安全に - よく使う組み合わせ:
sudo -i,sudo -u
sudoは強力なコマンドなので、何をしているか理解した上で使いましょう。「とりあえずsudo付ければ動く」じゃなくて、「なぜsudoが必要なのか」を考えるクセをつけると、Linuxの権限システムへの理解が深まりますよ!