ルートで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の場合、計算するだけでなく実際に設定するという意味です。