리눅스 서버를 SELinux로 보호하는 방법

Se Linux Hero

SELinux는 오작동하는 프로세스나 애플리케이션으로부터 서버를 보호하는 데 도움이 됩니다. NSA(국가안보국)이 정부 장비를 공격자로부터 보호하기 위해 개발한 보안 강화(SE) 리눅스 아키텍처는 보안 프로토콜을 사용하여 시스템 자원에 대한 접근을 제한합니다. 서버에서 이를 사용하는 방법을 알아보세요.

목차

  • SELinux 아키텍처
  • SELinux 설치 또는 활성화 방법
  • SELinux 구성 방법
  • SELinux 정책
  • SELinux 오류 처리 방법
  • SELinux 비활성화 방법
  • 자주 묻는 질문

또한 읽어보세요: Rc 쉘이란 무엇이며 리눅스에 설치하는 방법

SELinux 아키텍처

SELinux는 시스템 관리자가 활성화하거나 비활성화할 수 있는 커널 모듈입니다. 보안 정책에 따라 파일 및 네트워크 포트에 대한 접근이 제한되므로, 잘못된 프로그램이나 잘못 구성된 데몬이 시스템 보안에 큰 영향을 미칠 수 없습니다.

애플리케이션이나 프로세스가 SELinux 시스템에서 파일 접근을 요청하면, 우선 접근 벡터 캐시(AVC)를 확인합니다. 권한이 이전에 캐시되어 있다면 요청된 애플리케이션에 대한 파일을 반환합니다. 만약 권한이 캐시되지 않았다면, 보안 서버에 요청을 전달합니다. 보안 서버는 데이터베이스의 모든 보안 정책을 확인합니다. 보안 정책에 따라 권한이 부여되거나 거부됩니다.

SELinux에는 루트나 슈퍼유저 개념이 없습니다. SE 리눅스가 없는 수정되지 않은 리눅스 배포판의 보안은 커널의 정확성과 모든 특권 애플리케이션 및 그 구성에 의존합니다. 이러한 구성 요소 중 하나에서의 결함이나 버그는 공격 표면을 만들고 시스템을 타협할 수 있습니다.

반면, SELinux가 수정된 리눅스 시스템은 주로 커널 및 보안 정책의 정확성에 의존합니다.

또한 읽어보세요: 리눅스에서 Rm 명령어를 사용하는 방법

SELinux 설치 또는 활성화 방법

SELinux는 Security Enhanced Linux의 약자입니다. SELinux는 2003년부터 리눅스 커널의 일부가 되었습니다. 따라서 별도로 설치할 필요가 없습니다. 그러나 대부분의 데스크탑 리눅스 배포판에서는 기본적으로 비활성화되어 있습니다.

Se Linux 2

SELinux에는 세 가지 주요 모드가 있습니다: 강제, 허용, 비활성화. 간단히 살펴보겠습니다:

  1. 강제: 보안 정책을 사용하여 리눅스 시스템을 활성화하고 보호합니다.
  2. 허용: 보안 정책을 적용하지 않지만 모든 것을 로그에 기록합니다. 이 모드는 문제 해결에 유용합니다.
  3. 비활성화: SELinux를 비활성화합니다. 이 옵션은 권장되지 않으며, 시스템에서 SELinux를 다시 활성화하면 레이블 변경으로 인해 오류가 발생할 수 있습니다.

참고: 우분투는 SELinux의 대안으로 AppArmor와 함께 제공됩니다. 우분투에서 SELinux를 사용할 수 있지만 AppArmor와 호환되지 않으며 활성화되면 시스템이 손상될 수 있습니다. 우분투에서 SELinux를 꼭 사용해야 한다면 AppArmor를 비활성화하고 사용하기 전에 철저한 테스트(먼저 허용 모드로 시작)를 진행해야 합니다.

  1. 시스템에서 SELinux를 활성화하려면 “ /etc/selinux/config “ 파일을 편집해야 합니다. 이 파일을 텍스트 편집기에서 엽니다.
sudonano/etc/selinux/config
  1. 구성 파일 안에서 SELINUX=permissive로 설정합니다. Ctrl + O를 눌러 파일을 저장하고, Ctrl + X를 눌러 편집기를 종료합니다. 이제 시스템에서 SELinux가 활성화되었습니다.

