皆さんsudo使ってますか? 残念ながらUbuntuは,
sudoとはなんぞや
「sudo」
- ※1
- 「su」
は元々 「UID=0のユーザーに切り替える」 だけのコマンドだったので, 本来の意味は 「super user」 なのかもしれません。
Ubuntuはシステム管理者である
- ※2
- 具体的には,
/etc/ shadowにおいてパスワードフィールドにcrypt()関数で暗号化したときに発生し得ない文字である 「!」 をセットすることで, どんなパスワードもエラーになるため, そのアカウントでログインできなくなります。
何かパッケージをインストールする場合: $ sudo apt-get install panzer [sudo] password for miho: ("miho"ユーザーのパスワードを入力する)
具体的には次のような理由
- rootのパスワードを設定しなくてよいので,
インストーラーの質問項目を減らせる - システム管理者は本人とroot,
2つのアカウントのパスワードを覚えておく必要がない - 何かシステムに変更を加えるときは明示的にsudoを使わなければならないので,
注意を喚起できる - /var/
log/ auth. logにsudoで実行したコマンドが残るので, 何かあったときに確認しやすい - システムに対する攻撃者は,
必ず存在するであろうrootアカウントに対してブルートフォースアタックを行うことが多いので, rootアカウントをロックしておくとその攻撃に対しては安全性が高まる - sudoを実行できるユーザーをグループで管理できるので,
複数の管理者を追加・ 削除しやすい - あるユーザーには特定のコマンドだけsudoを実行できるようにするなど,
細かいポリシー設定が可能
いろいろとお題目を立ててはいますが,
ちなみにデスクトップ版のUbuntuの場合,
sudoの使い方あれこれ
sudoの使い方は
この使い方でほとんどの目的は果たせるはずですが,
リダイレクト先で特権が必要な時
日常的にsudoを使う時に最初に困るのが,
# echo "foo" > /etc/bar.conf
これをそのままsudoに置き換えても動きません。
$ sudo echo "foo" > /etc/bar.conf bash: /etc/bar.conf: 許可がありません
エラーメッセージからもわかるとおり,
このようにリダイレクト先で特権が必要な時はteeコマンドを使います。
$ echo "foo" | sudo tee /etc/bar.conf [sudo] password for miho: foo
teeコマンドは標準入力を,
別の手段として,
- ※3
- shコマンドはdashへのシンボリックリンクです。bashの拡張機能を使いたい場合はbashに変更してください。
$ sudo sh -c 'echo "foo" > /etc/bar.conf'
この方法は,
teeを使った場合のログ:
sudo: (中略) COMMAND=/usr/bin/tee /etc/bar.conf
shを管理者権限で起動した場合のログ:
sudo: (中略) COMMAND=/bin/sh -c echo "foo" > /etc/bar.conf
しかしながら本来管理者権限は必要ないコマンドまで管理者権限で実行することになります。どちらを使うかは状況にあわせて判断してください。