InfoGrab DocsInfoGrab Docs

PAM(Pluggable Authentication Modules)으로 SSH 구성

요약

Teleport의 SSH 서비스는 PAM(Pluggable Authentication Modules)과 통합되도록 구성할 수 있습니다. Teleport는 현재 auth, account, session PAM 모듈을 지원합니다.

Teleport의 SSH 서비스는 PAM(Pluggable Authentication Modules)과 통합되도록 구성할 수 있습니다. 이 페이지에서는 Teleport를 PAM과 통합하기 위해 사용할 수 있는 기능들을 설명합니다.

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

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

  • 사용자 정의 오늘의 메시지(Message of the Day, MOTD) 생성
  • 로그인 시 로컬 Unix 사용자 생성
  • 인증 단계 추가

Pluggable Authentication Modules 소개#

배경#

Pluggable Authentication Modules(PAM)는 1995년 Sun Microsystems가 Solaris용 범용 인증 프레임워크를 구현하면서 시작되었습니다. 이후 대부분의 GNU/Linux 배포판이 PAM을 채택했습니다.

$ man pam

PAM(Pluggable Authentication Modules) 라이브러리는 여러 공통 인증 관련 작업을 추상화하며, 이러한 작업을 다양한 방식으로 구현하는 동적 로드 모듈을 위한 프레임워크를 제공합니다.

용어#

PAM 용어에서, 사용자를 인증하기 위해 PAM을 사용하는 애플리케이션을 **서버(server)**라고 하며, 이는 구성 목적을 위해 서비스 이름으로 식별됩니다. 서비스 이름은 흔히(반드시는 아니지만) 프로그램 이름입니다.

인증을 요청하는 사용자는 **신청자(applicant)**라고 하며, 이들의 신원을 확인하고 요청된 자격 증명을 부여하는 역할을 맡는 사용자(대개 root)는 **중재자(arbitrator)**라고 합니다.

서버가 사용자를 인증하고 요청된 작업을 수행하기 위해 거치는 일련의 작업을 PAM **트랜잭션(transaction)**이라고 합니다. 서버가 요청된 작업을 수행하는 맥락을 **세션(session)**이라고 합니다.

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

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

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

프로덕션 보안 모범 사례

Teleport를 프로덕션 환경에서 실행할 때는 보안 사고를 방지하기 위해 다음 모범 사례를 준수해야 합니다:

  • 꼭 필요한 경우가 아니면 프로덕션 환경에서 sudo 사용을 피하십시오.
  • 새로운 non-root 사용자를 생성하고, Teleport를 테스트할 때는 테스트 인스턴스를 사용하십시오.
  • 필요한 경우가 아니면 Teleport의 서비스를 non-root 사용자로 실행하십시오. root 접근이 필요한 것은 SSH Service뿐입니다. Teleport가 1024보다 작은 번호의 포트(예: 443)에서 수신 대기하도록 하려면 root 권한(또는 CAP_NET_BIND_SERVICE 기능)이 필요하다는 점에 유의하십시오.
  • 최소 권한의 원칙을 따르십시오. 더 제한적인 역할로 충분한 경우 사용자에게 허용 범위가 넓은 역할을 부여하지 마십시오. 예를 들어, 모든 클러스터 리소스에 접근하고 편집할 수 있는 권한을 부여하는 내장 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에게 필요한 최소한의 권한으로 역할을 정의하고, 일시적으로 상승된 권한을 제공하기 위해 Access Request를 구성하십시오.
  • Teleport 리소스(예: 새 데이터베이스나 애플리케이션)를 등록할 때는 초대 토큰을 파일에 저장해야 합니다. 토큰을 명령줄에 직접 입력하면, 악의적인 사용자가 침해된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 사례가 문서에서 사용된 예시에 반드시 반영되어 있는 것은 아니라는 점에 유의하십시오. 문서의 예시는 주로 시연 및 개발 환경을 위한 것입니다.

