SELinux 개요

SELinux(Security-Enhanced Linux)는 Linux 시스템에서 접근 제어를 위한 보안 모듈이다. SELinux는 시스템에 대한 접근을 제어하는 규칙 집합을 사용하여 허용되지 않은 접근 시도를 차단함으로써 보안을 강화한다. OpenSSH와 SELinux를 통합할 때는 SSH 서비스에 대한 적절한 보안 정책을 설정하고 관리해야 한다.

SELinux 모드

SELinux는 세 가지 모드를 제공한다: - Enforcing: 정책을 강제로 적용하고 모든 위반을 차단한다. - Permissive: 위반을 기록하되 차단하지는 않는다. - Disabled: SELinux 기능이 비활성화된다.

기본적으로 OpenSSH와 SELinux가 통합될 때는 'Enforcing' 모드에서 실행되며, 이 모드에서는 정책 위반 시 OpenSSH의 동작에 제약이 가해질 수 있다.

OpenSSH와 SELinux 보안 컨텍스트

SELinux는 모든 파일과 프로세스에 보안 컨텍스트를 할당한다. OpenSSH 데몬(SSHD)은 시스템에서 'sshd_t'라는 도메인에 속하며, 이 도메인은 정책 파일에 정의된 규칙에 따라 행동한다. 사용자가 SSH를 통해 시스템에 접근할 때는 'user_t' 또는 다른 사용자 정의 도메인으로 전환된다.

ls -Z /usr/sbin/sshd

이 명령어를 사용하면 SSH 데몬의 SELinux 보안 컨텍스트를 확인할 수 있다. 예시 출력:

system_u:system_r:sshd_t:s0 /usr/sbin/sshd

여기서 'sshd_t'가 해당 프로세스의 도메인임을 보여준다. 이 도메인이 올바르게 설정되지 않았거나 권한이 부족한 경우 SSH 연결에 문제가 발생할 수 있다.

SELinux 보안 정책

OpenSSH에 대한 SELinux 정책은 SELinux 정책 모듈에서 관리되며, 'sshd'와 관련된 정책을 정의하는 주요 파일은 /etc/selinux/targeted/policy/ 경로 아래에 있다. 이 정책은 OpenSSH가 시스템 리소스에 접근하는 방법을 제어한다.

ls -Z /home/user/

만약 보안 컨텍스트가 잘못되어 있다면, restorecon 명령을 사용하여 이를 복구할 수 있다.

restorecon -Rv /home/user/

이러한 방식으로 SELinux의 기본 보안 정책을 준수하면서 OpenSSH를 운영할 수 있다.

SELinux 정책 수정 및 관리

기본 SELinux 정책이 OpenSSH 운영에 문제가 생긴다면, 정책을 수정하거나 사용자 정의 정책을 추가해야 할 수 있다. 이러한 경우 audit.log 파일을 통해 SELinux 정책 위반을 확인할 수 있으며, 위반 항목을 바탕으로 정책을 보완할 수 있다.

grep sshd /var/log/audit/audit.log

위 명령을 통해 SSH 관련 SELinux 경고 메시지를 확인할 수 있다. 정책 위반이 확인되면 해당 위반 항목을 해결하기 위한 사용자 정의 정책을 작성해야 한다. 이를 위해서는 audit2allow 도구를 사용할 수 있다.

audit2allow -a

이 명령어는 로그에 기록된 정책 위반을 기반으로 예외 규칙을 생성한다. 생성된 규칙을 정책 모듈로 적용하여 OpenSSH가 SELinux에서 허용되지 않았던 동작을 수행할 수 있도록 한다.

사용자 정의 정책 추가

사용자 정의 정책을 적용하려면, 새로운 정책 모듈을 생성하고 이를 시스템에 적용해야 한다. 다음과 같이 간단한 사용자 정의 정책을 작성할 수 있다.

  1. 새로운 정책 파일 생성 (예: sshd_custom.te):
module sshd_custom 1.0;

require {
    type sshd_t;
    type user_home_dir_t;
    class dir search;
    class file { read write open };
}

allow sshd_t user_home_dir_t:dir search;
allow sshd_t user_home_dir_t:file { read write open };
  1. 정책 파일을 컴파일하고 적용:
checkmodule -M -m -o sshd_custom.mod sshd_custom.te

semodule_package -o sshd_custom.pp -m sshd_custom.mod

semodule -i sshd_custom.pp

이 과정을 통해 OpenSSH에 필요한 접근 권한을 SELinux 정책에 추가할 수 있다.

OpenSSH와 SELinux의 파일 전송 문제 해결

SELinux는 기본적으로 SSH를 통한 파일 전송에도 영향을 미칠 수 있다. 예를 들어, SFTP를 사용하여 파일을 전송할 때, SELinux 보안 정책이 제대로 설정되어 있지 않다면 전송된 파일에 올바른 보안 컨텍스트가 적용되지 않아 파일에 접근할 수 없게 될 수 있다.

이 문제를 해결하기 위해서는, 전송된 파일에 올바른 SELinux 보안 컨텍스트를 설정해야 한다. 이를 위해 restorecon 명령을 사용할 수 있다.

restorecon -Rv /path/to/directory

또한, SELinux가 SSH 기반의 파일 전송을 제한하는지 확인하려면, audit.log 파일을 분석하여 관련 정책 위반을 식별할 수 있다.

SELinux의 SSH 포트 변경과 보안 설정

SELinux는 기본적으로 22번 포트를 사용하여 SSH 연결을 허용한다. 만약 보안을 강화하기 위해 OpenSSH의 포트를 변경하려는 경우, SELinux에도 해당 변경 사항을 반영해야 한다.

  1. SSH 포트 변경:

/etc/ssh/sshd_config 파일에서 포트를 변경한 후, SELinux의 보안 정책에 새로운 포트를 등록해야 한다.

  1. 새로운 SSH 포트 등록:
semanage port -a -t ssh_port_t -p tcp 2222

위 명령어는 2222번 포트를 SSH 서비스에 사용할 수 있도록 SELinux에 등록한다.