SELinux에서 특정 프로세스에 대한 정책을 추가하는 방법은 무엇인가요?
_____A1: 먼저 해당 프로세스가 실행하는 도메인(domain)을 파악하거나 새 도메인을 정의해야 합니다. 기존 도메인이 있으면 그에 맞는 정책을 추가하고, 새로 필요한 경우에는 맞춤형 모듈을 작성합니다.
Q2: SELinux 도메인(domain)이란 무엇인가요?
A2: 도메인은 SELinux가 프로세스에 할당하는 보안 컨텍스트의 한 부분으로, 프로세스의 권한과 접근 제어 규칙을 정의합니다. 각 도메인은 정책 파일에서 그 동작과 권한이 지정됩니다.
Q3: 특정 프로세스에 새 정책을 추가하는 일반적인 절차는?
A3:
1. 프로세스가 동작하는 도메인을 확인합니다(ex: ps -eZ | grep 프로세스명).
2. 필요한 권한이나 접근을 정의합니다(파일, 네트워크, 포트 등).
3. 커스텀 정책 모듈을 만듭니다(일반적으로 .te 템플릿 파일 작성).
4. 컴파일 및 설치를 위해 checkmodule, semodule_package, semodule 명령 사용.
5. 정책을 로드하여 적용합니다.
Q4: 기존 도메인에 권한을 추가하려면 어떻게 하나요?
A4: 특정 도메인에 대해 권한 추가만 필요하면, 해당 도메인 이름으로 정책 모듈(.te 파일)을 작성하여 필요한 타입 또는 클래스 권한을 allow 규칙으로 추가할 수 있습니다.
예)
```
module myprocess 1.0;
require {
type myprocess_t;
type myfile_t;
class file { read write };
}
allow myprocess_t myfile_t:file { read write };
```
그 후 checkmodule과 semodule_package를 이용해 컴파일 후 설치합니다.
Q5: 새로운 프로세스 도메인을 만들려면 어떻게 해야 하나요?
A5:
1. .te 파일에 도메인 선언과 관련된 마크, 타입 전환 규칙(type_transition) 등을 정의합니다.
2. 파일 시스템 컨텍스트 파일(semanage fcontext)에 대응하는 도메인 매핑 규칙을 추가해야 할 수도 있습니다.
3. 도메인 전환 정책을 완성하여 컴파일/설치합니다.
A6:
1. .te 타입 정책 파일 작성
2. `checkmodule -M -m -o mymodule.mod mymodule.te`
3. `semodule_package -o mymodule.pp -m mymodule.mod`
4. `semodule -i mymodule.pp`로 정책 모듈을 설치
Q7: 어떤 도구들이 SELinux 정책 추가에 도움을 주나요?
A7:
- audit2allow: 감사 로그에서 허용되지 않은(access denied) 메시지를 분석해 allow 규칙 생성
- semanage: 파일 컨텍스트, 포트, 사용자 등 관리
- setsebool: SELinux 부울 변수 제어
Q8: SELinux 정책 추가시 주의사항은?
A8:
- 최소 권한 원칙에 따라 꼭 필요한 권한만 부여
- 도메인 충돌이나 보안 구멍이 생기지 않도록 검토
- 테스트 환경에서 먼저 검증 후 운영환경 적용
- 감사 로그(audit.log)를 활용해 문제 파악 및 수정
Q9: 예를 들어, 웹서버 프로세스가 특정 디렉터리에 접근하도록 SELinux 정책을 추가하려면?
A9:
1. 해당 웹서버 프로세스의 도메인 확인(ex: httpd_t)
2. 접근할 디렉터리 타입 지정 또는 라벨링(semanage fcontext)
3. 정책 모듈을 만들어 httpd_t가 해당 타입의 파일에 접근할 수 있도록 allow 규칙 추가
4. 라벨 적용 후 정책 재로드
Q10: SELinux 커스텀 정책은 적용 후 어떻게 확인하나요?
A10:
- `semodule -l`로 설치된 모듈 목록 확인
- `ps -eZ`로 프로세스 컨텍스트 확인
- `getsebool`로 부울 변수 확인
- 접근 거부 문제시 audit.log 분석
---
요약: SELinux에서 특정 프로세스에 대한 정책 추가는 프로세스의 도메인 파악 → 필요한 권한 정의 → 커스텀 정책 모듈(.te 파일) 작성 → 컴파일 및 설치 → 정책 적용 순서로 진행하며, audit2allow 등 도구와 파일 컨텍스트 관리(semanage fcontext)도 활용합니다.
SELinux는 기본적으로 정책 기반으로 작동하며, 특정 프로세스에 대한 정책을 추가하는 것은 시스템의 보안을 강화하는 중요한 작업입니다.
다음은 SELinux에서 특정 프로세스에 대한 정책을 추가하는 방법에 대한 단계별 설명입니다.
1. SELinux 모드 확인 먼저, SELinux가 활성화되어 있는지 확인해야 합니다.
이를 위해 다음 명령어를 사용합니다: ```bash sestatus ``` 이 명령어는 SELinux의 현재 상태와 모드를 보여줍니다.
"Enforcing" 모드에서 SELinux가 활성화되어 있어야 정책을 적용할 수 있습니다.
2. 필요한 도구 설치 SELinux 정책을 수정하기 위해 필요한 도구를 설치합니다.
일반적으로 `policycoreutils`, `selinux-policy-devel`, `setools-console` 패키지가 필요합니다.
다음 명령어로 설치할 수 있습니다: ```bash sudo yum install policycoreutils selinux-policy-devel setools-console ``` 또는 Debian 기반 시스템에서는: ```bash sudo apt-get install policycoreutils selinux-policy-dev setools ```
3. 현재 정책 확인 특정 프로세스에 대한 기존 정책을 확인하려면 `semanage`와 `ps` 명령어를 사용할 수 있습니다.
예를 들어, `httpd` 프로세스에 대한 정책을 확인하려면: ```bash ps -Z | grep httpd ``` 이 명령어는 `httpd` 프로세스의 SELinux 컨텍스트를 보여줍니다.
4. 새로운 정책 작성 새로운 정책을 작성하기 위해서는 `audit2allow` 도구를 사용할 수 있습니다.
이 도구는 SELinux의 감사 로그를 기반으로 새로운 정책 모듈을 생성합니다.
먼저, SELinux 감사 로그를 확인하여 필요한 접근 거부 메시지를 찾습니다: ```bash sudo cat /var/log/audit/audit.log | grep denied ``` 이 로그에서 필요한 접근 거부 메시지를 찾은 후, `audit2allow`를 사용하여 정책 모듈을 생성합니다: ```bash sudo cat /var/log/audit/audit.log | audit2allow -M mypol ``` 이 명령어는 `mypol.te`와 `mypol.pp` 파일을 생성합니다.
여기서 `.te` 파일은 정책 소스 파일이고, `.pp` 파일은 컴파일된 정책 파일입니다.
5. 정책 컴파일 및 설치 생성된 정책 모듈을 컴파일하고 설치합니다: ```bash sudo semodule -i mypol.pp ``` 이 명령어는 새로 생성된 정책을 SELinux에 설치합니다.
6. 정책 테스트 정책을 설치한 후, 해당 프로세스를 다시 시작하고 SELinux의 동작을 확인합니다.
문제가 발생하지 않는지 확인하기 위해 로그를 모니터링합니다: ```bash sudo tail -f /var/log/audit/audit.log ```
7. 정책 수정 및 관리 정책이 제대로 작동하지 않거나 추가적인 수정이 필요할 경우, `.te` 파일을 수정하고 다시 컴파일하여 설치할 수 있습니다.
정책을 수정한 후에는 항상 SELinux의 로그를 확인하여 새로운 접근 거부가 발생하지 않는지 확인해야 합니다.
8. 정책 제거 필요하지 않은 정책은 다음 명령어로 제거할 수 있습니다: ```bash sudo semodule -r mypol ``` 이 명령어는 `mypol`이라는 이름의 정책 모듈을 제거합니다.
결론 SELinux에서 특정 프로세스에 대한 정책을 추가하는 과정은 시스템 보안을 강화하는 중요한 작업입니다.
위의 단계들을 통해 SELinux 정책을 작성하고 적용함으로써, 시스템의 보안을 더욱 강화할 수 있습니다.
SELinux의 정책 관리에 익숙해지면, 시스템의 보안을 더욱 효과적으로 유지할 수 있습니다.
작성자:
김윤서 [비회원]
| 작성일자: 1년 전
2024-12-28 07:21:29
조회수: 138 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 138 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.