Infograb logo
플러그 가능한 인증 모듈로 SSH 구성

Teleport의 SSH 서비스는 플러그 가능한 인증 모듈(PAM)과 통합되도록 구성할 수 있습니다.

Teleport는 현재 auth , account , 및 session PAM 모듈을 지원합니다. auth 스택은 선택 사항이며 기본적으로 사용되지 않습니다.

다음은 PAM을 활용할 수 있는 몇 가지 사항입니다:

  • 사용자 정의 메시지 전송(MOTD) 만들기
  • 로그인 시 로컬 Unix 사용자 생성
  • 인증 단계 추가

플러그 가능한 인증 모듈 소개

배경

플러그 가능한 인증 모듈(PAM)은 1995년 Sun Microsystems가 Solaris를 위해 일반 인증 프레임워크를 구현하면서 시작되었습니다. 그 이후 대부분의 GNU/Linux 배포판이 PAM을 채택했습니다.

man pam

플러그 가능한 인증 모듈(PAM) 라이브러리는 여러 일반 인증 관련 작업을 추상화하여 이러한 작업을 다양한 방식으로 구현하는 동적 로드 모듈을 위한 프레임워크를 제공합니다.

용어

PAM 용어에서 PAM을 사용하여 사용자를 인증하는 애플리케이션을 서버라고 하며, 구성 목적상 서비스 이름으로 식별되며, 이는 종종(그러나 반드시) 프로그램 이름입니다.

인증을 요청하는 사용자는 신청자라고 하며, 본인의 신원을 확인하고 요청된 자격 증명을 부여하는 역할을 맡은 사용자는 중재자라고 합니다.

서버가 사용자를 인증하고 요청한 작업을 수행하기 위해 거치는 작업의 순서를 PAM 트랜잭션이라고 합니다. 서버가 요청한 작업을 수행하는 컨텍스트를 세션이라고 합니다.

PAM이 구현하는 기능은 인증, 계정 관리, 세션 관리, 비밀번호 관리의 네 가지 시설로 나뉩니다.

Teleport는 현재 계정 관리 및 세션 관리를 지원합니다.

Teleport를 실행하는 Linux 머신에서 PAM 설정

Teleport를 운영 환경에서 실행할 때 보안 사고를 피하기 위해 다음의 모범 사례를 준수해야 합니다:

  • 필요하지 않는 한 운영 환경에서 sudo 사용을 피하십시오.
  • 새로운 비루트 사용자를 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하십시오.
  • 필요하지 않은 한 비루트 사용자로 Teleport의 서비스를 실행하십시오. SSH 서비스만 루트 액세스를 요구합니다. Teleport가 < 1024 (예: 443 )로 번호 매겨진 포트에서 수신 대기하도록 하려면 루트 권한(또는 CAP_NET_BIND_SERVICE 권한)이 필요합니다.
  • 최소 권한 원칙을 따르십시오. 더 제한적인 역할로도 충분할 때 사용자에게 허용적인 역할을 부여하지 마십시오. 예를 들어, 클러스터 리소스에 액세스하고 편집할 수 있는 권한을 부여하는 내장된 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에 대해 최소한의 필수 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 상승된 권한을 부여하십시오.
  • 새로운 데이터베이스나 애플리케이션과 같은 Teleport 리소스를 등록할 때 초대 토큰을 파일에 저장해야 합니다. 명령줄에 직접 토큰을 입력하면 악성 사용자가 손상된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 관행이 문서에서 사용된 예제에 반드시 반영되는 것은 아닙니다. 문서의 예제는 주로 데모 및 개발 환경을 위한 것입니다.

경고

운영 인스턴스, 환경 및/또는 설정을 영구 수정하기 전에 백업하는 것은 모범 사례로 권장됩니다. 이를 통해 필요할 경우 기존 상태로 롤백할 수 있습니다.

Linux 머신에서 PAM을 활성화하려면 /etc/teleport.yaml 을 다음과 같이 업데이트합니다:

ssh_service:
  # SSH 서비스 활성화
  enabled: true
  # PAM 통합 활성화
  pam:
    # 기본값은 "no"
    enabled: true
    # /etc/pam.d/sshd 구성 사용(기본값)
    service_name: "sshd"
    # PAM 구성에서 "auth" 모듈 사용
    # 기본값은 "false"
    # use_pam_auth: false

대부분의 Linux 배포판에는 /etc/pam.d 에 여러 PAM 서비스가 포함되어 있으며, Teleport는 기본적으로 /etc/pam.d/sshd 를 사용하려고 시도합니다. 이 파일은 openssh-server 패키지를 제거하면 삭제됩니다. /etc/pam.d/teleport 와 같은 자신의 PAM 서비스 파일을 생성하고 위의 service_name 으로 지정하는 것을 추천합니다.