참고: 허용 모드로 만들기 전에 SELinux를 직접 강제하면 파일과 프로세스의 레이블이 잘못 지정될 수 있으며 부팅이 불가능할 수 있습니다.

  1. 파일 시스템을 자동으로 레이블 변경하려면 루트 파일 시스템에 “.autorelabel”이라는 파일을 만듭니다. 이제 시스템을 부팅할 때 SELinux가 자동으로 파일 시스템을 레이블 변경합니다. 오류를 줄이기 위해 구성 폴더에서 SELINUX=permissive 옵션을 그대로 유지합니다. 모든 것이 레이블이 변경된 후, “ /etc/selinux/config “에서 SELinux를 SELINUX=enforcing으로 설정하고 재부팅합니다.

SELinux가 시스템에서 성공적으로 강제됩니다.

또한 읽어보세요: Starship을 사용하여 리눅스 터미널 프롬프트를 사용자화하는 방법

SELinux 구성 방법

SELinux는 시스템 관리자가 시스템 자원에 접근할 수 있는 것을 제어할 수 있도록 하는 아키텍처입니다. SELinux는 보안 정책을 사용하여 시스템에 대한 접근을 제한합니다. 시스템을 보호하기 위해 SELinux를 구성하는 방법에는 여러 가지가 있으며, 가장 인기 있는 방법은 “대상화 정책” 및 “다중 수준 보안”(MLS)입니다.

대상화 정책은 기본 보안 정책입니다. 이 정책은 파일 접근, 작업, 서비스 등을 포함하는 다양한 보안 정책을 다룹니다. 다중 수준 보안(MLS)은 일반적으로 정부와 대규모 조직에서 사용되며, 설정이 매우 복잡하고 이를 관리하기 위한 전담 팀이 필요합니다.

현재 SELinux 모드를 확인하려면 getenforcesestatus 명령어를 사용할 수 있습니다.

현재 세션에서 SELinux 모드만 변경하려면 다음 두 개의 명령어를 실행할 수 있습니다.

  • sudo setenforce 0: 현재 세션에서 SELinux를 허용 모드로 설정합니다.
  • sudo setenforce 1: 현재 세션에서 SELinux를 강제 모드로 설정합니다.

SELinux 정책

SELinux는 레이블 시스템으로 작동합니다. 모든 파일, 포트 및 프로세스에 레이블을 연결합니다. 레이블은 사물들을 그룹화하는 논리적 방법입니다. 커널은 부팅 중에 레이블을 관리할 책임이 있습니다.

Se Linux 1

SELinux 정책은 부울 값을 통해 관리할 수 있습니다. 예를 들어 httpd라는 데몬에 부울 값을 설정해보겠습니다. httpd는 리눅스에서 웹 서버를 실행하기 위해 사용하는 아파치 HTTP 서버 데몬입니다.

httpd에 특정한 모든 모듈을 나열하려면 터미널에서 다음 명령어를 실행하십시오:

getsebool -a|grep httpd

여기서 -a 옵션은 모든 부울 값을 나열하고, grep을 사용하여 httpd와 관련된 부울 값만 필터링합니다. 이 문서를 읽어 리눅스에서 grep에 대해 더 알아보세요.

위 명령어로부터 나온 출력은 아래 이미지와 같습니다.

httpd_builtin scripting --> on   
httpd_can_check_spam --> off   
httpd can connect ftp --> off   
httpd_can_connect_ldap --> off   
httpd_can_connect_mythty --> off   
httpd_can_connect_zabbix --> off   
httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off   
httpd_can_network_memcache --> off   
httpd_can_network_relay --> off   
httpd_can_sendmail --> off   
httpd_dbus_avahi --> off   
httpd dbus sssd--> off

위 목록에서 httpd_can_connect_ftp 부울 값을 가져와 값을 변경합니다. 먼저 httpd_can_connect_ftp의 값을 읽어보세요. 켜져 있는지 꺼져 있는지 확인합니다:

getsebool httpd_can_connect_ftp

이제 httpd_can_connect_ftp의 값을 허용으로 설정하겠습니다.

setsebool -P httpd_can_connect_ftp 1

