Go(v1.7)에서 권한 삭제
Golang에서 사용자 정의 웹 서버를 생성하는 작업에서는 종종 바인딩이 필요합니다. 포트 80과 같은 권한 있는 포트. 보안을 보장하려면 해당 포트에 바인딩한 후 루트 권한을 삭제하는 것이 중요합니다. 이 문서에서는 Go에서 권한 삭제 문제를 살펴보고 해결책을 제공합니다.
이전 버전의 Go에서 syscall.SetUid()를 활용하여 권한을 삭제하면 "지원되지 않음"이 반환되었습니다. 대안으로, iptables를 사용하여 포트 80을 권한이 없는 포트로 리디렉션할 수 있습니다. 그러나 이 솔루션은 루트가 아닌 프로세스가 웹 서버를 가장하도록 허용하여 보안 취약점을 노출시킵니다.
해결책은 Go의 네트워킹과 시스템 호출 기능을 조합하여 사용하는 것입니다. 권한 있는 포트를 열고 UID를 결정한 후 원하는 사용자를 식별하고 UID를 얻고 glibc 함수 setgid() 및 setuid()를 사용하여 UID와 GID를 모두 설정할 수 있습니다. 포트를 바인딩한 후 http.Serve를 호출하기 전에 즉시 이 코드를 실행하는 것이 중요합니다.
제공된 코드 조각은 이 접근 방식을 보여줍니다. 먼저 필요한 TLS 인증서를 로드하고 권한 있는 포트에서 수신 대기합니다. 애플리케이션이 루트로 실행 중인 경우 glibc 호출을 사용하여 UID 및 GID를 설정하여 지정된 사용자로 다운그레이드됩니다. 그런 다음 들어오는 요청을 수신하고 웹 콘텐츠를 제공합니다.
이 솔루션은 Go 애플리케이션에서 권한 삭제 요구를 효과적으로 해결합니다. 보안을 손상시키지 않으면서 안전하고 강력한 맞춤형 웹 서버를 생성할 수 있습니다.
위 내용은 Go 웹 서버에서 권한 있는 포트에 바인딩한 후 권한을 안전하게 삭제하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!