private function dropPrivileges()
{
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
return;
}
$user = $this->options->user;
if (!extension_loaded("posix")) {
if ($user !== null) {
throw new \RuntimeException("Posix extension must be enabled to switch to user '{$user}'!");
} else {
$this->logger->warning("Posix extension not enabled, be sure not to run your server as root!");
}
} elseif (posix_geteuid() === 0) {
if ($user === null) {
$this->logger->warning("Running as privileged user is discouraged! Use the 'user' option to switch to another user after startup!");
return;
}
$info = posix_getpwnam($user);
if (!$info) {
throw new \RuntimeException("Switching to user '{$user}' failed, because it doesn't exist!");
}
$success = posix_seteuid($info["uid"]);
if (!$success) {
throw new \RuntimeException("Switching to user '{$user}' failed, probably because of missing privileges.'");
}
}
}