Linux 관리자로서 시스템에서 실행 중인 응용 프로그램에서 루트 권한을 제거하는 작업을 수행하는 것이 내 임무 중 하나입니까?
아니면 애플리케이션 개발자가 이 작업을 수행하기 위한 코드를 작성했는지 확인하도록 의존해야 합니까?
답변1
Linux 관리자로서 시스템에서 실행 중인 응용 프로그램에서 루트 권한을 제거하는 작업을 수행하는 것이 내 임무 중 하나입니까?
예. 그것이 완료되었는지 확인하는 것이 당신의 임무입니다. 응용 프로그램이 이 작업을 수행하지 않는 경우 응용 프로그램이 이 작업을 수행하지 않는다는 점을 확인하고 직접 수행해야 합니다.
아니면 애플리케이션 개발자가 이 작업을 수행하기 위한 코드를 작성했는지 확인하도록 의존해야 합니까?
아니요의지하다애플리케이션 개발자는 모든 것을 해야 합니다. Linux 시스템 관리자는 다양한 도구를 사용하여 다음을 얻을 수 있습니다.사실애플리케이션이 실행되는 동안 수행하는 작업입니다.
답변2
응용 프로그램이 루트 권한을 포기하고 권한이 없는 권한으로 실행되도록 하는 것은 응용 프로그램 프로그래머의 책임입니다. 앱이 이 작업을 수행하지 않으면 앱 사용을 피하거나 개발자에게 버그 보고서를 제출하거나 코드에서 필요한 변경 사항을 직접 구현하는 것 외에는 할 수 있는 일이 많지 않습니다.
반면에 그것은너, 관리자로서 애플리케이션이 시작되는 사용자를 선택하십시오. 황금률은 실행에 필요한 것보다 더 많은 권한을 프로세스에 부여하지 않는 것입니다. 따라서 권한이 없는 사용자를 생성하고( /etc/passwd
자세한 내용은 시스템 계정 참조) 이 사용자로 응용 프로그램을 실행할 수 있습니다. (이 작업을 수동으로 수행할 필요는 거의 없습니다. 일반적으로 패키지 관리자를 통해 소프트웨어를 설치할 때 이 모든 작업이 처리됩니다.) 그러나 응용 프로그램을 시작하는 데 루트 권한이 필요한 경우 중간에 이러한 권한을 제거할 수 있는 방법이 없습니다. 탈출하면 상황이 통제 불능이 됩니다.
예를 들어 이전 버전에서는 sendmail
SUID 루트를 실행해야 했는데, 이는 원격 공격자가 프로그램의 취약점을 성공적으로 악용할 경우 보안 취약점이 될 수 있습니다. 메일 릴레이로만 실행하는 경우 sendmail
권한이 없는 사용자로 실행할 수 있습니다.
답변3
시스템 관리자로서 우리의 임무는 응용 프로그램과 사용자에게 가능한 한 적은 권한(작업을 수행할 수 있도록 허용)을 제공하는 것입니다.
Tomcat/Java 애플리케이션 또는 웹 페이지를 배포하거나 데이터베이스 액세스가 포함된 애플리케이션을 배포하는 사용자는 루트 액세스에 대한 합법적인 필요성이 거의 또는 전혀 없습니다.
이제 대부분의 프레임워크는 기본적으로 루트를 포기합니다.
예를 들어, Java 프레임워크를 사용하는 개발자의 경우 배포할 수 있는 권한이 없는 사용자에게만 개발자 액세스 권한을 부여하며 일부 sudo 명령은 일부 중요한 서비스를 (다시) 시작하고 중지하는 것으로 제한됩니다.
프로덕션 서버를 관리하는 것은 개발팀의 책임이 아니라는 점을 더 지적하고 싶습니다.
제 경험상 개발팀은 업무를 완수하는 것만 걱정하고, 시스템 관리팀의 계획과 지도, 사전 개입 없이는 보안과 용량을 제대로 관리하지 못하는 경우가 많습니다.