Teleport SSH Service를 위한 SELinux 모듈
Teleport v18.9이 기능은 현재 활발히 개발 중입니다. Teleport SSH Service SELinux 모듈을 사용하면 SELinux가 Teleport SSH Service를 제한할 수 있습니다. SELinux 모듈을 설치하기 전에 다음 요구 사항이 충족되는지 확인하세요:
이 기능은 현재 활발히 개발 중입니다. 향후 릴리즈에서는 SELinux 정책을 확장하여 더 많은 Teleport 기능과 Teleport 관리형 업데이트와의 통합을 지원할 것입니다.
Teleport SSH Service SELinux 모듈을 사용하면 SELinux가 Teleport SSH Service를 제한할 수 있습니다. Teleport SSH Service 프로세스가 명시적으로 허용된 작업만 수행할 수 있도록 하여 공격 표면을 줄이고 Teleport 바이너리가 침해되더라도 무단 작업을 방지합니다.
사전 요구 사항#
SELinux 모듈을 설치하기 전에 다음 요구 사항이 충족되는지 확인하세요:
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
서비스 SELinux 모듈은 이 플랫폼에서만 공식적으로 지원됩니다.
- 호스트에 대한 root 또는
sudo액세스 권한.install-selinux.sh스크립트는root로 실행해야 합니다. - 호스트에서 SELinux가 활성화되어 있어야 합니다(허용 모드 또는 적용 모드 모두 가능). 모듈은 두 모드 중 어느 쪽에서도 설치할 수 있지만, 프로덕션 환경에서는 적용 모드를 사용하는 것이 좋습니다. 두 모드의 차이점은 [SELinux 모드] (#selinux-modes)를 참조하세요.
- 호스트에
selinux-policy-devel패키지가 설치되어 있어야 합니다. 이 패키지는 모듈을 컴파일하는 데 사용되는 도구 체인을 제공합니다. 이 내용은 설치 섹션에서 다룹니다. - 호스트에 Teleport 구성 파일이 있어야 합니다(기본값은
/etc/teleport.yaml). 설치 스크립트는 이 파일을 읽어 모듈을 사용자 지정하고 파일에 올바르게 레이블을 지정합니다. - 클러스터를 가리키도록 구성되고
SSH 시작하기에 따라
등록된 Teleport SSH Service 에이전트가 있어야 합니다.
이 에이전트에는 SELinux 관련 요구 사항이 세 가지 있습니다:
- 타르볼 설치만 가능.
install-selinux.sh스크립트와 SELinux 모듈은 Linux 타르볼에만 포함되어 제공됩니다. 패키지 관리자 및 컨테이너 설치는 지원되지 않습니다. - SSH Service만 가능. 에이전트는 SSH Service만 실행해야 합니다. 다른 서비스가 활성화되어 있거나
SSH Service가 비활성화된 상태에서
--enable-selinux가 설정되면 Teleport가 오류와 함께 종료됩니다. - systemd 서비스로 실행. Teleport는 systemd 서비스로 실행되어야 합니다.
SELinux 적용은 Teleport가
teleport_ssh_t도메인에서 실행되는 것에 의존하며, 이는 일반적으로 Teleport가 systemd에 의해 시작될 때만 발생합니다.
- 타르볼 설치만 가능.
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
지원 기능#
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).