Warning

영구적인 수정을 가하기 전에 프로덕션 인스턴스, 환경 및/또는 설정을 백업하는 것을 모범 사례로 권장합니다. 이렇게 하면 필요한 경우 기존 상태로 롤백할 수 있습니다.

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

PAM 모듈용 환경 변수 가져오기 및 설정하기#

Teleport는 PAM 모듈에 임의의 환경 변수를 설정하는 기능을 지원합니다. 이러한 변수는 {{ external.email }} 형태의 역할 스타일 SSO 클레임일 수도 있으며, 여기서 email은 구성된 SSO IdP(ID 공급자)가 발급하는 클레임입니다.

사용자 지정 환경 변수를 설정하려면 /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 **핸들(handle)**에서 PAM 환경 변수를 읽을 수 있습니다. 이러한 변수에는 다음이 포함됩니다:

  • TELEPORT_USERNAME: 노드에 로그인하는 사용자의 Teleport 사용자 이름입니다. Teleport Enterprise와 함께 SAML/OIDC 아이덴티티를 사용하는 경우 대개 이메일 주소(예: user@example.com)이며, 로컬 Teleport 사용자를 사용하는 경우 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: "Welcome to the cluster. All activity will be logged."

이 메시지는 tsh login 과정에서 표시되며, 사용자가 클러스터에 로그인할 수 있으려면 반드시 이를 확인해야 합니다.

$ tsh login --proxy teleport.example.com
# Welcome to the cluster. All activity will be logged.
# Press [ENTER] to continue.

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

전통적인 Unix /etc/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
# WARNING: All activity on this node is being recorded by Teleport

업데이트된 MOTD가 표시된 Teleport SSH

로그인 시 로컬 Unix 사용자 생성하기#

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

사용자가 아직 존재하지 않을 때 사용자를 생성하기 위해 PAM 스택을 사용하는 가장 쉬운 방법은 pam_exec.so를 사용하는 것입니다. pam_exec.so는 일반적으로 운영체제와 함께 제공됩니다. 아직 PAM 스택을 사용하고 있지 않다면, 대신 Teleport에 내장된 사용자 자동 프로비저닝 지원 기능을 사용할 수도 있습니다.

애플리케이션의 기존 PAM 스택에 pam_exec.so를 추가하거나 Teleport용으로 새로 작성할 수 있습니다. 이 예시에서는 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 기능(facility) 아래에 pam_motd.so가 포함되어 있다는 점에 주의하세요. pam_motd.so는 사용자 생성에 필요하지 않지만, Teleport가 작동하려면 accountsession 기능 모두에 적어도 하나의 모듈이 설정되어 있어야 합니다.

다음으로, pam_exec.so가 실행할 스크립트를 만듭니다.

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

$ mkdir -p /etc/pam-exec.d

/etc/pam-exec.d에 다음 내용으로 teleport_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 명령어의 경로는 사용 중인 Linux 배포판에 따라 위 예시와 다를 수 있습니다. 다음 명령어의 결과에 따라 사용 중인 특정 시스템에 맞게 조정하세요:

$ which useradd

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

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

이제 기존 사용자로 로그인을 시도하면 사용자가 생성되고 로그인에 성공하게 됩니다.

/etc/pam-exec.d/teleport_acct 스크립트는 사용자의 권한을 자동으로 채우기 위한 옵션으로 사용자의 그룹을 설정할 수 있습니다. 사용자의 역할은 공백으로 구분된 TELEPORT_ROLES 변수로 채워집니다. 이를 사용하여 추가 스크립팅으로 특정 sudo 그룹에 매핑할 수 있습니다.

인증 단계 추가하기#

PAM auth 모듈을 사용하면 사용자 로그인 과정에 인증 단계를 추가할 수 있습니다. 여기에는 비밀번호, 2차 인증 요소, 심지어 생체 인식까지 포함될 수 있습니다.

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

