Linux에서 슈퍼유저 권한에 대한 액세스를 엄격하고 영구적으로 제한하는 방법은 무엇입니까? [폐쇄]

Linux에서 슈퍼유저 권한에 대한 액세스를 엄격하고 영구적으로 제한하는 방법은 무엇입니까? [폐쇄]

그렇다면 슈퍼유저/루트로 실행되는 사용자 공간 프로세스가 없거나 거의 없는 Linux 시스템을 만드는 것이 가능한지, 그리고 다른 프로세스가 권한을 상승시킬 수 있는 프로세스가 없는(또는 거의 없는) 곳이 있는지 궁금합니다.

이를 달성하기 위해 어떤 기술적 옵션이 있습니까? 어떤 기술적 결함이 있나요?

답변1

수퍼유저를 제거하는 것은 비실용적이지만 root보안상의 이유로 사용자의 액세스를 제한하는 것은 가능합니다.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-controlling_root_access#sec-Disallowing_Root_Access

일부 발췌 내용을 포함할 예정이지만 모두 복사하면 답변이 너무 길어질 수 있으므로 주요 내용만 설명하겠습니다.

관리자가 루트 로그인이 금지되었는지 추가로 확인할 수 있는 네 가지 방법은 다음과 같습니다.

루트 쉘 변경

사용자가 루트로 직접 로그인하는 것을 방지하기 위해 시스템 관리자는 /etc/passwd 파일에서 루트 계정의 쉘을 /sbin/nologin으로 설정할 수 있습니다.

콘솔 장치(tty)를 사용하여 루트 액세스를 비활성화합니다.

루트 계정에 대한 액세스를 더욱 제한하기 위해 관리자는 /etc/securetty 파일을 편집하여 콘솔에서 루트 로그인을 비활성화할 수 있습니다. 이 파일에는 루트 사용자가 로그인할 수 있는 모든 장치가 나열되어 있습니다. 파일이 전혀 존재하지 않으면 루트 사용자는 콘솔이나 원시 네트워크 인터페이스 등 시스템의 모든 통신 장치를 통해 로그인할 수 있습니다. 이는 사용자가 네트워크를 통해 일반 텍스트로 암호를 전송하는 Telnet을 사용하여 루트로 컴퓨터에 로그인할 수 있기 때문에 위험합니다.

루트 SSH 로그인 비활성화

루트가 SSH 프로토콜을 통해 로그인하는 것을 방지하려면 SSH 데몬의 구성 파일 /etc/ssh/sshd_config를 편집하고 다음 줄을 변경하십시오.

#PermitRootLogin yes

아래를 읽어보세요:

PermitRootLogin no

PAM을 사용하여 서비스에 대한 루트 액세스를 제한합니다.

PAM은 /lib/security/pam_listfile.so 모듈을 통해 특정 계정을 거부하는 데 뛰어난 유연성을 제공합니다. 관리자는 이 모듈을 사용하여 로그인이 허용되지 않는 사용자 목록을 참조할 수 있습니다. 시스템 서비스에 대한 루트 액세스를 제한하려면 /etc/pam.d/ 디렉터리에서 대상 서비스에 대한 파일을 편집하고 인증에 pam_listfile.so 모듈이 필요한지 확인하세요.

모든 섹션에는 제가 생략한 추가 정보가 있지만 관심이 있으시면 더 자세히 읽어보실 수 있습니다.

셀링크

selinuxroot서비스/실행 파일/포트/등의 selinux 컨텍스트를 수정하여 권한을 전체적으로 제거할 수 있습니다. 그러나 이는 큰 주제를 다루므로 이에 대해 깊이 논의하기보다는 RHEL 문서에 연결하겠습니다.https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index

매우 잔인한 예시 제한을 적용하려면 다음을 실행 selinux하고 enforcing시도해 보세요 semanage login -a -s user_u root.

이렇게 하면 표준 사용자 권한이 루트 사용자에게 배포되고(실행한다고 가정하고 현재 벽돌로 만들 수 있는 시스템이 없기 때문에 확실하지 않습니다) 작업과 같은 "루트" 작업을 수행하지 못하도록 제한합니다.

그러나 이렇게 하면 init많은 서비스가 시작되지 않을 수 있으므로 해당 서비스를 다른 사용자로 실행할 수 있도록 하려면 많은 추가 selinux구성이 필요할 수 있습니다(한 서비스가 손상되지 않는다는 점을 고려하면 매우 안전하고 유지 관리가 매우 어려울 수 있음). 다른 사람에게 액세스 권한을 제공합니다.

답변2

수퍼유저 기능을 제공하지 않는 배포판은 사용자가 시스템 구성, 드라이버 설치 또는 업데이트를 수행할 수 있도록 설계되지 않았기 때문에 사실상 사용할 수 없습니다.

그것은 플러그를 뽑고 꺼지는 유명한 "완전히 안전한 컴퓨터"와 같습니다.
이는 극단적인 "보안/가용성" 균형(최대 보안 및 낮은 가용성)의 예입니다.

또한 커널은 부팅 시 사용자 권한 이상의 작업을 계속 수행합니다.어느작업)은 여전히 ​​해킹 가능합니다.

답변3

센티맨이 준매우 철저한 답변. 다음은 몇 가지 추가 아이디어입니다.

  • cron프로세스의 UID를 임의의 값으로 설정하려면 권한이 필요하므로 이를 제거할 수 있습니다 .
  • 파일을 읽을 수 있어야 하는 모든 프로세스는 "CAP_DAC_READ_SEARCH" 기능을 사용하여 루트가 아닌 사용자로 실행할 수 있습니다. 이것, 이것, 그리고이것.
  • "시스템" 파일에 쓸 수 있어야 하는 프로세스에는 루트가 아닌 UID(프로그램당 또는 리소스당 다른 UID)를 부여한 다음 ACL을 통해 액세스 권한을 부여할 수 있습니다.
  • "권한 있는" 작업을 수행할 수 있어야 하는 프로세스는 이를 수행하기 위해 추가 기능을 사용할 수 있습니다(위에서 언급한 대로).최소 권한의 원칙.

설정 후 구성을 변경하고 제한 사항을 해결하려면 다음을 수행하십시오 root

  • 듀얼 부팅을 위해 컴퓨터를 설정합니다.
  • 운영 체제는 루트 액세스 및 활동이 최소화된 강화된 운영 체제입니다. 
  • 다른 하나는 거의 기본 Linux이지만 네트워크 드라이버가 제거되었습니다. 
  • 시스템 관리자가 시스템을 관리해야 하는 (드물게?) 상황에서는 시스템을 종료하고 일반 Linux로 부팅하고 필요한 작업을 수행한 다음 재부팅할 수 있습니다.

확실히SELinux와 AppArmor는 이 개념을 명시적으로 지원합니다..

관련 정보