PAM 모듈을 위한 환경 변수 설정 및 가져오기

Teleport는 PAM 모듈을 위한 임의의 환경 변수를 설정하는 것을 지원합니다. 이러한 변수는 {{ external.email }} 형태의 역할 스타일 SSO 주장일 수 있으며, 여기서 email 은 구성된 SSO IdP에 의해 만들어진 주장입니다.

사용자 정의 환경 변수를 설정하려면 /etc/teleport.yaml 을 다음과 같이 업데이트합니다:

ssh_service:
  enabled: true
  pam:
    # 기본값은 비활성화
    enabled: true
    # /etc/pam.d/sshd 구성 사용(기본값)
    service_name: "sshd"
    # PAM 구성에서 "auth" 모듈 사용
    # 기본값은 "false"
    use_pam_auth: true
    # PAM 모듈을 위한 사용자 정의 환경 변수 설정
    environment:
      FOO: "bar"
      EMAIL: "{{ external.email }}"

Teleport는 PAM 핸들로부터 PAM 환경 변수를 읽을 수도 있는데, 이는 PAM이 상태를 저장하기 위해 사용하는 불투명 데이터 구조입니다. 이러한 변수는 다음과 같습니다:

  • TELEPORT_USERNAME : 노드에 로그인하는 사용자의 Teleport 사용자 이름입니다. 이는 일반적으로 이메일 주소(예: user@example.com )이며, Teleport Enterprise에서 SAML/OIDC 신원을 사용하는 경우 또는 더 일반적인 exampleuser 일 수 있습니다.
  • TELEPORT_LOGIN : Teleport 사용자가 Teleport 노드에 로그인할 때 가정하는 Linux/Unix 사용자 이름입니다. 예: root , developer , ubuntu , ec2-user 등.
  • TELEPORT_ROLES : Teleport 사용자가 가진 Teleport 역할의 공백으로 구분된 목록입니다. 예: developer tester access .

Teleport로 하루의 메시지(MOTD) 표시하기

클러스터 전체의 하루의 메시지를 auth_service 구성에서 설정할 수 있습니다.

auth_service:
  message_of_the_day: "클러스터에 오신 것을 환영합니다. 모든 활동이 로그에 기록됩니다."

이는 tsh login 과정 중에 표시되며, 사용자가 클러스터에 로그인하기 전에 긍정적으로 확인해야 합니다.

tsh login --proxy teleport.example.com

클러스터에 오신 것을 환영합니다. 모든 활동이 로그에 기록됩니다.

계속하려면 [ENTER]를 누릅니다.

또는 전통적인 Unix /etc/motd 파일을 사용하여 노드별 하루의 메시지를 설정할 수 있습니다. 일반적으로 /etc/motd 파일은 사용자가 로그인한 후 셸이 실행되기 전에 login(1)에 의해 표시됩니다. 이는 중요 시스템 전체 공지에 일반적으로 사용됩니다.

전통적인 Unix /etc/motd 파일을 사용하여 노드별 하루의 메시지를 설정할 수 있습니다. 일반적으로 /etc/motd 파일은 사용자가 로그인한 후 셸이 실행되기 전에 login(1)에 의해 표시됩니다. 이는 중요 시스템 전체 공지에 일반적으로 사용됩니다.

이 기능은 사용자가 노드에서의 활동이 감 auditing 되고 기록되고 있음을 알리는 데 도움이 됩니다.

기본 sshd PAM 구성은 두 개의 pam_motd 파일을 호출합니다. 하나는 기계 정보를 출력하는 동적 MOTD이고, 다른 하나는 관리자가 설정할 수 있는 정적 MOTD입니다.

session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

/etc/motd 를 업데이트하면 Teleport를 통해 노드에 접근하는 사용자에게 메시지를 제공할 수 있습니다.

cat /etc/motd

경고: 이 노드에서의 모든 활동은 Teleport에 의해 기록됩니다.

업데이트된 MOTD가 포함된 Teleport SSH

로그인 시 로컬 Unix 사용자 만들기

Warning

로그인 시 PAM을 사용하여 로컬 사용자를 생성하는 것은 구식이며 향후 버전에서 제거될 예정입니다. Teleport가 PAM 없이 로컬 Linux 사용자를 자동으로 생성하도록 구성하는 방법에 대한 호스트 사용자 생성 가이드를 참조하십시오.

Teleport는 로그인 시 로컬 Unix 사용자를 생성할 수 있는 기능을 가지고 있습니다. 이는 대규모 조직에서 로컬 사용자 및 홈 디렉터리를 즉시 프로비저닝하려는 경우 매우 유용합니다.

