Linux 固有の setfsuid()
/ setfsgid()
プロセスごとではなく、スレッドごとです。これらは、このユース ケース (ファイル サーバー) 用に特別に設計されています。
access()
に注意してください それでも実際の uid と gid を使用してアクセスをチェックします。これは設計によるものです (「このバイナリを実行したユーザーがこのファイルへのアクセス権を持っている必要がありますか」という質問に答えることが意図されています)。 )。 setfsuid()
の場合 / setfsgid()
その場合は、要求された操作を試して、その時点でのアクセス許可がないために失敗したことを検出する必要があります。
1 つのスレッドだけの uid を変更するには、syscall を直接使用する必要があります:syscall(SYS_setresuid, ...); libc 関数 setresuid() は、(すべてのスレッドに送信する信号を使用して) すべてのスレッドに対してそれを同期します!