텔레포트의 SSH 서비스는 로그인 시 로컬 Unix 사용자를 자동으로 생성하도록 구성할 수 있습니다.
이렇게 하면 조직의 각 구성원에 대해 사용자를 수동으로 생성할 필요가 없어지고, 주어진 호스트에서 권한에 대한 보다 세밀한 제어가 가능합니다. 텔레포트에서 생성된 호스트 사용자는 임시이며 SSH 세션 종료 시 삭제됩니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- 텔레포트에 등록된 리눅스 서버가 실행되고 있어야 합니다. 서버를 텔레포트 클러스터에 추가하는 방법에 대한 서버 액세스 시작 가이드를 참조하세요. 이 가이드의 목적을 위해서는 지침에 익숙해질 때까지 데모 환경에서 실행 중인 서버를 등록하는 것이 좋습니다.
- 텔레포트 SSH 서비스에서 임시 사용자를 생성하기 위해서는 다음 유틸리티가 PATH에 있어야 합니다:
useradd
userdel
usermod
groupadd
getent
visudo
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1단계/3단계. RBAC 구성
이 섹션에서는 호스트 사용자 생성을 가능하게 하는 텔레포트 역할을 구성합니다.
텔레포트 사용자가 SSH 서비스 인스턴스에 접근할 때, 텔레포트는 인스턴스와 일치하는 사용자의 역할을 확인합니다. 인스턴스와 일치하는 역할이 하나 이상 있지만 create_host_user_mode
를 설정하지 않으면 자동 사용자 생성이 비활성화됩니다. 서버와 일치하지 않는 역할은 확인되지 않습니다.
호스트 사용자 생성을 활성화하기 위해서는 다음을 수행해야 합니다:
- 서버에 라벨을 지정하여 호스트 사용자 생성을 허용하는 텔레포트 역할과 일치시킵니다.
- 추가한 라벨이 있는 서버에 대해 호스트 사용자 생성을 허용하는 역할을 생성합니다.
- 이 가이드의 목적을 위해 생성한 역할만 있는 텔레포트 사용자를 생성합니다.
서버 라벨 지정
-
이 가이드를 시작하기 전에 텔레포트에 등록한 서버에 접근하고, 기본적으로
/etc/teleport.yaml
인 텔레포트 구성 파일을 엽니다. -
구성 파일에 다음과 같은 변경을 적용합니다:
labels: + app: "nginx"
-
서버에서 텔레포트를 재시작합니다.
텔레포트 역할 정의
다음 역할 사양은 사용자가 일치하는 서버에서 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_user
를 true
로 설정할 수 있습니다:
# teleport.yaml
teleport:
nodename: node
ssh_service:
enabled: true
# 이 노드에서 자동 호스트 사용자 생성을 비활성화합니다. 역할 권한과 관계없이.
disable_create_host_user: true
보안이 낮은 환경에서는 create_host_user_mode
를 insecure-drop
으로 설정하여 사용자가 세션 종료 후 삭제되도록 할 수도 있습니다. 그러나 이 모드에서는 생성된 사용자와 이전에 삭제된 사용자가 동일한 UID를 가질 수 있어, 사용자가 이전 사용자의 파일에 접근할 수 있게 됩니다. 사용자를 삭제할 필요가 없으면 keep
모드를 사용하세요.
역할을 생성합니다:
tctl create -f auto-users.yaml역할 'auto-users'가 생성되었습니다.
텔레포트 사용자 생성
-
다음 명령을 실행하여
auto-users
역할을 가진 텔레포트 사용자를 생성합니다:tctl users add demo-user --roles=auto-users --logins=nginxrestarter -
텔레포트 웹 UI에 방문하여 사용자를 생성하기 위한 터미널의 지침을 따르세요.
2단계/3단계. [선택 사항] 생성된 사용자에 대한 UID 및 GID 구성
사용자에게 host_user_uid
및 host_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"
host_user_uid
또는 host_user_gid
에 여러 항목이 지정되면 첫 번째 항목만 사용됩니다.
3단계/3단계 호스트 사용자 생성 테스트
원격 노드에 tsh
로 연결하고 호스트 사용자 생성이 활성화된 경우, 텔레포트 SSH 서비스는 호스트에 사용자를 자동으로 생성합니다:
tsh logintsh ssh nginxrestarter@develnodegrep "nginxrestarter" /etc/passwdnginxrestarter:x:1001:1003::/home/nginxrestarter:/bin/bash
grep "other" /etc/groupother:x:1002:nginxrestarter
exittsh ssh admin@develnode # 로그아웃 후 사용자가 삭제되었는지 확인grep "nginxrestarter" /etc/passwdecho $?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/useradd
의 SHELL
필드를 설정하여 지정할 수 있습니다. 시스템의 기본 동작에 대한 전체 설명은 useradd
매뉴얼을 참조하세요.
텔레포트 SSH 서비스는 /etc/sudoers.d
에 host_sudoers
파일의 내용을 각 항목이 로그인한 사용자의 이름으로 접두사가 붙여서 한 줄씩 작성합니다.
세션은 일반적으로 진행될 수 있습니다. SSH 세션이 종료되면 사용자와 그들의 홈 디렉토리는 머신에 남아 있습니다. create_host_user_mode
를 역할 정의에서 insecure-drop
으로 설정하면 사용자를 제거할 수 있습니다. 그러나 사용자 ID가 시스템에서 재사용될 가능성은 여러 가지 잠재적인 보안 위험을 초래하므로, 특정한 필요가 없고 그 잠재적 영향을 이해하지 않는 한 keep
모드를 사용하는 것을 권장합니다.
텔레포트 SSH 인스턴스가 세션이 진행 중일 때 재시작되면, 사용자는 다음 텔레포트 재시작 시 정리됩니다.
관리되지 않는 사용자 마이그레이션
create_host_user_mode: keep
로 v14.3.24
, v15.4.16
, 및 v16.1.8
이전에 생성된 호스트 사용자는 이후 버전의 텔레포트에서 관리되지 않습니다. 이러한 사용자를 다음 세션에 자동으로 마이그레이션하려면 역할의 host_groups
에 teleport-keep
를 추가할 수 있습니다. 호스트에서 마이그레이션하고자 하는 사용자들을 teleport-keep
그룹에 직접 추가해 수동으로 마이그레이션할 수도 있습니다.
다음 단계
- 데이터베이스 액세스에 대한 자동 사용자 프로비저닝 구성.
- 데스크탑 액세스에 대한 자동 사용자 프로비저닝 구성.