시작 스크립트/구성 파일에 데이터베이스 비밀번호를 저장하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/10731

  •  08-06-2019
  •  | 
  •  

문제

따라서 웹 서버 앱은 데이터베이스에 연결해야 하며 일부 다른 앱에는 부팅 시 실행되는 시작 스크립트가 있습니다.

이러한 애플리케이션의 이름/비밀번호를 저장하는 가장 좋은 방법은 무엇입니까?

  • 보안, 예:아마도 우리는 시스템 관리자가 데이터베이스 비밀번호를 알기를 원하지 않을 것입니다.
  • 유지 관리성(예:비밀번호 변경 시 구성을 쉽게 변경할 수 있도록 합니다.

Windows와 Linux 솔루션 모두 높이 평가됩니다!

도움이 되었습니까?

해결책

비밀번호를 보호하는 가장 좋은 방법은 비밀번호 사용을 중단하는 것입니다.신뢰할 수 있는 연결을 사용하세요.어떻게:ASP.NET 2.0에서 Windows 인증을 사용하여 SQL Server에 연결.그러면 숨길 것이 없습니다. web.config 및 소스를 전 세계에 게시해도 여전히 데이터베이스에 접근할 수 없습니다.

그래도 문제가 해결되지 않으면 내장된 기능을 사용하세요. ASP.NET의 구성 암호화 시스템.

다른 팁

PostgreSQL은 다음을 제공합니다. 좋은 해결책 문서에서 이런 종류의 상황에 대해 설명합니다.기본적으로 SSH를 사용하여 시스템의 포트를 원격 시스템의 PostgreSQL 서버 포트에 연결합니다.여기에는 세 가지 인증 단계가 있습니다.

  1. 특정 사용자만 연결할 수 있도록 허용하는 등 로컬 포트에 대한 액세스를 제한합니다.
  2. 특정 사용자로 SSH를 사용하여 PostgreSQL 호스트에 대한 비밀번호 없는 연결을 설정합니다.
  3. 사용자 ssh가 비밀번호 없이 PostgreSQL에 로컬로 액세스할 수 있도록 연결하도록 허용합니다.

이렇게 하면 사용자 계정이 안전하고 SSH 구성이 건전하며 어디에도 비밀번호를 저장할 필요가 없는지 여부에 대한 보안이 저하됩니다.

편집하다:이 기능은 TCP/IP 포트를 수신하는 모든 데이터베이스에서 작동한다는 점을 덧붙여야 합니다.PostgreSQL에 설명되어 있습니다.그리고 포트 제한을 수행하려면 iptables(또는 Linux에서 이에 상응하는 것)가 필요할 것입니다.보다 이것.

나는 lomaxx에 동의합니다:누군가가 이미 서버에 있거나 서버에 광범위한 액세스 권한을 가지고 있다면(예: 시스템 관리자) 게임은 거의 끝난 것입니다.따라서 원하는 수준만큼 안전하다고 신뢰하는 서버를 사용하는 것이 좋습니다.구체적으로:

  • 시스템 관리자를 신뢰해야 합니다.
  • 동일한 서버에서 코드를 실행하는 다른 사람을 신뢰해야 합니다(이것이 공유 호스팅이 나에게 큰 도움이 되지 않는 이유입니다).

그 외에도 환경 변수는 이러한 유형의 자격 증명을 저장하는 데 널리 사용되는 선택인 것 같습니다. 이는 소스에 대한 액세스만(예: 개발 상자를 손상하여) 직접 공개하지 않고 적절하게 지역화할 수 있음을 의미하기 때문입니다. 각 서버(개발, 테스트 등).

일반 텍스트?귀하의 서버에 있는 경우 서버가 무단 액세스를 허용하지 않을 만큼 충분히 안전하기를 바랍니다.사람들이 서버의 구성 파일에 액세스할 수 있다면 훨씬 더 일찍 문제가 발생한 것입니다.

설명:보안, 유지 관리 측면에서(예:로그인을 변경해야 하는 경우 나중에 찾을 수 있는지 등)

@lomax:아마도 모든 사람이 물리적 서버에 액세스하는 것을 원하지 않을 수도 있습니다(예:sysadmins)를 사용하여 비밀번호를 확인하세요.

감사해요!

대부분의 경우 일반 텍스트 파일(예:base64 사용).루트 액세스 권한이 있는 특정 시스템 관리자로부터 저장된 비밀번호를 완전히 보호할 수는 없으므로 시도할 필요가 없습니다.그러나 단순한 난독화는 실수로 숄더 서퍼에게 비밀번호가 노출되는 것을 방지합니다.

더 복잡한 대안은 다음 중 하나를 수행하는 전용 보안 비밀번호 서버를 설정하는 것입니다.

  • 비밀번호 복호화 서비스를 제공합니다
  • 실제로 보안 수준이 낮은 다른 서버에서 사용할 수 있도록 비밀번호를 저장합니다.

사용되는 네트워크 프로토콜에 따라 tcpdump를 사용하는 악성 시스템 관리자로부터 보호하지 못할 수도 있습니다.그리고 디버거를 사용하여 결정적인 시스템 관리자로부터 보호하지 못할 수도 있습니다.그 시점에서는 Kerberos 티켓과 같은 것을 살펴볼 때가 될 수 있습니다.

대칭 암호화 키를 바이너리에 굽고 해당 바이너리가 시작될 때 디스크의 파일에서 암호화된 사용자 이름/비밀번호를 읽도록 할 수 있습니다.

그러나 코드가 일부 소스 저장소 어딘가에 저장될 가능성이 높기 때문에 이는 실제로 난독화에 지나지 않습니다.

방화벽과 개인 네트워크 버블을 사용하여 물리적으로나 네트워크를 통해 서버에 대한 액세스를 제어하고 권한이 잠겨 있는 디스크에 암호를 일반(또는 Base-64 인코딩)으로 저장하는 것이 더 나을 것이라고 제안합니다. 웹 앱의 실행 사용자에게.

IP를 통한 웹 앱 시스템의 연결만 허용하도록 데이터베이스 서버를 잠글 수도 있습니다.

궁극적으로 문제는 웹 앱에서 프로그래밍 방식으로 무인 사용을 위해 키(DB 사용자 이름/비밀번호 쌍)를 사용할 수 있어야 한다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top