私はpython-daemonパッケージを使用して、pythonでデーモンを作成しています。デーモンはブート時に起動され(init.d)、さまざまなデバイスにアクセスする必要があります。 デーモンは、ubuntuを実行している組み込みシステム(beaglebone)で実行します。非特権ユーザーとしてpythonデーモンを実行し、グループメンバシップを維持する
私の問題は、root
よりもむしろ非特権ユーザー(例:mydaemon
)としてデーモンを実行したいということです。
デーモンが必要なグループにそのユーザーを追加したデバイスにアクセスできるようにするためです。私はdaemon.DaemonContext(uid=uidofmydamon)
を使用しているPythonコードの です。
プロセスがうまくroot
daemonizesによって開始され、正しいユーザーが所有しているが、私は、デバイスにアクセスしようとすると許可が deniedエラーが発生しました。 小さなテストアプリケーションを作成しましたが、プロセスがユーザーのグループメンバーシップを継承していないようです。
#!/usr/bin/python
import logging, daemon, os
if __name__ == '__main__':
lh=logging.StreamHandler()
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(lh)
uid=1001 ## UID of the daemon user
with daemon.DaemonContext(uid=uid,
files_preserve=[lh.stream],
stderr=lh.stream):
logger.warn("UID : %s" % str(os.getuid()))
logger.warn("groups: %s" % str(os.getgroups()))
私はUID = 1001でユーザーとして上記のコードを実行したときに、私はルート(またはsu
)のように上記のコードを実行したときには
$ ./testdaemon.py
UID: 1001
groups: [29,107,1001]
のようなものを取得し、私が取得:
はどのようにして、ルートではなく、異なる実効uid とそのままグループのメンバーシップを開始したデーモン・プロセスを作成することができますか?
どのようなLinuxディストリビューションですか? – rkyser
ubuntuとdebian(私はそれに応じて質問を更新しました) –
pythonデーモンを起動する前にデーモンユーザに変更できない理由はありますか?おそらく(この回答)[http://stackoverflow.com/a/8941040/651848]のようなものがあなたのニーズに対応できるでしょうか? – rkyser