저는 게임 서버를 설정하는 취미 프로젝트를 위한 작은 제어판을 개발 중입니다. 하지만 보안에 대한 우려가 있어 의견을 듣고 싶습니다.
나의 첫 생각아이디어는 제어판을 "원격으로"(웹 프런트 엔드와 상호 작용) 사용자로 실행하고 게임 서버를 설정할 때 다음과 같이 모두 홈 폴더의 하위 디렉터리로 이동하는 것입니다.
/home/paneluser/servers/server1/
/home/paneluser/servers/server2/
/home/paneluser/servers/server3/
그러나 사용자는 FTP를 통해 이러한 하위 디렉터리에 액세스할 수 있으므로 악성 코드를 업로드(예: 실행 파일 변경)하여 다른 서버의 파일에 쉽게 액세스하고 파일을 삭제할 수 있습니다.
내 두 번째 생각자체 사용자(루트?)로 제어판 "원격"을 실행한 다음 각 서버에 대해 별도의 사용자를 만들고 적절한 사용자로 시작하는 것입니다.
나의 세 번째 생각첫 번째 것을 확장하고 실행 파일이 외부 파일에 액세스할 수 없는 일종의 샌드박스에서 모든 서버를 실행하는 것입니다. 하지만 기술적으로 이것이 어떻게 이루어질지, 심지어 가능할지도 모르겠습니다.
그렇다면 최선의 접근 방식이 무엇인지 궁금합니다. 아니면 다른 더 좋은 방법이 있나요?
답변1
두 번째 생각은 제어판 "원격"을 자체 사용자(루트?)로 실행한 다음 각 서버에 대해 별도의 사용자를 만들고 적절한 사용자로 시작하는 것이었습니다.
이것이 최선의 해결책은 아니지만 학습의 이익을 위해 어쨌든 비판하겠습니다. 곧 최선의 해결책을 찾겠지만 그게 중요해요.
내 말을 따라 반복하세요.가능하다면 네트워크 연결 서비스를 루트로 실행하지 마십시오.(이 경우 당신은할 수 있는응용 프로그램을 제어하기 때문에 도움이 됩니다.)
이를 수행하는 올바른 방법은 루트로 시작된 데몬을 사용하되 권한이 없는 사용자에게 권한을 부여하는 것입니다. 권한을 포기하기 전에 해당 데몬이 두 번째 데몬을 생성하도록 할 수 있으며, 권한이 없는 데몬은 권한이 있는 데몬과 통신합니다. 그러면 권한 있는 데몬이 권한 없는 데몬을 대신하여 작업을 수행합니다.
내 말을 따라 반복하세요.이러한 권한 분리는 권한이 있는 데몬이 확인을 수행하지 않는 한 쓸모가 없습니다.이는 권한이 있는 데몬이 권한이 없는 데몬의 명령을 맹목적으로 수락하도록 할 수 없음을 의미합니다. 명령이 정확하고 의미가 있는지 확인해야 합니다. 확인하지 않으면 다음을 도입했습니다.혼란스러운 즉석 질문취약점. 이러한 보안 코드를 작성할 때 웹 연결 서비스가 손상될 것이라고 가정하십시오. 나는 당신이 말하는 것을 들었습니다 - "그런 일은 결코 일어나지 않을 것입니다".예, 그럴 것입니다.안전은 손상을 제한하는 것입니다. 독서를 통해 유익을 얻을 수도 있습니다컴퓨터 보안에 관한 가장 멍청한 아이디어 6가지.
세 번째 아이디어는 첫 번째 아이디어를 확장하여 실행 파일이 외부 파일에 액세스할 수 없는 일종의 샌드박스에서 모든 서버를 실행하는 것이었습니다. 하지만 기술적으로 이것이 어떻게 이루어질지, 심지어 가능할지도 모르겠습니다.
A+: 이는 그러한 웹 애플리케이션에 대한 보안을 구현하는 (부분적으로) 올바른 방법입니다. 이를 달성하는 방법은 다음과 같습니다.chroot 감옥.
답변2
나는 추천하고 싶습니다. 각 게임 서버는 자체 사용자로 실행됩니다.
/홈/사용자1/게임/홈/사용자2/게임
그런 다음 게임 서버를 시작하고 중지하려면 해당 사용자(user1 또는 user2)로 명령을 실행할 웹 서버가 필요합니다.
SFTP는 실제 사용자 지원을 통해 쉽게 설정할 수 있습니다.
개인적으로 저는 fifo 또는 tmp 파일의 명령을 수신하는 데몬을 사용자별로 실행한 다음 사용자로 실행합니다. 그런 다음 웹 프런트 엔드가 파일에 쓰도록 합니다.
데몬은 "stop" 및 "start"와 같이 게임을 실행하거나 종료하는 특정 명령만 수신해야 합니다. 이렇게 하면 분리가 그대로 유지되지만 관리자/개발자 설정으로 명령을 실행할 수 있습니다.