Infograb logo
텔레포트 구성하여 호스트 사용자 생성하기

텔레포트의 SSH 서비스는 로그인 시 로컬 Unix 사용자를 자동으로 생성하도록 구성할 수 있습니다.

이렇게 하면 조직의 각 구성원에 대해 사용자를 수동으로 생성할 필요가 없어지고, 주어진 호스트에서 권한에 대한 보다 세밀한 제어가 가능합니다. 텔레포트에서 생성된 호스트 사용자는 임시이며 SSH 세션 종료 시 삭제됩니다.

전제 조건

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • 텔레포트에 등록된 리눅스 서버가 실행되고 있어야 합니다. 서버를 텔레포트 클러스터에 추가하는 방법에 대한 서버 액세스 시작 가이드를 참조하세요. 이 가이드의 목적을 위해서는 지침에 익숙해질 때까지 데모 환경에서 실행 중인 서버를 등록하는 것이 좋습니다.
  • 텔레포트 SSH 서비스에서 임시 사용자를 생성하기 위해서는 다음 유틸리티가 PATH에 있어야 합니다:
    • useradd
    • userdel
    • usermod
    • groupadd
    • getent
    • visudo
  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

1단계/3단계. RBAC 구성

이 섹션에서는 호스트 사용자 생성을 가능하게 하는 텔레포트 역할을 구성합니다.

텔레포트 사용자가 SSH 서비스 인스턴스에 접근할 때, 텔레포트는 인스턴스와 일치하는 사용자의 역할을 확인합니다. 인스턴스와 일치하는 역할이 하나 이상 있지만 create_host_user_mode를 설정하지 않으면 자동 사용자 생성이 비활성화됩니다. 서버와 일치하지 않는 역할은 확인되지 않습니다.

호스트 사용자 생성을 활성화하기 위해서는 다음을 수행해야 합니다:

  • 서버에 라벨을 지정하여 호스트 사용자 생성을 허용하는 텔레포트 역할과 일치시킵니다.
  • 추가한 라벨이 있는 서버에 대해 호스트 사용자 생성을 허용하는 역할을 생성합니다.
  • 이 가이드의 목적을 위해 생성한 역할만 있는 텔레포트 사용자를 생성합니다.

서버 라벨 지정

  1. 이 가이드를 시작하기 전에 텔레포트에 등록한 서버에 접근하고, 기본적으로 /etc/teleport.yaml인 텔레포트 구성 파일을 엽니다.

  2. 구성 파일에 다음과 같은 변경을 적용합니다:

      labels:
    +   app: "nginx"
    
  3. 서버에서 텔레포트를 재시작합니다.

텔레포트 역할 정의

다음 역할 사양은 사용자가 일치하는 서버에서 nginxrestarter로 로그인할 수 있도록 허용합니다. 이 내용을 auto-users.yaml이라는 파일에 추가하세요:

kind: role
version: v5
metadata:
  name: auto-users
spec:
  options:
    # 사용자 자동 생성을 허용합니다.
    create_host_user_mode: keep
  allow:
    logins: [ "nginxrestarter" ]
    # 생성된 사용자가 추가될 호스트 그룹 목록입니다. 존재하지 않는 경우 생성됩니다.
    host_groups: [ubuntu, nginx, other]
    # /etc/sudoers.d에 생성되는 임시 sudoers 파일에 포함될 항목 목록입니다.
    host_sudoers: [
       # 이 줄은 `nginxrestarter` 사용자가
       # root로서 비밀번호 요구 없이
       # `systemctl restart nginx.service`를 실행할 수 있게 합니다.
       # 이 경우 sudoers 항목은 `nginxrestarter`로 접두사가 붙습니다.
       # sudoers 파일 참조 문서: https://www.sudo.ws/docs/man/1.8.17/sudoers.man/
       "ALL = (root) NOPASSWD: /usr/bin/systemctl restart nginx.service"
    ]
    node_labels:
      "app": "nginx"

create_host_user_mode 필드는 값이 keep일 때 호스트 사용자 생성을 허용합니다. auto-users 역할을 가진 사용자가 app:nginx 라벨과 일치하는 서버에 로그인하면, 텔레포트 SSH 서비스는 호스트 사용자를 생성하고, host_groups에 나열된 그룹에 추가하며, host_sudoers 필드에 지정된 sudoer 권한을 부여합니다. 이 경우, 새로운 사용자는 root로 Nginx 서비스를 재시작할 수 있는 권한을 받습니다.

logins 필드의 각 값은 사용 중인 리눅스 배포판의 사용자 이름 요구 사항을 준수해야 합니다. 일반 배포판에 대한 요구 사항은 사용자/그룹 이름 구문을 참조하세요.

여러 역할에 host_sudoers 항목이 포함된 경우 sudoers 파일에는 역할 이름에 따라 순서가 지정된 항목이 작성됩니다.

역할에 deny 규칙이 포함되어 있으며 host_sudoers'*'로 설정하면, 사용자가 일치하는 노드에 접근할 때 모든 sudoers 항목이 제거됩니다. 그렇지 않으면 deny 규칙은 필터링 시 문자 그대로 매칭됩니다:

kind: role
version: v5
metadata:
  name: auto-users
spec:
  options:
    create_host_user_mode: keep
  deny:
    host_sudoers: [
       "*" # 이 역할의 사용자는 일치하는 노드에서 sudoers 파일이 생성되지 않습니다.
       "ALL=(ALL) NOPASSWD: ALL" # 이 항목과 일치하는 host_sudoers 항목은 필터링됩니다.
    ]
    node_labels:
      "app": "nginx"

