PHP posix_setuid() を使用して同じグループにいるときにファイルに書き込むことはできません。

PHP posix_setuid() を使用して同じグループにいるときにファイルに書き込むことはできません。

ルートでPHPプロセスを実行しています。このプロセスはposix_setuid(1500);出力ファイルを呼び出してから開こうとします。

ls -l output.logこの出力は次のように表示されます。

-rwxrwxr-x 1 www-data www-data 2294376 3月19日 12:05 Output.log

私のユーザーアカウント(jonny)のコマンドは、次のid出力を表示します。

uid=1500(jonny) gid=1500(jonny) groups=1500(jonny),27(sudo),33(www-data)

uidをjonnyに変更してもPHPプロセスがoutput.logファイルに書き込めないのはなぜですか?

答え1

posix_setuid(1500)UIDを1500にのみ変更してください。これはファイルへのアクセスを許可しません。通常のユーザーとしてログインしてこのファイルにアクセスできるのは、UID 1500を所有しているだけでなく、グループ1500とセカンダリグループ27と33も所有しているためです。追加のグループ33(www-data)がある場合は、ファイルにアクセスできます。文書。

おそらく次のようにする必要があります:

posix_initgroups("jonny", 1500);
posix_setuid(1500);

順序が重要です。を呼び出してroot権限を放棄した後は、posix_setuid資格情報を設定できなくなり、他の順序では機能しません。

ご注意ください、出荷書類ビーチposix_initgroupsおそらく間違っているようです(PHPの世界の多くのように)。 「グループアクセスリストを計算する」と記載されていますが、実際には参照しているPOSIX関数のように動作するようです。 trueの場合、計算するだけでなく実際に設定するという意味です。

関連情報