Linux上のOpenDoasで永続機能(persist)を使う

OpenBSD由来のDoasコマンドというものがあります.Linux等でのsudoに似たものですが,小さくシンプルです.このDoasコマンドの移植版のOpenDoasはLinuxなどでも動作します.
sudoコマンドは1度認証に成功するとそのセッションでしばらくの間認証が必要なくsudoが実行できて便利ですが,OpenBSDのDoasでは同様の機能をOpenBSDのkernel APIを使ってタイムアウトを確認しておりこのAPIはOpenBSDだけのものなので当初OpenDoasには実装されていませんでした.
いつの間にかOpenDoasにも実装されているのに気づいたので試してみました.

GitHubを見るとこの辺で入ったようです.結構前ですね…….

Debian/Raspberry Pi OSにはパッケージがあるのでこちらを使います.

$ rmadison opendoas
opendoas   | 6.8.2-1       | stable         | source, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
opendoas   | 6.8.2-1       | testing        | source, armel, armhf, i386, mips64el, ppc64el, s390x
opendoas   | 6.8.2-1       | unstable       | source, armel, armhf, i386, mips64el, ppc64el, s390x
opendoas   | 6.8.2-1       | unstable-debug | source
opendoas   | 6.8.2-1+b1    | stable         | amd64
opendoas   | 6.8.2-1+b1    | testing        | amd64, arm64, riscv64
opendoas   | 6.8.2-1+b1    | unstable       | amd64, arm64, riscv64
$ apt show opendoas
Package: opendoas
Version: 6.8.2-1
Priority: optional
Section: admin
Maintainer: Scupake <scupake@riseup.net>
Installed-Size: 99.3 kB
Provides: doas
Depends: libc6 (>= 2.33), libpam0g (>= 0.99.7.1)
Breaks: doas (<< 6.8.2)
Replaces: doas (<< 6.8.2)
Homepage: https://github.com/Duncaen/OpenDoas
Download-Size: 20.9 kB
APT-Manual-Installed: yes
APT-Sources: http://raspbian.raspberrypi.org/raspbian bookworm/main armhf Packages
Description: minimal replacement for sudo, with persist support
 OpenDoas: a portable version of OpenBSD's doas command
 doas is a minimal replacement for the venerable sudo. It was initially written
 by Ted Unangst of the OpenBSD project to provide 95% of the features of sudo
 with a fraction of the codebase.
OpenDoasの導入
$ sudo apt install opendoas

sudoコマンドでのsodoグループのように wheel グループを作成し,このグループのユーザーがdoasを使えるようにすることにします.(sudoグループを流用しても良かったかも?)

$ sudo addgroup --system wheel (1)
$ sudo usermod -aG wheel matoken (2)
$ grep ^wheel: /etc/group (3)
wheel:x:140:matoken
  1. wheel グループの作成

  2. wheel グループにユーザー matoken を追加

  3. 確認

doasの設定
$ sudo install -m 0400 /dev/zero /etc/doas.conf
$ echo 'permit persist     :wheel' | sudo tee /etc/doas.conf (1)
permit persist  :wheel
$ ls -l /etc/doas.conf (2)
-r-------- 1 root root 22 11月  1 05:46 /etc/doas.conf
  1. /etc/doas.confwhell グループがdoasで権限変更できるように設定, persist オプションで永続化も.

  2. ファイル権限確認

Note
Example 1. DOAS.CONF(5)より
persist  After the user successfully authenticates, do not ask for a password again for some time.
doasと永続化の動作確認
$ doas -s (1)
doas: Operation not permitted
$ newgrp wheel (2)
$ doas -s (3)
doas (matoken@raspberrypi) password:
#
exit
$ doas -s (4)
#
exit
$ doas ls -lA /run/doas/
total 0
---------- 1 root wheel 0 Nov  1  2024 29125-5366-34816-25582434-1001
$ doas -s (5)
doas (matoken@raspberrypi) password:
  1. グループに追加したけど反映されていない状態なので権限がない

  2. とりあえずnewgrpコマンドで利用可能に

  3. 1度目のdoasは認証が必要

  4. すぐにdoasを叩くと認証が必要ない

  5. 時間が経ってから再度doasを実行すると認証が必要

永続化のクリア
$ doas -s (1)
doas (matoken@raspberrypi) password:
#
exit
$ doas -L (2)
$ doas -s (3)
doas (matoken@raspberrypi) password:
  1. 1度目の実行

  2. -L オプションで永続化の認証をクリア

  3. すぐにdoasを実行しても永続化の認証がクリアされているので再度認証が必要

Note
Example 2. DOAS(1)より
-L          Clear any persisted authentications from previous invocations, then immediately exit.  No command is executed.

という感じで普通に使えそうです.
ちなみにsudoコマンドでは永続化のタイムアウト時間は設定ファイルで変更可能ですが,doasではハードコードされており設定では変更できないようです.

timestamp_set(fd, 5 * 60);
環境
$ dpkg-query -W opendoas
opendoas        6.8.2-1
$ lsb_release -dr
No LSB modules are available.
Description:    Raspbian GNU/Linux 12 (bookworm)
Release:        12
$ arch
armv7l
$ grep ^Model /proc/cpuinfo
Model           : Raspberry Pi 3 Model B Rev 1.2

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です