Linuxコマンド - sudo
概要
sudoコマンド (substitute user do または superuser do) とは、一時的に管理者権限 (root権限) でコマンドを実行するための重要なツールである。
基本的な使用方法は、実行するコマンドの前にsudoを付加する。
# 使用例 sudo zypepr update
sudoコマンドを実行する場合、パスワードの入力が求められる。
これは、セキュリティのため、sudoを使用する場合にユーザ認証が必要となるためである。
sudoのメリットを以下に示す。
- システムの安全性が向上する (常時root権限での操作を避けられる)
- 管理者権限の使用履歴が記録される。
- 特定のユーザに限定した権限付与が可能である。
設定ファイルである/etc/sudoersでは、どのユーザがsudoを使用できるかどうか、どのコマンドを実行できるかどうかを細かく制御することができる。
ただし、設定ファイルの構文エラーを防ぐため、このファイルの編集にはvisudoコマンドを使用することが推奨される。
sudoコマンドの使用には責任が伴うことに注意する。
誤った使用はシステムに重大な影響を与える可能性があるため、実行前に必ずコマンドの内容を確認することが重要である。
また、セキュリティにおいて、sudoコマンドの実行履歴が/var/log/auth.logに記録されるため、システム管理者は誰がいつ何の操作を行ったかを追跡できる。
開発やテスト環境では、sudo suコマンドでroot権限のシェルを開始することができるが、本番環境ではセキュリティリスクを避けるため、必要最小限のsudoコマンドの使用に留めることが推奨される。
設定の確認
sudoers設定ファイルの設定を確認することができる。
sudo -l
パスワード認証のタイムアウト
パスワード認証のタイムアウト時間において、デフォルトでは15分に設定されている。
この時間を変更する場合は、sudoers設定ファイルを編集する。
sudo visudo
# 例. 30分に設定する場合 Defaults timestamp_timeout=30
# 特定のユーザにのみ適用する場合 Defaults:<ユーザ名> timestamp_timeout=30
timestamp_timeoutの設定値を以下に示す。
- timestamp_timeout=0
- 毎回パスワードを要求する。
- timestamp_timeout=30
- 30分間パスワード入力を省略する。
- timestamp_timeout=-1
- タイムアウトなし (非推奨)
※注意
タイムアウト時間を長く設定する場合、セキュリティリスクが高まる可能性がある。
システムのセキュリティポリシーに従って適切な値を設定することを推奨する。
パスワードレス実行
sudoers設定ファイル
sudoers設定ファイルを編集して、パスワード入力を省略することができる。
sudo visudo
# 全てのユーザに対応する場合 ALL=(ALL) NOPASSWD: <コマンド 例: /usr/bin/zypper update> # 特定のユーザにのみ適用する場合 <ユーザ名> ALL=(ALL) NOPASSWD: <コマンド 例: /usr/bin/zypper update>
タイムスタンプの更新
sudo -vコマンドによるタイムスタンプの更新を使用することができる。
# スクリプトの最初で認証を済ませる
sudo -v
# 以降のsudoコマンドは一定時間パスワード不要
sudo zypper update
sudo zypper install <パッケージ名>
環境変数SUDO_ASKPASSの使用
環境変数SUDO_ASKPASSを使用して、パスワードを提供するスクリプトを作成する。
# パスワードを提供するシェルスクリプトファイル (例: /path/to/pw-script.shファイル)
#!/bin/bash
echo "<パスワード>"
スクリプトのパーミッションを制限して、セキュリティ対策を行う。
chmod 700 /path/to/pw-script.sh
環境変数を設定して、パスワード認証が必要なコマンドを実行する。
export SUDO_ASKPASS=/path/to/pw-script.sh sudo -A zypper update
パスワードをスクリプトに直接記述する必要がある場合は、以下に示すようなセキュリティ対策を行う必要がある。
- スクリプトのパーミッションを制限する。 (例: グループおよびその他ユーザは読み書き実行は不可とする)
- パスワードを環境変数として外部から注入する。
- 暗号化されたファイルからパスワードを読み込む。
- セキュアなパスワード管理システムを使用する。
sudo -Sコマンドの使用 (非推奨)
この方法は、セキュリティの観点から本番環境での使用は推奨されない。
パスワードがシェルの履歴に残る、あるいは、プレーンテキストでスクリプトに保存される危険性がある。
そのため、テスト環境や開発環境での自動化スクリプト等で使用する。
echo "<パスワード>" | sudo -S <コマンド> # 例: echo "hoge" | sudo -S zypper update
-Sオプションの詳細を以下に示す。
- -Sオプションは、標準入力からパスワードを読み取ることを指示する。
- パイプ (|) の左側で出力したパスワードを、右側のsudoコマンドに渡す。