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 패키지를 제거하면 삭제됩니다. 자체 PAM 서비스 파일을 /etc/pam.d/teleport와 같이 만들고 위에서 service_name으로 지정하는 것을 권장합니다.

PAM 모듈에 대한 환경 변수 가져오기 및 설정하기

Teleport는 6.1 버전부터 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 사용자 이름입니다. SAML/OIDC 신원으로 Teleport Enterprise를 사용하는 경우 일반적으로 이메일 주소(예: user@example.com)이며, 로컬 Teleport 사용자일 경우 더 표준적인 exampleuser일 수 있습니다.
  • TELEPORT_LOGIN: 사용자가 Teleport 노드에 로그인할 때 가정하는 Linux/Unix 사용자 이름입니다. 예를 들어, root, developer, ubuntu, ec2-user 등이 있습니다.
  • TELEPORT_ROLES: Teleport 사용자가 가진 Teleport 역할의 공백으로 구분된 목록입니다. 예를 들어, developer tester access 등이 있습니다.

Teleport로 메시지 제공(MOTD) 표시하기

클러스터 전체의 메시지 제공(MOTD)은 auth_service 구성에서 설정할 수 있습니다.

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

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

tsh login --proxy teleport.example.com

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

계속하려면 [ENTER] 키를 누르십시오.

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

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

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

기본 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을 사용하여 로컬 사용자를 만드는 것은 구식이며 향후 버전에서 제거될 것입니다. PAM 없이 Teleport가 로컬 Linux 사용자를 자동으로 생성하도록 구성하는 방법은 호스트 사용자 생성 가이드를 참조하세요.

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

사용자가 아직 존재하지 않는 경우 pam_exec.so를 사용하여 PAM 스택을 통해 사용자를 생성하는 것이 가장 쉽습니다. 일반적으로 pam_exec.so는 운영 체제와 함께 제공됩니다.

기존 PAM 스택에 pam_exec.so를 추가하거나 Teleport를 위한 새 PAM 스택을 작성할 수 있습니다. 이 예시에서는 Teleport와 함께 pam_exec.so를 간단하게 사용하는 방법을 보여주기 위해 새 PAM 스택을 작성합니다.

먼저 /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는 작동하기 위해 계정 및 세션 시설 아래에서 각각 하나의 모듈이 설정되어 있어야 합니다.

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

스크립트를 저장할 디렉터리를 만듭니다:

mkdir -p /etc/pam-exec.d

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

#!/bin/sh
COMMENT="User ${TELEPORT_LOGIN} for ${TELEPORT_USERNAME} with roles ${TELEPORT_ROLES} created by Teleport."
/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 명령은 위 예제와 달리 다른 경로를 가질 수 있으니, 다음 명령의 결과에 따라 시스템에 맞게 조정해야 합니다:

which useradd

다음으로 /etc/teleport.yaml를 업데이트하여 PAM을 호출하고 service_name을 설정합니다.

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 원문 보기