사용자가 이미 존재하지 않을 경우 PAM 스택을 사용하여 사용자를 생성하는 가장 쉬운 방법은 pam_exec.so 를 사용하는 것입니다. pam_exec.so 는 일반적으로 운영 체제와 함께 배포됩니다.

기존 PAM 스택에 pam_exec.so 를 추가하거나 Teleport에 대한 새로운 PAM 스택을 작성할 수 있습니다. 이 예시에서는 pam_exec.so 를 Teleport와 함께 사용하는 방법을 단순화하기 위해 새로운 것을 작성하겠습니다.

먼저 /etc/pam.d/teleport 라는 파일을 생성하고 다음 내용을 추가합니다.

account   required   pam_exec.so /etc/pam-exec.d/teleport_acct
session   required   pam_motd.so
session   required   pam_permit.so
Note

session 시설 아래에 pam_motd.so 를 포함하는 것에 유의하십시오. pam_motd.so 는 사용자 생성에 필요하지 않지만, Teleport는 작동을 위해 accountsession 시설 아래에 최소한 하나의 모듈이 설정되어야 합니다.

다음으로 pam_exec.so 에 의해 실행될 스크립트를 생성합니다.

스크립트를 저장할 디렉터리를 생성합니다:

mkdir -p /etc/pam-exec.d

/etc/pam-exec.dteleport_acct 라는 파일을 추가하고 다음 내용을 입력합니다:

#!/bin/sh
COMMENT="사용자 ${TELEPORT_LOGIN}는 ${TELEPORT_USERNAME}이(가) Teleport에 의해 작성한 역할 ${TELEPORT_ROLES}입니다."
/bin/id -u "${TELEPORT_LOGIN}" > /dev/null 2>&1 || /sbin/useradd -m -s /bin/bash -c "${COMMENT}" "${TELEPORT_LOGIN}" 2>> /tmp/pam.error
exit 0

스크립트가 실행 가능하도록 설정합니다:

chmod +x /etc/pam-exec.d/teleport_acct

이 스크립트는 TELEPORT_LOGIN 에 할당된 로그인이 존재하는지 확인하고, 존재하지 않으면 생성합니다. useradd 에서 발생하는 모든 오류는 /tmp/pam.error 에 기록됩니다.

환경 변수 TELEPORT_USERNAMETELEPORT_ROLES 는 아이덴티티 정보에 따라 시스템을 변경할 수 있는 더 풍부한 스크립트를 작성하는 데 사용할 수 있습니다.

Note

useradd 명령은 예시와 다른 경로일 수 있으며 사용하는 Linux 배포판에 따라 다를 수 있습니다. 다음 명령의 결과에 따라 필요에 따라 조정하십시오:

which useradd

다음으로 /etc/teleport.yaml 을 업데이트하여 위의 PAM 스택을 호출하도록 하며, PAM을 활성화하고 서비스 이름을 설정합니다.

ssh_service:
  enabled: true
  pam:
    enabled: true
    service_name: "teleport"

이제 기존 사용자로 로그인하려고 하면 사용자가 생성되고 성공적으로 로그인됩니다.

/etc/pam-exec.d/teleport_acct 스크립트는 사용자의 그룹을 설정할 수 있으며, 사용자의 권한을 자동으로 채울 수 있습니다. 사용자의 역할은 스페이스로 구분된 TELEPORT_ROLES 변수로 채워집니다. 이는 추가 스크립팅을 통해 특정 sudo 그룹에 매핑하는 데 사용할 수 있습니다.

인증 단계 추가

PAM auth 모듈을 사용하면 사용자 로그인 중에 인증 단계를 추가할 수 있습니다. 여기에는 비밀번호, 두 번째 인증 요소 또는 생체 인식이 포함될 수 있습니다.

Teleport는 기본적으로 인증서를 사용하여 강력한 SSH 인증을 가능하게 합니다. 대부분의 사용자는 초기 Teleport 인증 (예: tsh login )을 강화하는 것을 선호합니다.

기본적으로 auth 모듈은 기본 시스템 동작(보통 로컬 Unix 비밀번호 사용)을 피하기 위해 사용되지 않습니다. teleport.yamlpam 섹션에서 use_pam_auth 를 설정하여 이를 활성화할 수 있습니다.

ssh_service:
  enabled: true
  pam:
    enabled: true
    # /etc/pam.d/sshd 구성 사용 (기본값)
    service_name: "sshd"
    # PAM 구성에서 "auth" 모듈 사용
    use_pam_auth: true
Teleport 원문 보기