Go 웹 서버에서 권한 있는 포트에 바인딩한 후 권한을 안전하게 삭제하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-27 02:29:13
원래의
517명이 탐색했습니다.

How Can I Securely Drop Privileges After Binding to Privileged Ports in a Go Web Server?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