PAM(Pluggable Authentication Modules)으로 SSH 구성

Teleport v18.9
원문 보기
요약

Teleport의 SSH 서비스는 PAM(Pluggable Authentication Modules)과 통합되도록 구성할 수 있습니다. Teleport는 현재 auth, account, session PAM 모듈을 지원합니다.

Teleport의 SSH 서비스는 PAM(Pluggable Authentication Modules)과 통합되도록 구성할 수 있습니다. 이 페이지에서는 Teleport를 PAM과 통합하기 위해 사용할 수 있는 기능들을 설명합니다.

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

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

  • 사용자 정의 오늘의 메시지(Message of the Day, MOTD) 생성
  • 로그인 시 로컬 Unix 사용자 생성
  • 인증 단계 추가

Pluggable Authentication Modules 소개#

배경#

Pluggable Authentication Modules(PAM)는 1995년 Sun Microsystems가 Solaris용 범용 인증 프레임워크를 구현하면서 시작되었습니다. 이후 대부분의 GNU/Linux 배포판이 PAM을 채택했습니다.

$ man pam

PAM(Pluggable Authentication Modules) 라이브러리는 여러 공통 인증 관련 작업을 추상화하며, 이러한 작업을 다양한 방식으로 구현하는 동적 로드 모듈을 위한 프레임워크를 제공합니다.

용어#

PAM 용어에서, 사용자를 인증하기 위해 PAM을 사용하는 애플리케이션을 **서버(server)**라고 하며, 이는 구성 목적을 위해 서비스 이름으로 식별됩니다. 서비스 이름은 흔히(반드시는 아니지만) 프로그램 이름입니다.

인증을 요청하는 사용자는 **신청자(applicant)**라고 하며, 이들의 신원을 확인하고 요청된 자격 증명을 부여하는 역할을 맡는 사용자(대개 root)는 **중재자(arbitrator)**라고 합니다.

서버가 사용자를 인증하고 요청된 작업을 수행하기 위해 거치는 일련의 작업을 PAM **트랜잭션(transaction)**이라고 합니다. 서버가 요청된 작업을 수행하는 맥락을 **세션(session)**이라고 합니다.

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

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

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

프로덕션 보안 모범 사례

Teleport를 프로덕션 환경에서 실행할 때는 보안 사고를 방지하기 위해 다음 모범 사례를 준수해야 합니다:

  • 꼭 필요한 경우가 아니면 프로덕션 환경에서 sudo 사용을 피하십시오.
  • 새로운 non-root 사용자를 생성하고, Teleport를 테스트할 때는 테스트 인스턴스를 사용하십시오.
  • 필요한 경우가 아니면 Teleport의 서비스를 non-root 사용자로 실행하십시오. root 접근이 필요한 것은 SSH Service뿐입니다. Teleport가 1024보다 작은 번호의 포트(예: 443)에서 수신 대기하도록 하려면 root 권한(또는 CAP_NET_BIND_SERVICE 기능)이 필요하다는 점에 유의하십시오.
  • 최소 권한의 원칙을 따르십시오. 더 제한적인 역할로 충분한 경우 사용자에게 허용 범위가 넓은 역할을 부여하지 마십시오. 예를 들어, 모든 클러스터 리소스에 접근하고 편집할 수 있는 권한을 부여하는 내장 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에게 필요한 최소한의 권한으로 역할을 정의하고, 일시적으로 상승된 권한을 제공하기 위해 Access Request를 구성하십시오.
  • Teleport 리소스(예: 새 데이터베이스나 애플리케이션)를 등록할 때는 초대 토큰을 파일에 저장해야 합니다. 토큰을 명령줄에 직접 입력하면, 악의적인 사용자가 침해된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 사례가 문서에서 사용된 예시에 반드시 반영되어 있는 것은 아니라는 점에 유의하십시오. 문서의 예시는 주로 시연 및 개발 환경을 위한 것입니다.

