マルチスレッドプロセスで1つのスレッドのUID/GIDのみを変更する方法はありますか?Linuxの1つのスレッドのUID/GIDのみを変更する
ファイルサービングアプリケーションを作成している理由 - 呼び出し元のuid/gidが正しいユーザーに設定されていて、正しいファイル/ディレクトリが正しいuid/gidで作成されていない限り、ACLとクォータが強制されない
通常、ネットワークアプリケーションは、最初はfork()して、各ユーザーの要求を別々のプロセスで処理できます。共有データが必要な場合は、ある種の共有メモリを経由する必要があります。しかしながら、例えば。デフォルトでFUSE(Linuxユーザーファイルシステム)はマルチスレッドを使用し、Pythonバインディングと組み合わせて、フォークモデルを使用しようとするのは現実的ではありません。
プロセス全体の '一貫性のある' UIDはPOSIX標準によるようですが、古いLinuxはPOSIXに従わず、異なるスレッドに対して異なるUIDを許可していました。新しいカーネルはPOSIXに従っているようですが、古い '壊れた'振る舞いを許可する方法はありますか?
これは優れています - 私はチェックして、驚くべきことに、それらが本当にスレッドごとであることを発見しました。これはおそらく好ましい方法でしょう。 しかし、私がテストしなかった理由は、quota()とaccess()が動作しないことです。他にもうまくいく - これはおそらくLinuxのバグです。 – ondra
はい、sys_setfsuid()のカーネルコードのコメントに特にaccess()が記述されているので、バグのように聞こえます... – caf
@Ondrej、 'fsuid'は以下のコードを投稿してください。他のUID/GID構成と異なり、スレッドごとであり、プロセスごとではありません。カーネルとglibcのバージョン、スレッド実装(NPTL、LinuxThreads、OndrejThreadsなど)も指定してください。 – pilcrow