본문 바로가기
운영체제 (LNX,WIN)

리눅스 보안 기능 SELinux, AppArmor 이해와 실전 이슈 대응 사례

by 날으는물고기 2024. 12. 16.

리눅스 보안 기능 SELinux, AppArmor 이해와 실전 이슈 대응 사례

리눅스 보안 기능과 관련된 다양한 사례와 문제 해결 방안으로 리눅스 환경에서 시스템 보안을 유지하면서도 필요한 서비스와 기능을 최적화하는 데 실질적인 도움을 제공합니다.

리눅스 보안 기능 개요

리눅스는 운영 체제의 보안을 강화하기 위해 SELinuxAppArmor 같은 보안 모듈을 제공합니다. 이러한 보안 기능은 파일, 프로세스, 네트워크 등 다양한 리소스에 대한 접근을 엄격히 제어하며, 보안 정책 위반을 방지합니다.

1. SELinux (Security-Enhanced Linux)

  • 특징: Mandatory Access Control(MAC) 기반 접근 제어를 제공.
  • 사용 방법
    • 보안 컨텍스트 설정: 각 파일, 디렉토리에 보안 태그를 부여.
    • 정책 기반 제어: 사전 정의된 정책에 따라 접근 허용 또는 거부.

2. AppArmor

  • 특징: 응용 프로그램별 프로파일 기반 접근 제어.
  • 사용 방법
    • 특정 경로와 리소스에 대한 접근 권한을 프로파일로 정의.
    • 설정 및 관리가 SELinux보다 간단함.

3. 차이점

기능 SELinux AppArmor
접근 제어 MAC 기반 프로파일 기반
복잡성 복잡 (정책 작성 필요) 단순 (파일 경로로 제어)
활용도 대규모 시스템 소규모 또는 간단한 환경

SELinux와 AppArmor의 작동 원리

1. SELinux

  1. 보안 컨텍스트 부여: 파일, 디렉토리, 프로세스에 특정 보안 태그 추가.
  2. 정책 실행: 정책에 정의된 접근 규칙에 따라 작업 허용 또는 차단.
  3. 감사 로그 기록: 정책 위반 시 관련 정보를 로그에 기록.

2. AppArmor

  1. 프로파일 생성: 응용 프로그램별로 접근 가능한 경로와 리소스 정의.
  2. 접근 제어: 프로파일에 명시되지 않은 접근은 기본적으로 차단.
  3. 동적 적용: 프로파일을 수정하여 실시간으로 적용 가능.

이슈 사례와 문제 해결 방안

1. MySQL 데이터 디렉토리 이동 문제

MySQL 데이터 디렉토리를 기본 경로(/var/lib/mysql)에서 다른 경로로 이동했을 때 SELinux나 AppArmor 제약으로 인해 작동하지 않음.

 

원인 분석

  • SELinux 보안 컨텍스트 미설정.
  • AppArmor 프로파일 미수정.
  • MySQL 설정 파일(my.cnf) 경로 누락.

 

SELinux 해결 방안

  1. SELinux 상태 확인
    getenforce
  2. SELinux 보안 컨텍스트 설정
    sudo semanage fcontext -a -t mysqld_db_t "/새로운/데이터/디렉토리(/.*)?"
    sudo restorecon -Rv /새로운/데이터/디렉토리