Warning

영구적인 수정을 가하기 전에 프로덕션 인스턴스, 환경 및/또는 설정을 백업하는 것을 모범 사례로 권장합니다. 이렇게 하면 필요한 경우 기존 상태로 롤백할 수 있습니다.

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

PAM 모듈용 환경 변수 가져오기 및 설정하기#

Teleport는 PAM 모듈에 임의의 환경 변수를 설정하는 기능을 지원합니다. 이러한 변수는 {{ external.email }} 형태의 역할 스타일 SSO 클레임일 수도 있으며, 여기서 email은 구성된 SSO IdP(ID 공급자)가 발급하는 클레임입니다.

사용자 지정 환경 변수를 설정하려면 /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 **핸들(handle)**에서 PAM 환경 변수를 읽을 수 있습니다. 이러한 변수에는 다음이 포함됩니다:

  • TELEPORT_USERNAME: 노드에 로그인하는 사용자의 Teleport 사용자 이름입니다. Teleport Enterprise와 함께 SAML/OIDC 아이덴티티를 사용하는 경우 대개 이메일 주소(예: user@example.com)이며, 로컬 Teleport 사용자를 사용하는 경우 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: "Welcome to the cluster. All activity will be logged."

이 메시지는 tsh login 과정에서 표시되며, 사용자가 클러스터에 로그인할 수 있으려면 반드시 이를 확인해야 합니다.

$ tsh login --proxy teleport.example.com
# Welcome to the cluster. All activity will be logged.
# Press [ENTER] to continue.

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

전통적인 Unix /etc/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
# WARNING: All activity on this node is being recorded by Teleport

업데이트된 MOTD가 표시된 Teleport SSH

로그인 시 로컬 Unix 사용자 생성하기#

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

사용자가 아직 존재하지 않을 때 사용자를 생성하기 위해 PAM 스택을 사용하는 가장 쉬운 방법은 pam_exec.so를 사용하는 것입니다. pam_exec.so는 일반적으로 운영체제와 함께 제공됩니다. 아직 PAM 스택을 사용하고 있지 않다면, 대신 Teleport에 내장된 사용자 자동 프로비저닝 지원 기능을 사용할 수도 있습니다.

애플리케이션의 기존 PAM 스택에 pam_exec.so를 추가하거나 Teleport용으로 새로 작성할 수 있습니다. 이 예시에서는 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 기능(facility) 아래에 pam_motd.so가 포함되어 있다는 점에 주의하세요. pam_motd.so는 사용자 생성에 필요하지 않지만, Teleport가 작동하려면 accountsession 기능 모두에 적어도 하나의 모듈이 설정되어 있어야 합니다.

다음으로, pam_exec.so가 실행할 스크립트를 만듭니다.

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

$ mkdir -p /etc/pam-exec.d

/etc/pam-exec.d에 다음 내용으로 teleport_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 명령어의 경로는 사용 중인 Linux 배포판에 따라 위 예시와 다를 수 있습니다. 다음 명령어의 결과에 따라 사용 중인 특정 시스템에 맞게 조정하세요:

$ which useradd

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

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

이제 기존 사용자로 로그인을 시도하면 사용자가 생성되고 로그인에 성공하게 됩니다.

/etc/pam-exec.d/teleport_acct 스크립트는 사용자의 권한을 자동으로 채우기 위한 옵션으로 사용자의 그룹을 설정할 수 있습니다. 사용자의 역할은 공백으로 구분된 TELEPORT_ROLES 변수로 채워집니다. 이를 사용하여 추가 스크립팅으로 특정 sudo 그룹에 매핑할 수 있습니다.

인증 단계 추가하기#

PAM auth 모듈을 사용하면 사용자 로그인 과정에 인증 단계를 추가할 수 있습니다. 여기에는 비밀번호, 2차 인증 요소, 심지어 생체 인식까지 포함될 수 있습니다.

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