Linux 커널 및 보안 구성: sysctl, PAM 및 액세스 제어
Linux 시스템 보안에는 커널에서 시작하여 인증 시스템, 액세스 제어 및 스토리지 마운트에 이르는 다계층 접근 방식이 필요합니다. 이 가이드는 현대적인 Linux 환경에서 가장 중요한 보안 구성 구성 요소에 대한 자세한 참조를 제공합니다.
1. sysctl을 이용한 커널 매개변수 구성
sysctl 명령과 /etc/sysctl.conf 파일(/etc/sysctl.d/ 파일 포함)은 런타임에 Linux 커널 매개변수를 구성하기 위한 기본 도구입니다. 이러한 매개변수 중 상당수는 보안에 중요한 영향을 미칩니다.
sysctl 구성 생성기 사용
구성 파일을 수동으로 편집할 수도 있지만, **sysctl 구성 생성기(sysctl config generator)**를 사용하면 중요한 강화 설정을 놓치지 않도록 도와줍니다. 구성해야 할 일반적인 매개변수는 다음과 같습니다.
- 네트워크 강화: IP 포워딩 비활성화(
net.ipv4.ip_forward = 0), ICMP 리다이렉트 무시(net.ipv4.conf.all.accept_redirects = 0), TCP SYN 쿠키 보호 활성화(net.ipv4.tcp_syncookies = 1). - 메모리 보호:
kernel.randomize_va_space = 2를 통한 ASLR(Address Space Layout Randomization) 활성화. - 정보 유출 제한: 커널 로그 액세스 제한(
kernel.dmesg_restrict = 1) 및 커널 심볼 테이블 제한(kernel.kptr_restrict = 2).
Linux 커널 매개변수 참조표
| 매개변수 | 권장 값 | 설명 |
|---|---|---|
net.ipv4.tcp_syncookies |
1 |
SYN 플러드 공격으로부터 보호합니다. |
net.ipv4.conf.all.rp_filter |
1 |
IP 스푸핑을 방지하기 위해 역방향 경로 필터링을 활성화합니다. |
kernel.randomize_va_space |
2 |
버퍼 오버플로우 공격을 방지하기 위한 완전한 ASLR. |
fs.protected_fifos |
2 |
누구나 쓰기 가능한 디렉토리 내에서 FIFO에 대한 무단 쓰기를 방지합니다. |
2. 플러그형 인증 모듈 (PAM)
PAM은 서비스 자체를 수정하지 않고도 다양한 서비스에 대한 인증을 관리할 수 있는 유연한 방법을 제공합니다. 강력한 비밀번호 정책과 다요소 인증을 시행하려면 PAM을 올바르게 구성하는 것이 필수적입니다.
PAM 구성 생성기 고려 사항
**PAM 구성 생성기(PAM config generator)**는 일반적으로 /etc/pam.d/에 있는 파일에 집중합니다. 보안을 위해 포함해야 할 주요 모듈은 다음과 같습니다.
- pam_cracklib.so / pam_pwquality.so: 비밀번호 복잡성 요구 사항(길이, 문자 유형)을 시행합니다.
- pam_tally2.so / pam_faillock.so: 무차별 대입 공격을 방지하기 위해 일정 횟수의 로그인 실패 후 계정을 잠급니다.
- pam_unix.so:
/etc/shadow에 대해 비밀번호를 확인하는 표준 모듈입니다.
비밀번호 품질 구성 예시:
password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
3. 강제 액세스 제어: SELinux 및 AppArmor
사용자 및 그룹 기반의 표준 임의 액세스 제어(DAC)와 달리 강제 액세스 제어(MAC)를 사용하면 관리자가 시스템의 모든 프로세스와 파일에 대해 세분화된 보안 정책을 정의할 수 있습니다.
SELinux 정책 생성기 vs. AppArmor 프로필 생성기
- SELinux (Security-Enhanced Linux): 모든 개체(프로세스, 파일, 포트)에 라벨링 시스템을 사용합니다. 강력하지만 학습 곡선이 가파릅니다. 복잡한 거부를 처리하려면 SELinux 정책 생성기(SELinux policy generator)(
audit2allow등)가 필요한 경우가 많습니다. - AppArmor: 경로 기반 프로필을 사용합니다. 일반적으로 SELinux보다 구성하기 쉬운 것으로 간주됩니다. AppArmor 프로필 생성기(AppArmor profile generator)(
aa-genprof등)는 애플리케이션 동작을 모니터링하여 프로필을 만드는 데 도움을 줄 수 있습니다.
SELinux vs. AppArmor 비교
| 기능 | SELinux | AppArmor |
|---|---|---|
| 제어 유형 | 라벨 기반 | 경로 기반 |
| 복잡성 | 높음 | 중간 |
| 기본 제공 배포판 | RHEL, CentOS, Fedora | Ubuntu, Debian, openSUSE |
| 유연성 | 매우 높음 | 높음 |
| 학습 곡선 | 가파름 | 완만함 |
4. /etc/fstab을 이용한 보안 스토리지 마운트
/etc/fstab 파일은 스토리지 장치가 마운트되는 방식을 정의합니다. 올바른 마운트 옵션을 사용하면 임시 디렉토리에서 악성 바이너리를 실행하는 것과 같은 다양한 유형의 공격을 방지할 수 있습니다.
/etc/fstab 생성기 보안 플래그
**/etc/fstab 생성기(/etc/fstab generator)**를 사용할 때는 비시스템 파티션(/tmp, /var 또는 외부 드라이브 등)에 다음 보안 플래그를 포함해야 합니다.
nodev: 파일 시스템에서 블록 또는 문자 특수 장치의 해석을 방지합니다.nosuid: set-user-identifier 또는 set-group-identifier 비트를 비활성화합니다.noexec: 파일 시스템에서 바이너리 실행을 방지합니다.
/tmp에 대한 보안 항목 예시:
UUID=... /tmp tmpfs rw,nosuid,nodev,noexec 0 0
FAQ: Linux 보안 구성
Q: SELinux와 AppArmor 중 무엇을 사용해야 하나요?
A: 일반적으로 사용 중인 배포판에 따라 다릅니다. 기본적으로 지원되고 활성화된 것을 사용하세요(RHEL 계열은 SELinux, Debian 계열은 AppArmor). 가장 포괄적인 사전 구성된 정책을 가지고 있기 때문입니다.
Q: net.ipv4.ip_forward가 기본적으로 비활성화되어 있는 이유는 무엇인가요?
A: IP 포워딩을 활성화하면 시스템이 라우터 역할을 할 수 있게 되며, 이는 명시적인 의도가 없고 제대로된 방화벽 설정이 없는 경우 보안 위험이 될 수 있습니다.
Q: PAM을 잘못 구성하면 어떻게 되나요?
A: PAM 구성을 잘못하면 root를 포함한 모든 사용자가 시스템에서 차단될 수 있습니다. PAM 변경 사항을 테스트할 때는 항상 활성 root 셸을 열어 두거나 복구 계획(Live CD 부팅 등)을 세워 두십시오.
Q: sysctl 설정이 적용되었는지 어떻게 확인하나요?
A: sysctl -a 명령을 사용하여 현재의 모든 커널 매개변수와 해당 값을 확인하십시오. sysctl net.ipv4.tcp_syncookies와 같이 특정 매개변수를 확인할 수도 있습니다.