Если вы хотите связать свой сервер с портом 80, вы должны сделать это с правами root и впоследствии отказаться от привилегий.
bind(sockfd, addr, addrlen);
/* process is running as root, drop privileges after bind*/
if (setgid(groupid) != 0)
errx(1, "setgid: Unable to drop group privileges: %s", strerror(errno));
if (setuid(userid) != 0)
errx(1, "setuid: Unable to drop user privileges: %S", strerror(errno));
Как я могу привязать его к порту 80, не будучи корнем, так что безопасность не нарушена (переполнение буфера и т.д.)
не запущена, как корень делает не сделать свой система более безопасна, это просто добавляет еще один слой для использования. Таким образом, вместо того, чтобы думать о том, как не бежать как корень, пожалуйста, убедитесь, что вы не использовать любую известную нестабильную функцию, такие как strcpy()
, sprintf()
и т.д., но вместо того, чтобы использовать strncpy()
, snprintf()
и т.д.
+1 для возможностей, хотя они не переносятся ни на один другой unix. – dwalter
Большинство людей используют Linux в любом случае. И я думаю * BSD имеет нечто похожее. – ThiefMaster