sudo コマンドについて
sudo (superuser do) は、
UNIX および
UNIX 系
オペレーティングシステムにおける重要なコマンドの一つです。このコマンドを使用することで、一般ユーザーが一時的に別のユーザー(特に
スーパーユーザー、つまり `root`)の権限を借りてプログラムを実行できます。これにより、システム管理に必要な操作を、セキュリティを維持しつつ柔軟に行うことが可能になります。
sudo の利点
`sudo` は、従来の `su` コマンドと比較して、より安全で管理しやすい環境を提供します。
設定項目の削減: オペレーティングシステムをインストールする際の複雑な設定項目を減らすことができます。
パスワード管理の簡略化: ユーザーは余計な
パスワードを覚える必要がなく、自分の
パスワードのみで管理者権限を利用できます。
操作の再認識: 管理者権限を必要とする操作を行う際にパスワード入力を求めることで、ユーザーに操作内容を再確認させ、誤操作を防ぐ効果があります。
実行ログの記録: `sudo` コマンドの実行ログが残るため、システムに問題が発生した際に原因を特定しやすくなります。これはシステム監視の観点からも非常に有用です。
root アカウントへの直接ログインの抑制: `root` アカウントでの直接ログインを無効化することで、総当たり攻撃などの不正アクセスからシステムを守ります。
管理者権限の管理: ユーザーを管理者グループに追加・削除することで、管理者権限を持つユーザーを柔軟に管理できます。
セキュリティポリシーの詳細設定: `sudo` は `su` よりも細かいセキュリティポリシーを設定することができ、より安全なシステム運用が可能です。
管理者権限の自動破棄: 一定時間経過後に管理者権限を自動的に破棄するよう設定でき、セキュリティリスクを低減できます。
sudo の仕組み
`sudo` コマンドを実行する際、ユーザーは通常、自分の
パスワードを入力します。この
パスワードが正しく、かつ `/etc/sudoers` ファイルにそのユーザーのアクセス権が記述されていれば、指定されたコマンドが実行されます。`sudo` には、GUI 環境で使用するためのグラフィカルなフロントエンド (例: `kdesu`, `kdesudo`, `gksudo`) も存在します。
パスワードが認証されると、デフォルトでは一定時間
パスワードがキャッシュされ、その間は
パスワードの再入力を求められることなく `sudo` コマンドを実行できます。
エラー例
bash
snorri@rimu:~$ sudo vi /etc/resolv.conf
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:
snorri is not in the sudoers file. This incident will be reported.
snorri@rimu:~$
この例では、ユーザー `snorri` が `sudo` を利用しようとしましたが、`/etc/sudoers` ファイルに設定されていないため、アクセスが拒否されています。
ログの例
以下は、アクセス拒否時のログと、`/etc/sudoers` に `snorri` を追加した後のログです。
log
Aug 5 06:00:28 localhost sudo: snorri : user NOT in sudoers ; TTY=pts/1 ; PWD =/home/snorri ; USER=root ; COMMAND=/usr/bin/vi /etc/resolv.conf
Aug 5 06:01:15 localhost su[15573]: (pam_unix) session opened for user root by snorri(uid=1000)
Aug 5 06:02:09 localhost sudo: snorri : TTY=pts/1 ; PWD=/home/snorri ; USER=root ; COMMAND=/usr/bin/vi /etc/resolv.conf
Aug 5 06:02:49 localhost sudo: snorri : TTY=pts/1 ; PWD=/home/snorri ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
設定
`sudo` の設定は、`/etc/sudoers` ファイルに記述することで行います。このファイルを直接編集する代わりに、`visudo` コマンドを使用することが推奨されています。`visudo` は、設定ファイルの構文をチェックし、誤った設定によるシステムへの影響を防ぎます。
`/etc/sudoers` ファイルは、「どのユーザーがどのコマンドを、どの権限で実行できるか」を定義します。設定は
EBNF を用いた構文で記述されます。
Windows 版の sudo
近年、Microsoft が開発した Sudo for Windows が、Windows 11 24H2 (Build 26052) 以降で利用可能になりました。また、サードパーティ製の gsudo (sudo for windows) も存在します。
歴史
`sudo` は 1980 年にニューヨーク州立大学バッファロー校で開発されました。現在も活発に開発が続けられており、
OpenBSD の開発者である Todd C. Miller がメンテナンスを担当しています。
関連項目
setuid: プログラムの実行時に、そのプログラムの所有者の権限で実行する仕組み。
su: 別のユーザーに切り替えるコマンド。
doas: `sudo` の代替となるコマンド。
ユーザーアカウント制御 (UAC): Windows における権限昇格機能。
大いなる力には、大いなる責任が伴う: `sudo` 使用時の注意を喚起する言葉。
外部リンク
公式ウェブサイト
Manpage of SUDO
rootsh と sudosh
Sudo Fun (Mac OS X)
Sudo for Windows - Microsoft