AppArmor 해결 방안

  1. AppArmor 상태 확인
    sudo aa-status
  2. AppArmor 프로파일 수정
    sudo nano /etc/apparmor.d/usr.sbin.mysqld
    새 경로를 추가
    /새로운/데이터/디렉토리/ r,
    /새로운/데이터/디렉토리/** rwk,
  3. AppArmor 재시작
    sudo systemctl reload apparmor

MySQL 설정 파일 변경

  • my.cnf 파일에서 새로운 데이터 디렉토리 경로 지정:
    sudo nano /etc/my.cnf
    [mysqld]
    datadir=/새로운/데이터/디렉토리

2. PostgreSQL 쓰기 권한 문제

PostgreSQL을 설치한 후 쓰기 권한 문제를 해결하기 위해 AppArmor가 관련된 문제일 수 있습니다. AppArmor는 시스템의 보안을 강화하기 위해 파일과 디렉토리에 대한 액세스를 제한할 수 있는 보안 모듈입니다. aa-disable 명령을 사용하여 특정 AppArmor 프로파일을 비활성화하면 PostgreSQL이 해당 경로에 대해 제한 없이 액세스할 수 있습니다.

 

AppArmor 관련 문제로 인해 PostgreSQL이 특정 디렉토리나 파일에 쓰기 권한을 얻지 못하는 경우, PostgreSQL에 대한 AppArmor 프로파일을 비활성화하는 것이 한 가지 해결책이 될 수 있습니다.

  1. PostgreSQL에 적용된 AppArmor 프로파일 확인먼저 PostgreSQL에 적용된 AppArmor 프로파일이 있는지 확인합니다. 다음 명령을 사용하여 현재 적용된 AppArmor 상태를 확인할 수 있습니다.
    sudo aa-status
    이 명령은 활성화된 AppArmor 프로파일을 나열합니다. 이 목록에서 PostgreSQL 관련 프로파일을 찾습니다. 일반적으로 /usr/lib/postgresql 또는 /usr/bin/postgres 경로와 관련된 항목이 있을 수 있습니다.
  2. AppArmor 프로파일 비활성화 (aa-disable)PostgreSQL에 적용된 AppArmor 프로파일을 비활성화하려면 aa-disable 명령을 사용합니다. 다음과 같이 PostgreSQL 바이너리 경로에 해당하는 프로파일을 비활성화할 수 있습니다.
    sudo aa-disable /usr/lib/postgresql/VERSION/bin/postgres
    예를 들어, PostgreSQL 버전이 14라면 다음과 같이 실행할 수 있습니다.
    sudo aa-disable /usr/lib/postgresql/14/bin/postgres
    이 명령은 PostgreSQL의 AppArmor 프로파일을 비활성화하여 쓰기 권한 문제를 해결할 수 있도록 합니다.
  3. 서비스 재시작AppArmor 프로파일을 비활성화한 후에는 PostgreSQL 서비스를 재시작하여 변경 사항을 적용합니다.
    sudo systemctl restart postgresql
  4. 권한 문제 확인이제 PostgreSQL이 쓰기 권한 문제 없이 동작하는지 확인합니다. 만약 여전히 권한 문제가 있다면, 데이터 디렉토리의 소유자 및 그룹이 올바른지 다시 확인하세요.
    sudo chown -R postgres:postgres /var/lib/postgresql

3. Apache/Nginx Document Root 변경 문제

웹 서버의 Document Root를 기본 경로(/var/www/html)에서 다른 경로로 변경 시 SELinux나 AppArmor로 인해 접근 불가.

  1. SELinux 보안 컨텍스트 설정
    sudo semanage fcontext -a -t httpd_sys_content_t "/새로운/문서/루트(/.*)?"
    sudo restorecon -Rv /새로운/문서/루트
  2. AppArmor 프로파일 수정
    sudo nano /etc/apparmor.d/usr.sbin.apache2
    /새로운/문서/루트/ r,
    /새로운/문서/루트/** rwk,
  3. AppArmor 재시작
    sudo systemctl reload apparmor

4. SSH 홈 디렉토리 변경 문제

사용자의 홈 디렉토리를 기본 경로(/home/user)에서 /mnt/user_home으로 변경했을 때 SSH 접속 실패.

  1. 홈 디렉토리 소유자와 권한 설정
    sudo chown user:user /mnt/user_home
    sudo chmod 700 /mnt/user_home
  2. SELinux 보안 컨텍스트 재설정
    sudo restorecon -Rv /mnt/user_home

리눅스의 SELinux와 AppArmor는 시스템 보안을 강화하는 데 필수적인 도구입니다. 하지만 기본 설정만으로는 서비스 운영에 제약을 가할 수 있으므로, 각 서비스의 요구 사항에 맞게 보안 정책을 적절히 조정해야 합니다.

  • SELinux는 보안 컨텍스트를 통해, AppArmor는 프로파일을 통해 접근을 제어.
  • 서비스 문제 발생 시, 보안 모듈 설정파일 권한을 우선적으로 확인.
  • SELinux와 AppArmor의 설정은 시스템 보안을 유지하면서도 유연성을 확보하는 데 중요한 역할을 함.

 

SELinux와 AppArmor를 활용한 보안 문제 해결의 기초 가이드로, 다양한 리눅스 환경에서 실질적인 문제를 해결할 수 있습니다.

728x90

댓글