daemontoolsのsetuidgidが補助グループ (supplementary groups) 権限をつけてくれない問題 (python)
いままでハマったことがなかったのだけど、ついにハマってしまった。
補助グループ権限もつけてくれるsetuidgidのようなもの - (ひ)メモ を読んで、どうするかな〜と思いつつsetusergroupsを試してみたが、Unix::Groups がデフォルトで入っておらずちょっと困ったので python で以下のようにした。
#!/usr/bin/python
import os
import sys
import pwd
if len(sys.argv) < 3:
print >> sys.stderr, 'Usage: setusergroups user program'
sys.exit(1)
pw = pwd.getpwnam(sys.argv[1])
pw_name = pw[0]
pw_uid = pw[2]
pw_gid = pw[3]
pw_home = pw[5]
os.environ['HOME'] = pw_home
os.initgroups(pw_name, pw_gid)
os.setgid(pw_gid)
os.setuid(pw_uid)
os.execvp(sys.argv[2], sys.argv[2:]) エラると例外で落ちてトレースバックがでて十分なので特にエラー処理してな
備考
ハマったのは Raspberry Pi の pi ユーザで i2c を触るようなデーモンを作るケースで、この場合 pi ユーザに i2c グループ権限がついてないとダメなのでこういうのが必要になる。
依存なしでどうにかしたかったのは、cpanm が ansible の Core Modules に入ってなくてめんどかったから
関連エントリー
- Stable Diffusion で prompt 情報を画像に保存しておく PNG にはメタデータを保存するチャンクがある。Python からも簡単に読み書き可能なので、ここに prompt を保存しておくと、あとか...
- NanoPi NEO2 でやること、NanoHat OLED のメモ書き nanopi-neo2_friendlycore-xenial_4.14.52_20180628.img.zip の場合 /etc/rc.l...
- Raspberry Pi から HDMI-CEC コントロール サイネージ HDMI CEC 連携 カレンダーを表示するおうちサイネージ というのを作っていたがモニタの置き場がなくなってしまったので、テレ...
- Klipper でOS起動時に oneshot gcode を実行する。 Klipper はなるべく早く起動して、ディプレイに起動してますよというアピールをしてほしい。しかしいろいろ設定した printer.cfg...
- ARM Linux EABI の asm で getenv する asm だけで getenv をしてみようとしたらかなり大変で、本当はもっと先の目標があったけど、遥か遠いので、とりあえず getenv し...