서버가 자동으로 임시 Unix 사용자를 생성하는 것을 절대 허용하지 않으려면 노드의 구성에서 disable_create_host_usertrue로 설정할 수 있습니다:

# teleport.yaml
teleport:
  nodename: node
ssh_service:
  enabled: true
  # 이 노드에서 자동 호스트 사용자 생성을 비활성화합니다. 역할 권한과 관계없이.
  disable_create_host_user: true

보안이 낮은 환경에서는 create_host_user_modeinsecure-drop으로 설정하여 사용자가 세션 종료 후 삭제되도록 할 수도 있습니다. 그러나 이 모드에서는 생성된 사용자와 이전에 삭제된 사용자가 동일한 UID를 가질 수 있어, 사용자가 이전 사용자의 파일에 접근할 수 있게 됩니다. 사용자를 삭제할 필요가 없으면 keep 모드를 사용하세요.

역할을 생성합니다:

tctl create -f auto-users.yaml

역할 'auto-users'가 생성되었습니다.

텔레포트 사용자 생성

  1. 다음 명령을 실행하여 auto-users 역할을 가진 텔레포트 사용자를 생성합니다:

    tctl users add demo-user --roles=auto-users --logins=nginxrestarter
  2. 텔레포트 웹 UI에 방문하여 사용자를 생성하기 위한 터미널의 지침을 따르세요.

2단계/3단계. [선택 사항] 생성된 사용자에 대한 UID 및 GID 구성

사용자에게 host_user_uidhost_user_gid 특성이 지정된 경우, 호스트 사용자가 생성될 때 UID 및 GID가 해당 값으로 설정됩니다.

이 값은 tctl을 통해 사용자를 생성하거나 업데이트할 때 수동으로 설정하거나 동일한 이름의 SSO 속성을 통해 설정할 수 있습니다.

지정된 GID를 가진 그룹이 아직 존재하지 않는 경우, 생성 중인 사용자와 동일한 로그인 이름의 그룹이 생성됩니다.

kind: user
metadata:
  name: demo-user
spec:
  ...
  traits:
    logins:
    - nginxrestarter
    host_user_gid:
    # gid와 uid 값은 따옴표로 감싸야 합니다.
    - "1234"
    host_user_uid:
    - "5678"
Warning

host_user_uid 또는 host_user_gid에 여러 항목이 지정되면 첫 번째 항목만 사용됩니다.

3단계/3단계 호스트 사용자 생성 테스트

원격 노드에 tsh로 연결하고 호스트 사용자 생성이 활성화된 경우, 텔레포트 SSH 서비스는 호스트에 사용자를 자동으로 생성합니다:

tsh login
tsh ssh nginxrestarter@develnode
grep "nginxrestarter" /etc/passwd

nginxrestarter:x:1001:1003::/home/nginxrestarter:/bin/bash

grep "other" /etc/group

other:x:1002:nginxrestarter

exit
tsh ssh admin@develnode # 로그아웃 후 사용자가 삭제되었는지 확인
grep "nginxrestarter" /etc/passwd
echo $?

1

위 사용자가 로그인하면 nginxrestarter 사용자와 존재하지 않는 그룹이 호스트에서 생성됩니다. nginxrestarter 사용자는 host_groups 필드에 지정된 대로 ubuntu, nginx, other 그룹에 추가됩니다.

텔레포트 SSH 서비스는 useradd를 실행하여 호스트에 새로운 사용자를 생성하며, useradd 바이너리를 찾을 수 없는 경우 오류를 반환합니다. useradd 명령은 텔레포트 사용자의 역할에 지정된 그룹에 사용자를 추가하고, 텔레포트는 별도로 새로운 호스트 사용자 이름의 새 홈 디렉토리를 생성합니다.

SSH 서비스는 useradd --no-create-home --home-dir <home> <username> --groups <groups> --uid <uid> --gid <gid> 를 실행하여 사용자를 추가하며, 모든 다른 옵션은 시스템 기본값을 사용합니다. 예를 들어, 사용자가 호스트의 기본 로그인 셸과 연결되며, 이는 /etc/default/useraddSHELL 필드를 설정하여 지정할 수 있습니다. 시스템의 기본 동작에 대한 전체 설명은 useradd 매뉴얼을 참조하세요.

텔레포트 SSH 서비스는 /etc/sudoers.dhost_sudoers 파일의 내용을 각 항목이 로그인한 사용자의 이름으로 접두사가 붙여서 한 줄씩 작성합니다.

세션은 일반적으로 진행될 수 있습니다. SSH 세션이 종료되면 사용자와 그들의 홈 디렉토리는 머신에 남아 있습니다. create_host_user_mode를 역할 정의에서 insecure-drop으로 설정하면 사용자를 제거할 수 있습니다. 그러나 사용자 ID가 시스템에서 재사용될 가능성은 여러 가지 잠재적인 보안 위험을 초래하므로, 특정한 필요가 없고 그 잠재적 영향을 이해하지 않는 한 keep 모드를 사용하는 것을 권장합니다.

텔레포트 SSH 인스턴스가 세션이 진행 중일 때 재시작되면, 사용자는 다음 텔레포트 재시작 시 정리됩니다.

관리되지 않는 사용자 마이그레이션

create_host_user_mode: keepv14.3.24, v15.4.16, 및 v16.1.8 이전에 생성된 호스트 사용자는 이후 버전의 텔레포트에서 관리되지 않습니다. 이러한 사용자를 다음 세션에 자동으로 마이그레이션하려면 역할의 host_groupsteleport-keep를 추가할 수 있습니다. 호스트에서 마이그레이션하고자 하는 사용자들을 teleport-keep 그룹에 직접 추가해 수동으로 마이그레이션할 수도 있습니다.

다음 단계

Teleport 원문 보기