Teleport SSH Service를 위한 SELinux 모듈
이 기능은 현재 활발히 개발 중입니다. Teleport SSH Service SELinux 모듈을 사용하면 SELinux가 Teleport SSH Service를 제한할 수 있습니다. Teleport SSH Service SELinux 모듈은 다음 Teleport SSH Service 기능을 지원합니다:
이 기능은 현재 활발히 개발 중입니다. 향후 릴리즈에서는 SELinux 정책을 확장하여 더 많은 Teleport 기능과 Teleport 관리형 업데이트와의 통합을 지원할 것입니다.
Teleport SSH Service SELinux 모듈을 사용하면 SELinux가 Teleport SSH Service를 제한할 수 있습니다. Teleport SSH Service 프로세스가 명시적으로 허용된 작업만 수행할 수 있도록 하여 공격 표면을 줄이고 Teleport 바이너리가 침해되더라도 무단 작업을 방지합니다.
지원 기능#
Teleport SSH Service SELinux 모듈은 다음 Teleport SSH Service 기능을 지원합니다:
- SSH 연결 처리
- PAM 지원
- SSH 에이전트 포워딩
- auditd 로깅
- 향상된 세션 녹화
지원 플랫폼#
Teleport SSH Service의 SELinux 정책 모듈은 Red Hat Enterprise Linux(RHEL) 8 및 9에서만 공식 지원됩니다.
설치#
SELinux 모듈을 설치하기 전에 selinux-policy-devel 패키지가 설치되어 있는지 확인합니다:
$ sudo dnf install selinux-policy-devel
SELinux 모듈을 설치하려면 Linux 타르볼에 포함된 install-selinux.sh 스크립트를 root로 실행합니다:
$ sudo ./install-selinux.sh
# teleport가 PATH에 없는 경우
$ sudo ./install-selinux.sh -t /path/to/teleport
이 스크립트는 다음을 수행합니다:
- 설치된 Teleport 바이너리에서 SELinux 모듈을 추출합니다.
- Teleport 구성에 따라 모듈을 사용자 지정합니다.
teleport_sshSELinux 모듈을 시스템 정책에 컴파일하고 설치합니다.- 기존 Teleport SSH Service 바이너리와 디렉터리에 레이블을 지정합니다.
스크립트는 모듈을 사용자 지정하고 파일과 디렉터리에 올바르게 레이블을 지정하기 위해 Teleport SSH Service의 구성 파일을 읽어야 합니다. 기본적으로 /etc/teleport.yaml을 읽지만 -c 플래그를 사용하여 구성 파일의 다른 위치를 지정할 수 있습니다:
$ sudo ./install-selinux.sh -c /path/to/teleport.yaml
Teleport SSH Service 에이전트가 업데이트될 때마다 install-selinux.sh를 다시 실행해야 합니다. 이렇게 하면 SELinux 모듈이 사용 중인 바이너리 버전과 일치합니다.
향후 Teleport 버전에서는 teleport-update를 통한 관리형 업데이트가 SELinux 모듈을 관리하는 주요 방법이 될 것입니다.
SELinux 모드#
SELinux는 세 가지 모드로 작동할 수 있습니다:
| 모드 | 설명 |
|---|---|
| Enforcing | SELinux 정책이 적용됩니다. 위반 사항이 차단되고 기록됩니다. |
| Permissive | SELinux 정책이 적용되지 않지만 위반 사항이 기록됩니다(허용됨). |
| Disabled | SELinux가 완전히 꺼져 있으며 정책이 로드되거나 기록되지 않습니다. |
getenforce 또는 sestatus를 사용하여 현재 모드를 확인합니다. 모드를 변경하려면 setenforce 또는 semanage를 사용합니다. Teleport SSH Service는 SELinux가 허용 모드인 경우에도 작동하지만 프로덕션 사용에는 권장되지 않습니다. 허용 모드는 정책 위반을 기록할 뿐 시행하지 않으므로 테스트 및 개발에만 권장됩니다. 프로덕션 사용을 위해 SELinux는 적용 모드로 설정해야 합니다.
SELinux로 Teleport SSH Service 적용#
모듈이 설치되면 시작할 때 --enable-selinux 플래그를 추가하여 Teleport에 SELinux 지원을 활성화하도록 명시적으로 지시해야 합니다:
$ teleport start --enable-selinux
SSH 서비스만 SELinux 적용을 지원합니다. 다른 서비스가 활성화되거나 SSH 서비스가 활성화되지 않은 상태에서 --enable-selinux를 전달하여 Teleport를 시작하려고 하면 Teleport가 오류와 함께 종료됩니다.
--enable-selinux가 전달되면 Teleport는 다음의 경우에 오류와 함께 종료됩니다:
- 시스템에 SELinux가 설치되지 않은 경우.
- SELinux가 비활성화된 경우.
teleport_ssh모듈이 설치되지 않았거나 비활성화된 경우.- Teleport가 올바른 SELinux 도메인에서 실행되지 않는 경우.
Teleport의 바이너리는 teleport_ssh_exec_t 유형을 가져야 합니다. 설치 스크립트가 이미 올바른 유형으로 레이블이 지정되어 있지 않은 경우 올바른 유형으로 Teleport 바이너리에 레이블을 지정합니다. 바이너리를 복사하거나 이동하면 레이블을 업데이트해야 합니다. 설치 스크립트를 다시 실행하여 레이블을 업데이트하거나 수동으로 레이블을 업데이트할 수 있습니다:
$ sudo semanage fcontext -a -t teleport_ssh_exec_t /path/to/teleport
Teleport는 systemd 서비스로 실행되지 않는 한 올바른 teleport_ssh_t 도메인에서 실행되지 않고 SELinux에 의해 적용되지 않을 가능성이 큽니다. SELinux 도메인에 대한 자세한 내용은 Red Hat 문서 SELinux 시작하기를 참조하세요.
선택적 --ensure-selinux-enforcing 플래그는 다음의 경우에 Teleport가 오류와 함께 종료되도록 합니다:
- SELinux가 허용 모드인 경우.
- 필요한
teleport_ssh모듈이 허용 모드인 경우.
이는 Teleport SSH Service가 항상 SELinux 정책 적용의 보호 아래에서 실행되도록 보장하는 안전 검사를 제공합니다. SELinux 구성을 테스트하거나 문제를 진단할 때 이 플래그 없이 Teleport를 실행해야 할 수 있습니다.
SELinux 모듈 소스 검사#
모듈 소스는 유형 적용 파일과 파일 컨텍스트 파일의 두 파일로 구성됩니다.
유형 적용 파일은 모듈의 핵심으로 Teleport SSH Service 프로세스가 수행할 수 있는 작업을 정의하는 문을 포함합니다.
파일 컨텍스트 파일은 Teleport SSH Service가 사용하는 파일과 디렉터리를 적절한 SELinux 레이블에 매핑합니다. SELinux 레이블에 대한 자세한 내용은 Red Hat 문서 SELinux 컨텍스트 - 파일 레이블링을 참조하세요.
사용자 지정된 모듈 소스는 Teleport를 사용하여 출력할 수 있습니다:
# 유형 적용 파일 출력
$ teleport selinux-ssh module-source
# 파일 컨텍스트 파일 출력
$ teleport selinux-ssh file-contexts
SELinux 모듈 사용자 지정#
기본값을 초과하는 추가 권한을 부여해야 하는 경우 공식 모듈에서 사용하는 teleport_ssh_t 도메인을 대상으로 하는 자체 SELinux 정책 모듈을 만들고 설치할 수 있습니다.
공식 Teleport SSH Service 모듈의 이름은 teleport_ssh입니다. 설치 스크립트는 해당 이름의 모듈을 덮어씁니다. 사용자 지정 정책 모듈의 이름을 다르게 지정해야 합니다(예: my_teleport_ssh_extras).
-
teleport_ssh_t에 대한 추가 규칙을 정의하는 새.te파일을 작성합니다. -
모듈을 컴파일하고 패키징합니다:
$ make -f /usr/share/selinux/devel/Makefile my_teleport_ssh_extras.pp -
설치합니다:
$ semodule -i my_teleport_ssh_extras.pp
SELinux 모듈 작성에 대한 자세한 지침은 Red Hat 문서 SELinux 정책 모듈 작성 방법을 참조하세요.
SELinux 및 Teleport SSH Service 문제 해결#
Teleport SSH Service가 SELinux에 의해 차단될 때 다음 도구를 사용하여 정책 문제를 진단하고 해결합니다:
-
sealert (
setroubleshoot-server패키지 포함):$ sudo sealert -a /var/log/audit/audit.log이는 SELinux 거부 및 정책 조정에 대한 권장 사항의 사람이 읽을 수 있는 보고서를 생성합니다.
-
audit2why (
policycoreutils-python-utils패키지 포함):$ ausearch -m AVC -c teleport | audit2why이는 거부가 발생한 이유를 설명하고 누락된 정책 규칙을 제안합니다.
-
audit2allow (사용자 지정 정책 모듈 생성):
$ ausearch -m AVC -c teleport | audit2allow -M my_teleport_fix이 방법을 사용하여 필요한 권한을 부여하는 작은 대상 모듈을 만듭니다.
--enable-selinux --ensure-selinux-enforcing으로 Teleport가 시작되지 않는 경우 다음을 확인합니다:
-
SELinux가 적용 모드인지(
getenforce). -
teleport_ssh모듈이 나열되어 있는지:$ semodule -l | grep teleport_ssh -
자세한 AVC 메시지를 위한 감사 로그(
/var/log/audit/audit.log).
