PAM(Pluggable Authentication Modules)으로 SSH 구성
Teleport의 SSH 서비스는 PAM(Pluggable Authentication Modules)과 통합되도록 구성할 수 있습니다. Teleport는 현재 auth, account, session PAM 모듈을 지원합니다.
Teleport의 SSH 서비스는 PAM(Pluggable Authentication Modules)과 통합되도록 구성할 수 있습니다.
Teleport는 현재 auth, account, session PAM 모듈을 지원합니다. auth 스택은 선택 사항이며 기본적으로 사용되지 않습니다.
PAM을 활용하는 몇 가지 사항:
- 사용자 정의 오늘의 메시지(MOTD) 생성
- 로그인 시 로컬 Unix 사용자 생성
- 추가 인증 단계 추가
Pluggable Authentication Modules 소개#
배경#
Pluggable Authentication Modules(PAM)은 1995년 Sun Microsystems가 Solaris에 대한 일반 인증 프레임워크를 구현한 때부터 시작되었습니다. 그 이후 대부분의 GNU/Linux 배포판이 PAM을 채택했습니다.
$ man pam
Pluggable Authentication Modules(PAM) 라이브러리는 여러 일반적인 인증 관련 작업을 추상화하고 이러한 작업을 다양한 방식으로 구현하는 동적으로 로드된 모듈을 위한 프레임워크를 제공합니다.
용어#
PAM 용어에서 사용자를 인증하는 데 PAM을 사용하는 애플리케이션을 서버라고 하며, 종종(항상은 아닌) 프로그램 이름인 서비스 이름으로 구성 목적으로 식별됩니다.
인증을 요청하는 사용자는 신청자라고 하고, 신원을 확인하고 요청된 자격 증명을 부여하는 사용자(보통 root)는 중재자라고 합니다.
서버가 사용자를 인증하고 요청한 작업을 수행하기 위한 작업 순서를 PAM 트랜잭션이라고 합니다. 서버가 요청된 작업을 수행하는 컨텍스트를 세션이라고 합니다.
PAM이 구현하는 기능은 인증, 계정 관리, 세션 관리, 비밀번호 관리의 네 가지 기능으로 나뉩니다.
Teleport는 현재 계정 관리와 세션 관리를 지원합니다.
Teleport를 실행하는 Linux 머신에서 PAM 설정#
Best practices for production security
When running Teleport in production, you should adhere to the following best practices to avoid security incidents:
- Avoid using
sudoin production environments unless it's necessary. - Create new, non-root, users and use test instances for experimenting with Teleport.
- Run Teleport's services as a non-root user unless required. Only the SSH
Service requires root access. Note that you will need root permissions (or
the
CAP_NET_BIND_SERVICEcapability) to make Teleport listen on a port numbered <1024(e.g.443). - Follow the principle of least privilege. Don't give users
permissive roles when more a restrictive role will do.
For example, don't assign users the built-in
access,editorroles, which give them permissions to access and edit all cluster resources. Instead, define roles with the minimum required permissions for each user and configure Access Requests to provide temporary elevated permissions. - When you enroll Teleport resources—for example, new databases or applications—you
should save the invitation token to a file.
If you enter the token directly on the command line, a malicious user could view
it by running the
historycommand on a compromised system.
You should note that these practices aren't necessarily reflected in the examples used in documentation. Examples in the documentation are primarily intended for demonstration and for development environments.
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 사용자 이름. 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

로그인 시 로컬 Unix 사용자 생성#
Teleport는 로그인 시 로컬 Unix 사용자를 생성할 수 있습니다. 이는 대규모 조직에서 즉석으로 로컬 사용자와 홈 디렉터리를 프로비저닝하려는 경우에 매우 유용합니다.
pam_exec.so를 사용하는 것은 사용자가 아직 존재하지 않는 경우 사용자를 생성하는 PAM 스택을 사용하는 가장 쉬운 방법입니다. pam_exec.so는 일반적으로 운영 체제와 함께 제공됩니다. 아직 PAM 스택을 사용하지 않는 경우 사용자를 자동으로 프로비저닝하는 Teleport의 내장 지원을 사용할 수 있습니다.
기존 PAM 스택에 pam_exec.so를 추가하거나 Teleport용으로 새 스택을 작성할 수 있습니다. 이 예시에서는 Teleport에서 pam_exec.so를 사용하는 방법을 단순화하기 위해 새 스택을 작성합니다.
다음 내용으로 /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
session 기능 아래에 pam_motd.so가 포함된 것에 주목하세요.
pam_motd.so는 사용자 생성에 필요하지 않지만, Teleport가 작동하려면
account와 session 기능 모두 아래에 하나 이상의 모듈이 설정되어 있어야 합니다.
다음으로, 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_USERNAME 및 TELEPORT_ROLES는 신원 정보를 기반으로 시스템을 다른 방식으로 변경할 수 있는 더 풍부한 스크립트를 작성하는 데 사용될 수 있습니다.
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 모듈을 사용하면 사용자 로그인 중에 인증 단계를 추가할 수 있습니다. 여기에는 비밀번호, 두 번째 인증 요소 또는 심지어 생체 인증이 포함될 수 있습니다.
Teleport는 인증서를 사용하여 강력한 SSH 인증을 기본으로 제공합니다. 대부분의 사용자에게는 초기 Teleport 인증(예: tsh login)을 강화하는 것이 선호됩니다.
기본적으로 기본 시스템 동작(일반적으로 로컬 Unix 비밀번호 사용)을 방지하기 위해 auth 모듈이 사용되지 않습니다. teleport.yaml의 pam 섹션에서 use_pam_auth를 설정하여 활성화할 수 있습니다.
ssh_service:
enabled: true
pam:
enabled: true
# /etc/pam.d/sshd 구성 사용(기본값)
service_name: "sshd"
# PAM 구성에서 "auth" 모듈 사용
use_pam_auth: true
