Linux入門:コマンド操作のきほん
sudo - スーパーユーザーの力
「とりあえず sudo」を打つ前に、なぜ断られたのかを見る
Permission denied が出ると、頭に sudo を足して打ち直したくなります。たいてい通ってしまうので、それが癖になります。ただ通った理由は、あなたの操作が正しかったからではなく、権限の判定そのものを飛ばして押し切ったからです。
先にやることは ls -l で持ち主と権限を見ることです。持ち主が自分ではないから断られているのか、実行の権利が立っていないから断られているのかが分かれば、chown か chmod の 1 手で直ります。自分で直せる範囲なのに sudo で押し切ると、今度はそのファイルが root のものになって、次に触る人が同じところで詰まります。
sudo が本当に要るのは、パッケージの導入やサービスの再起動のように、システム全体に効く操作をするときです。
root は権限の判定を素通しするユーザー
Linux には番号が 0 のユーザーが 1 人だけいて、これを root と呼びます。root に対しては、ここまで見てきた 9 個の権利のチェックがそもそも働きません。他人のファイルも読めますし、消せます。
ターミナル
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1567 May 20 12:00 /etc/shadowパスワードのハッシュが入ったこのファイルは、その他の人には 1 文字も読めない設定です。それでも root なら読めます。日常の作業を root で行わないのは、打ち間違いが全部そのまま通ってしまうからです。
1 コマンドずつ借りる
ターミナル
sudo systemctl restart nginx
sudo -u www-data ls /var/www/privatesudo は 1 行分だけ権限を貸し出して、終わったら元のユーザーに戻す仕組みです。-u を付ければ root ではなく指定したユーザーとして実行できるので、Web サーバーからそのファイルが本当に見えているのかを、当人の目線で確かめられます。
sudo -i で root のシェルに入ることもできますが、そこに居座ると以降の操作が全部その権限で走ります。1 行ずつ借りるほうが、打ち間違えたときの被害が小さく済みます。
誰が借りられるかは sudoers に書いてある
貸し出しを許すかどうかは /etc/sudoers に書かれています。Debian 系なら sudo グループ、Red Hat 系なら wheel グループに入っている人が対象、というのが既定の設定です。
ターミナル
%sudo ALL=(ALL:ALL) ALL誰がいつ何を実行したかは記録に残ります。全員が root で直接ログインする運用より、あとから追いかけやすくなるのが、この仕組みのもう 1 つの利点です。
このファイルを普通のエディタで開いて書き間違えると、
sudoが誰にも使えなくなり、直すためのsudoも打てなくなります。編集は必ずsudo visudoから行ってください。保存の前に文法を検査して、壊れた内容なら書き込みを止めてくれます。