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.
$ 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
-
wheel
グループの作成 -
wheel
グループにユーザーmatoken
を追加 -
確認
$ 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
-
/etc/doas.conf
にwhell
グループがdoasで権限変更できるように設定,persist
オプションで永続化も. -
ファイル権限確認
Note
|
Example 1. DOAS.CONF(5)より
persist After the user successfully authenticates, do not ask for a password again for some time. |
$ 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:
-
グループに追加したけど反映されていない状態なので権限がない
-
とりあえずnewgrpコマンドで利用可能に
-
1度目のdoasは認証が必要
-
すぐにdoasを叩くと認証が必要ない
-
時間が経ってから再度doasを実行すると認証が必要
$ doas -s (1) doas (matoken@raspberrypi) password: # exit $ doas -L (2) $ doas -s (3) doas (matoken@raspberrypi) password:
-
1度目の実行
-
-L
オプションで永続化の認証をクリア -
すぐに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