sudo
2024/09/23
何気なく使っているsudo
だが、あまり理解していないことに気付いた。
調べておこう。
見るのは Raspberry Pi(たしか4)である。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
どうやってsudoできる人が決まるのか
Raspberry Pi OSをインストーラでインストールすると、そのとき作ったアカウントはsudo
できるようになっていた。
Ubuntuをインストールしたときもそうだったと思う。Fedoraとかはもう覚えてない。
そのときは自然にsudo
が使えたので気にしなかったが、コマンドを使ってアカウントを追加するとそちらはsudo
が使えなかった。
/etc/sudoers
に設定を書く
基本は /etc/sudoers
ファイルに設定を書く。
直接書くのではなく、エディタの起動と書き込んだ後のチェックまでしてくれるvisudo
コマンドを使うようにする。
(sudo /etc/sudoers
しても read only になってた。)
書き方などは他のサイトを参照しよう。
今見ているsudoers
ファイルはこんな感じだった。
- 個別のユーザに
sudo
で実行できるコマンドを割り当てる(root
) - グループに
sudo
で実行できるコマンドを割り当てる(sudo
) @includedir /etc/sudoers.d
などDefaults
で始まる行はユーザやグループではなくデフォルトの動作設定
グループsudo
に入っていればよいようになっていて、Raspberry Pi OSをインストールしたときのアカウントが自動で sudo
グループに入るようになっていたので使えるのだろう(自分で設定した記憶はない)。
それにroot
のパスワード設定などもしていないので、最初に作ったアカウントでsudo
できなかったら何もできないことになってしまう。
気になったのはroot
ユーザが入っていることだ。
root
でログインしたときにsudo
を使ったときの動作なので、困らないように入っているのかな?
なんとなく、sudo
は「指定したコマンドをroot
ユーザとして実行する」と思っていたが、もしそうならファイルにroot
の設定はいらないはずだ。
いや、これはsudo
コマンドの設定でしかないのでそうとも言えない。
root
ユーザは/home
の下に作られるわけでもないのでやっぱり特殊なアカウントと思っておいて良いだろう。
@includedir
で他のファイルを読み込むことができる。
昔は#includedir
だったらしく、その書き方も許容しているらしい。
/etc/sudoers.d/010_pi-nopasswd
を見てみたが、最初に作ったアカウントが入っていた。
abcdef ALL=(ALL) NOPASSWD: ALL
ちなみにこのファイルの編集をするのもsudo visudo
を使うことになった。
なんでvisudoでnanoが起動するの
visudo
コマンドでnano
が起動した。名前と違うじゃないか。。。
環境変数EDITOR
の設定でもなく、update-alternatives
を使うとよいらしい。
[Ubuntu] visudoのエディタをnanoからvimに変更する #Vim - Qiita
sudoでパスワードがいらない設定
これはsudoers
ファイルに NOPASSWD
属性?を追加するとそうなる。
Raspberry Pi OSインストール時に作成したアカウントは自動でそうなっていた。
.sudo_as_admin_successful
?
sudo
コマンドを実行すると.sudo_as_admin_successful
という隠しファイルが作られる。
この--enable-admin-flag
ビルドオプションの説明が正しいなら Ubuntu用らしい。
バージョン 1.9.6 で追加されたらしい。
今の Raspberry Pi OS では 1.9.13p3 なのだが、今も作られている。
Remove .sudo_as_admin_successful file from home folder. · Issue #56 · sudo-project/sudo
見た感じ、単に空ファイルを作っているだけなので私は気にしないことにした。