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に入っていればよいようになっていて、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用らしい。

source

バージョン 1.9.6 で追加されたらしい。
今の Raspberry Pi OS では 1.9.13p3 なのだが、今も作られている。

Remove .sudo_as_admin_successful file from home folder. · Issue #56 · sudo-project/sudo

見た感じ、単に空ファイルを作っているだけなので私は気にしないことにした。

code