여기서 1은 허용 또는 켜짐을 나타냅니다. -P 태그는 변경 사항을 영구적으로 만들기 위해 사용됩니다. httpd와 관련된 부울 값을 다시 나열하면, httpd_can_connect_ftp의 값이 켜짐으로 변경된 것을 확인할 수 있습니다.

httpd_builtin_scripting --> on   
httpd_can_check_spam --> off   
httpd can connect ftp --> on   
httpd_can_connect_ldap --> off   
httpd_can_connect_mythty --> off   
httpd_can_connect_zabbix --> off   
httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off   
httpd_can_network_memcache --> off   
httpd_can_network_relay --> off   
httpd_can_sendmail --> off   
httpd_dbus_avahi --> off   
httpd dbus sssd--> off

또한 읽어보세요: 우분투에서 도커를 사용하여 워드프레스를 설정하는 방법

SELinux 오류 처리 방법

SELinux에는 일반적으로 4가지 유형의 오류가 있습니다:

  1. 시스템이 손상되었습니다: SELinux는 접근을 제한하여 시스템을 보호하지만, 때로는 이것만으로는 충분하지 않습니다. 이러한 오류가 발생하면 시스템이 손상될 수 있습니다. 필요한 조치를 신속히 취하십시오.
  2. 정책의 버그: 수정이 필요한 정책에 버그가 있는 경우 이 오류가 발생합니다.
  3. 레이블이 잘못되었습니다: 이 오류 메시지는 사용자가 레이블을 사용자화하거나 SELinux의 자동 레이블이 실패할 때 나타납니다. 이러한 레이블 오류를 수정하기 위해 여러 도구가 시장에 나와 있습니다.
  4. 정책을 수정해야 합니다: 시스템에 대한 변경을 하고 SELinux에 이를 알리지 않을 경우 이러한 오류가 발생합니다. 부울이나 정책 모듈을 사용하여 이 오류를 수정할 수 있습니다.

SELinux 비활성화 방법

SELinux를 비활성화하는 것은 공격에 매우 취약한 기업 및 정부 서버와 공용 장치에 적합하지 않습니다. 그러나 시스템에서 SELinux를 비활성화하려면 다음 지침을 따르십시오.

  1. “ /etc/selinux “의 SE Linux 구성 파일로 가서 SE Linux 구성 모드를 enforcing에서 permissive로 변경한 다음 시스템을 재부팅합니다.
  2. SELinux 모드를 permissive에서 disabled로 변경합니다.

다음 재부팅 후, 시스템의 SELinux는 비활성화되어 일반 리눅스 머신이 됩니다.

또한 읽어보세요: 리눅스에서 방화벽을 설정하는 방법

자주 묻는 질문

SELinux가 안드로이드에 있나요?

네, SELinux는 버전 4.3부터 안드로이드에 구현되었습니다. 이것은 사이버 공격으로부터 안드로이드 사용자를 보호하기 위해 안드로이드 보안을 강화했습니다.

SELinux는 방화벽인가요?

SELinux는 방화벽이 아닙니다. 방화벽은 컴퓨터와 네트워크 간의 트래픽을 제어합니다. SELinux는 시스템 내부의 다양한 프로그램의 파일 시스템 및 네트워크 접근을 통제하므로, SELinux를 내부 방화벽으로 간주할 수 있습니다.

SELinux는 운영 체제인가요?

SELinux는 운영 체제가 아닙니다. 이것은 리눅스 커널에 존재하는 커널 보안 모듈입니다. 접근 제어 보안 정책 및 의무적 접근 통제(MAC)를 지원합니다. 운영 체제로 부르려면 커널自身 이상의 것이 필요합니다. 대부분의 리눅스 기반 운영 체제에서 SELinux를 사용할 수 있습니다.

SELinux를 사용해야 하나요?

당신이 시스템 관리자이고 유닉스 시스템에 대해 잘 알고 있다면 SELinux를 사용하는 것이 좋습니다. SELinux는 서버의 보안을 강화하고 공격 표면을 최소화합니다. 유닉스 시스템에 익숙하지 않다면 AppArmor를 사용할 수도 있습니다. 이는 SELinux보다 상대적으로 더 간단합니다. 가정 사용자이고 리눅스를 데스크톱 컴퓨터에서만 사용하는 경우 SELinux를 사용할 필요는 없습니다. 설정 때문에 골치 아프고 생산성이 떨어지게 될 것입니다.