원격 사용자가 원격 데이터베이스에만 액세스하도록 제한하는 방법

원격 사용자가 원격 데이터베이스에만 액세스하도록 제한하는 방법

프로덕션 서버에서 PostgreSQL 데이터베이스를 업데이트할 수 있는 원격 사용자를 설정하고 싶습니다.

나는 두 대의 컴퓨터를 가지고 있는데, 하나는 이라는 명령 및 제어 시스템으로 사용하는 로컬 서버입니다 Controlling_Machine. 이 컴퓨터는 프로덕션에서 실행 중인 원격 서버()에 로그인 Remote_Server하고 데이터베이스를 업데이트하는 데 사용됩니다 Database_A.

용어

Controlling_Machine: 인터넷에 액세스할 수 있지만 사이트가 방화벽으로 보호되어 들어오는 연결을 허용하지 않는 Linux 시스템입니다. (원격접속은 불가능합니다.)

Remote_Server: 클라우드에서 실행되는 Centos 또는 Ubuntu 프로덕션 가상 머신입니다.

DB_User: 특정 데이터베이스에만 쓸 수 있는 PostgreSQL의 사용자 계정입니다.

Server_User: SSH를 통해 서버에 연결하기 위한 사용자 계정입니다.

Database_A: 제어머신을 통해 원격으로 데이터베이스를 업데이트하고 싶습니다.

지금까지 데이터베이스에 원격으로 액세스하는 두 가지 방법을 생각해 보았습니다.

1. 원격 사용자와 로컬 데이터베이스 사용자를 조합하여 사용

SSH를 통해 서버에 로그인 Server_User하고 홈 폴더를 제외한 모든 항목에 대한 읽기 액세스를 제한합니다. 그러면 이 사용자는 이 목적으로 로그인 데이터베이스를 사용할 수 있습니다 DB_User.

  1. Server_User나는 /etc가 아닌 /media가 아닌 home 이외의 다른 폴더를 읽을 수 있기를 원하지 않습니다 . 강력히 제한되길 바랍니다.

  2. 이 사용자가 실행 중인 프로세스를 보거나 다른 것에 액세스하는 것을 원하지 않습니다.

  3. Controlling_Machine부팅이 Server_User손상되고 공격자가 로그인 하면 Remote_Server그들이 입힐 수 있는 유일한 피해는 다음과 같다는 것을 확인하고 싶습니다 Database_A.

전체 과정은 다음과 같습니다.

Controlling_Machine-> Remote_Server->Database_A

2. 원격 데이터베이스 사용자를 사용하고 PostgreSQL을 공용 인터넷에 노출

이 결과를 얻는 또 다른 더 쉬운 방법은 데이터베이스 사용자를 사용하여 로그인할 수 있도록 PostgreSQL 데이터베이스에 대한 공개 액세스를 활성화하는 것입니다. 즉, Remote_Server더 이상 거래에 관여하지 않기 때문에 다른 사용자를 설정할 필요가 없습니다.

  1. 그러나 이것이 원격 사용자 SSH 설정만큼 안전합니까 Remote_Server? 이를 위해 개인/공개 키를 사용하고 싶습니다.

  2. 하나의 데이터베이스에만 원격 액세스를 허용하도록 PostgreSQL을 설정할 수 있습니까?

전체 과정은 다음과 같습니다.

Controlling_Machine->Database_A

무엇이 더 안전합니까?

최대한 안전한 방법을 사용하고 싶습니다. 공용 IP에 PostgreSQL을 배치하는 것이 너무 위험하다면 프로덕션 서버에 대한 로컬 데이터베이스 액세스를 유지하고 SSH를 통해 원격으로 로그인해야 합니다.

또한 이것이 가장 안전한 방법이라면 이 원격 Linux 사용자가 PostgreSQL에 로컬로만 로그인하도록 제한하려면 어떻게 해야 합니까 DB_User(SSH를 통해 원격으로 로그인한 경우 Server_User)

답변1

ssh나는 사용자가 실행할 수 있는 명령을 사용하고 제한하기로 선택합니다 . 최소한 이렇게 하면 연결이 안전하다는 것을 알 수 있습니다. 다음 항목을 통해 이 작업을 수행할 수 있습니다 /etc/ssh/sshd_config.

Match User your_user
   X11Forwarding no
   AllowTcpForwarding no
   ForceCommand your-command arg1 arg2

선택한 데이터베이스를 강제로 사용하도록 하는 매개변수를 전달하는 경우 your-command이 방법이 도움이 될 수 있습니다 . (또는 Server_User의 공개 키를 기반으로 Authorized_keys 파일에서 이 작업을 수행할 수 있습니다.)

PostgreSQL에 대해 자세히는 모르지만 데이터베이스를 조작하는 데 사용하는 명령줄 도구 내에서 작업 중인 데이터베이스를 변경할 수도 있습니다. 그렇다면, 당신은 사물을 제한할 수 없을 것입니다. 일시적으로 (bash) 하위 쉘을 열 수도 있는데, 이는 귀하의 경우 더 큰 문제입니다.

그래서 먼저 사용자가 무엇을 하기를 원하는지 살펴보겠습니다. 백업 수행, 백업 복원 및 기타 일부 기능으로 제한되어 있는 경우 이 기능만 수행하도록 제한된 작은 프로그램을 만들거나 명령을 사용하여 서버에 명령 파일을 복사하도록 허용하는 것이 더 합리적일 수 있습니다. 그런 다음 cron 작업은 명령을 처리합니다(허용되는 것 이외의 모든 항목은 삭제됩니다).

관련 정보