리눅스 보안 기능과 관련된 다양한 사례와 문제 해결 방안으로 리눅스 환경에서 시스템 보안을 유지하면서도 필요한 서비스와 기능을 최적화하는 데 실질적인 도움을 제공합니다.
리눅스 보안 기능 개요
리눅스는 운영 체제의 보안을 강화하기 위해 SELinux와 AppArmor 같은 보안 모듈을 제공합니다. 이러한 보안 기능은 파일, 프로세스, 네트워크 등 다양한 리소스에 대한 접근을 엄격히 제어하며, 보안 정책 위반을 방지합니다.
1. SELinux (Security-Enhanced Linux)
- 특징: Mandatory Access Control(MAC) 기반 접근 제어를 제공.
- 사용 방법
- 보안 컨텍스트 설정: 각 파일, 디렉토리에 보안 태그를 부여.
- 정책 기반 제어: 사전 정의된 정책에 따라 접근 허용 또는 거부.
2. AppArmor
- 특징: 응용 프로그램별 프로파일 기반 접근 제어.
- 사용 방법
- 특정 경로와 리소스에 대한 접근 권한을 프로파일로 정의.
- 설정 및 관리가 SELinux보다 간단함.
3. 차이점
기능 | SELinux | AppArmor |
---|---|---|
접근 제어 | MAC 기반 | 프로파일 기반 |
복잡성 | 복잡 (정책 작성 필요) | 단순 (파일 경로로 제어) |
활용도 | 대규모 시스템 | 소규모 또는 간단한 환경 |
SELinux와 AppArmor의 작동 원리
1. SELinux
- 보안 컨텍스트 부여: 파일, 디렉토리, 프로세스에 특정 보안 태그 추가.
- 정책 실행: 정책에 정의된 접근 규칙에 따라 작업 허용 또는 차단.
- 감사 로그 기록: 정책 위반 시 관련 정보를 로그에 기록.
2. AppArmor
- 프로파일 생성: 응용 프로그램별로 접근 가능한 경로와 리소스 정의.
- 접근 제어: 프로파일에 명시되지 않은 접근은 기본적으로 차단.
- 동적 적용: 프로파일을 수정하여 실시간으로 적용 가능.
이슈 사례와 문제 해결 방안
1. MySQL 데이터 디렉토리 이동 문제
MySQL 데이터 디렉토리를 기본 경로(/var/lib/mysql
)에서 다른 경로로 이동했을 때 SELinux나 AppArmor 제약으로 인해 작동하지 않음.
원인 분석
- SELinux 보안 컨텍스트 미설정.
- AppArmor 프로파일 미수정.
- MySQL 설정 파일(
my.cnf
) 경로 누락.
SELinux 해결 방안
- SELinux 상태 확인
getenforce
- SELinux 보안 컨텍스트 설정
sudo semanage fcontext -a -t mysqld_db_t "/새로운/데이터/디렉토리(/.*)?" sudo restorecon -Rv /새로운/데이터/디렉토리
AppArmor 해결 방안
- AppArmor 상태 확인
sudo aa-status
- AppArmor 프로파일 수정
새 경로를 추가sudo nano /etc/apparmor.d/usr.sbin.mysqld
/새로운/데이터/디렉토리/ r, /새로운/데이터/디렉토리/** rwk,
- 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 프로파일을 비활성화하는 것이 한 가지 해결책이 될 수 있습니다.
- PostgreSQL에 적용된 AppArmor 프로파일 확인먼저 PostgreSQL에 적용된 AppArmor 프로파일이 있는지 확인합니다. 다음 명령을 사용하여 현재 적용된 AppArmor 상태를 확인할 수 있습니다.
이 명령은 활성화된 AppArmor 프로파일을 나열합니다. 이 목록에서 PostgreSQL 관련 프로파일을 찾습니다. 일반적으로sudo aa-status
/usr/lib/postgresql
또는/usr/bin/postgres
경로와 관련된 항목이 있을 수 있습니다. - AppArmor 프로파일 비활성화 (aa-disable)PostgreSQL에 적용된 AppArmor 프로파일을 비활성화하려면
aa-disable
명령을 사용합니다. 다음과 같이 PostgreSQL 바이너리 경로에 해당하는 프로파일을 비활성화할 수 있습니다.
예를 들어, PostgreSQL 버전이 14라면 다음과 같이 실행할 수 있습니다.sudo aa-disable /usr/lib/postgresql/VERSION/bin/postgres
이 명령은 PostgreSQL의 AppArmor 프로파일을 비활성화하여 쓰기 권한 문제를 해결할 수 있도록 합니다.sudo aa-disable /usr/lib/postgresql/14/bin/postgres
- 서비스 재시작AppArmor 프로파일을 비활성화한 후에는 PostgreSQL 서비스를 재시작하여 변경 사항을 적용합니다.
sudo systemctl restart postgresql
- 권한 문제 확인이제 PostgreSQL이 쓰기 권한 문제 없이 동작하는지 확인합니다. 만약 여전히 권한 문제가 있다면, 데이터 디렉토리의 소유자 및 그룹이 올바른지 다시 확인하세요.
sudo chown -R postgres:postgres /var/lib/postgresql
3. Apache/Nginx Document Root 변경 문제
웹 서버의 Document Root를 기본 경로(/var/www/html
)에서 다른 경로로 변경 시 SELinux나 AppArmor로 인해 접근 불가.
- SELinux 보안 컨텍스트 설정
sudo semanage fcontext -a -t httpd_sys_content_t "/새로운/문서/루트(/.*)?" sudo restorecon -Rv /새로운/문서/루트
- AppArmor 프로파일 수정
sudo nano /etc/apparmor.d/usr.sbin.apache2 /새로운/문서/루트/ r, /새로운/문서/루트/** rwk,
- AppArmor 재시작
sudo systemctl reload apparmor
4. SSH 홈 디렉토리 변경 문제
사용자의 홈 디렉토리를 기본 경로(/home/user
)에서 /mnt/user_home
으로 변경했을 때 SSH 접속 실패.
- 홈 디렉토리 소유자와 권한 설정
sudo chown user:user /mnt/user_home sudo chmod 700 /mnt/user_home
- SELinux 보안 컨텍스트 재설정
sudo restorecon -Rv /mnt/user_home
리눅스의 SELinux와 AppArmor는 시스템 보안을 강화하는 데 필수적인 도구입니다. 하지만 기본 설정만으로는 서비스 운영에 제약을 가할 수 있으므로, 각 서비스의 요구 사항에 맞게 보안 정책을 적절히 조정해야 합니다.
- SELinux는 보안 컨텍스트를 통해, AppArmor는 프로파일을 통해 접근을 제어.
- 서비스 문제 발생 시, 보안 모듈 설정과 파일 권한을 우선적으로 확인.
- SELinux와 AppArmor의 설정은 시스템 보안을 유지하면서도 유연성을 확보하는 데 중요한 역할을 함.
SELinux와 AppArmor를 활용한 보안 문제 해결의 기초 가이드로, 다양한 리눅스 환경에서 실질적인 문제를 해결할 수 있습니다.
댓글