기술 가이드

LinOTP로 YubiKey 대량 등록하는 방법

5 min read 인증 업데이트됨 03 Oct 2025
LinOTP로 YubiKey 대량 등록 가이드
LinOTP로 YubiKey 대량 등록 가이드

개요

YubiKey는 기본적으로 Yubico 온라인 서비스와 인증할 수 있는 제조사 비밀을 포함해 출고됩니다. 그러나 많은 환경에서는 인증 비밀과 프로세스를 자체적으로 통제하려 하므로, YubiKey를 RFC 표준 HOTP 토큰으로 초기화하고 내부 서버(LinOTP)에 등록하는 방식이 선호됩니다.

한 줄 정의

  • YubiKey: 물리적 2단계 인증(OTP) 기기.
  • HOTP: HMAC 기반 일회용 비밀번호 알고리즘.
  • HMAC 키: 토큰이 OTP를 생성할 때 사용하는 비밀 키.
  • LinOTP: 리눅스 기반 오픈소스 인증 서버로 다양한 OTP 메커니즘을 지원.

LinOTP는 2.4.1(2011년 11월 공개)부터 YubiKey 대량 등록을 지원합니다(작성 시점 버전: 2.5.0). 이 가이드는 LinOTP에 YubiKey를 대량으로 등록해 운영 환경에서 사용하는 절차를 다룹니다.

사전 요구사항

  • LinOTP 서버가 설치되어 있고 관리자 계정이 구성되어 있어야 합니다.
  • YubiKey 개인화(personalization) 또는 키 쓰기 권한을 가진 콘솔 접근권한.
  • YubiKey를 HMAC/HOTP 모드로 초기화할 수 있는 도구(예: yubikey-personalization 도구 또는 Yubico의 python 모듈).
  • 관리자 권한으로 udev 규칙을 추가하여 일반 사용자에게 USB 접근 권한을 부여할 수 있어야 합니다.

중요: 직접 HMAC 키를 YubiKey에 쓰는 작업은 키 노출 위험을 수반합니다. 작업은 신뢰할 수 있는 네트워크/물리적 환경에서 수행하세요.

LinOTP 서버 설치 개요

LinOTP는 파이썬 기반 웹 애플리케이션입니다. 설치 방식은 크게 두 가지입니다.

  1. 패키지 매니저로 설치(권장)
    • Debian/Ubuntu용 deb 패키지가 제공됩니다. 레포지토리를 설정하면 apt로 설치할 수 있습니다. 최신 저장소 패키지는 작성 시점에 Ubuntu 12.04 LTS로 빌드된 적이 있습니다.
  2. 소스 또는 pip로 설치
    • PyPI에 공개되어 있으므로 pip나 easy_install로 설치할 수 있습니다.

설치 후 LinOTP 서버를 초기화하고, 관리자 계정과 사용자 저장소(userstore)를 구성해야 합니다.

LinOTP 관리 클라이언트 설치

LinOTP는 명령줄 기반의 오픈소스 관리 클라이언트를 제공합니다. 웹 UI로는 불가능한 작업을 지원하는 경우가 있어 대량 작업 시 유용합니다.

레포지토리를 설정한 경우:

apt-get install linotpadminclientce

pip로 설치하려면:

pip install linotpadminclientce

설치 후 linotpadm.py 명령으로 서버에 접속해 작업을 수행합니다.

USB 접근 권한 설정 (udev)

대부분의 일반 사용자 계정은 YubiKey에 HMAC 키를 쓰기 위한 USB 접근 권한이 없습니다. 운영자는 linotpadm을 루트로 실행하는 대신 udev 규칙을 추가하여 콘솔 사용자에게 접근 권한을 부여해야 합니다.

/etc/udev/rules.d/70-yubikey-enrollment.rules 파일을 생성합니다:

vi /etc/udev/rules.d/70-yubikey-enrollment.rules

다음 내용을 파일에 추가하세요:

# Udev rules for letting the console user access the Yubikey USB
# device node, needed for challenge/response to work correctly.
ACTION=="add|change", SUBSYSTEM=="usb", \
  ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0010|0110|0111", \
  TEST=="/var/run/ConsoleKit/database", \
  RUN+="udev-acl --action=$env{ACTION} --device=$env{DEVNAME}"

(위 규칙은 yubikey-personalization에서 차용된 예시입니다.)
주의: 파일 내용에 포함된 큰따옴표(\”)와 역슬래시(\)는 시스템에서 정확히 인식되어야 합니다. 규칙을 추가한 후 udev 서비스를 재시작하거나 시스템을 재부팅하여 적용하세요.

중요: udev 규칙으로 권한을 부여하면 콘솔에 로그인한 사용자가 기기에 접근할 수 있습니다. 접근 가능한 사용자 범위를 운영 정책에 따라 제한하세요.

YubiKey 일괄 등록(Enroll)

udev 권한이 설정되고 linotpadm 클라이언트가 준비되면 대량 등록을 진행합니다. 기본 명령 예시는 다음과 같습니다:

% linotpadm.py -U https://localhost -a admin -C yubikey_mass_enroll

명령 실행 흐름 예시 출력:

Please enter password for ‘admin’:
Please insert the next yubikey and press enter (x=Exit):
{ u’status’: True, u’value’: True}
Please insert the next yubikey and press enter (x=Exit): x

설명: linotpadm.py는 YubiKey의 시리얼 번호를 읽어 LinOTP 토큰 데이터베이스에 해당 토큰을 등록합니다. 토큰의 유형은 YubiKey임을 식별하기 위해 시리얼 접두사(예: YUBI123456)를 사용합니다. 여러 YubiKey를 순서대로 삽입하고 엔터를 눌러 계속 등록할 수 있으며, 완료 시 ‘x’를 입력해 종료합니다.

등록 이후 작업

  • 시리얼 번호 확인: YubiKey 뒷면에 프린트된 시리얼과 LinOTP의 토큰 레코드를 대조하세요.
  • 사용자 할당: 각 토큰을 사용자 계정에 할당합니다. LinOTP의 사용자 매핑 정책에 따라 자동/수동 배포가 가능합니다.
  • 테스트 인증: 등록된 YubiKey로 HOTP 흐름이 정상 동작하는지 테스트하세요(예: challenge/response 또는 HOTP 코드 생성과 검증).

검증 및 테스트 케이스

간단한 테스트 사례:

  1. 등록 후 LinOTP에서 해당 토큰이 보이는지 확인한다.
  2. YubiKey로 HOTP 값을 생성하여 LinOTP에 제출해 인증 성공을 확인한다.
  3. 잘못된 키 또는 시리얼로 인증 시 실패하는지 확인한다.

수용 기준:

  • 모든 등록된 YubiKey가 LinOTP 토큰 목록에 정확한 시리얼로 존재해야 한다.
  • 정상 토큰으로 인증 성공, 미등록/변조된 토큰으로 인증 실패.

문제 해결(트러블슈팅)

  • linotpadm이 YubiKey 시리얼을 읽지 못함: udev 규칙이 제대로 적용되었는지, 사용자가 콘솔 세션에서 로그인되어 있는지 확인하세요.
  • 권한 오류: /var/log/syslog 또는 dmesg에서 udev 관련 로그를 확인하세요.
  • 여러 기기 인식 문제: 다른 USB 허브나 포트로 시도하고, 필요시 물리적 재연결을 수행하세요.

보안 고려사항

  • 키 생성/쓰기 환경: HMAC 키를 YubiKey에 쓰는 작업은 신뢰할 수 있는 오프라인 또는 내부 네트워크에서 수행하는 것이 좋습니다.
  • 로그 보안: 인증 로그에 민감한 정보가 남지 않도록 주의하세요. LinOTP 로그나 운영 스크립트에 비밀 키가 노출되어서는 안 됩니다.
  • 토큰 회수 정책: 분실·도난 시의 토큰 폐기 및 재발급 프로세스를 정의하세요.

대안 및 확장

  • YubiKey Personalization 도구: Yubico에서 제공하는 공식 도구를 사용해 키를 초기화하고 LinOTP에 수동으로 등록할 수 있습니다.
  • 다른 OTP 솔루션: TOTP 기반 배포(예: Google Authenticator 호환)나 하드웨어 공급업체 대체를 고려할 수 있습니다.
  • 자동화: 대량 등록 시 시리얼 및 사용자 매핑 CSV를 사용해 스크립트로 자동화할 수 있습니다(운영 정책에 맞게 보안 조치 필수).

역할별 체크리스트

관리자(설계):

  • LinOTP 아키텍처 및 사용자 저장소 설계.
  • 보안 정책(토큰 수명, 재발급, 로그 보관) 정의.

운영자(등록 담당):

  • udev 규칙 적용 및 권한 확인.
  • linotpadm을 이용한 대량 등록 수행 및 검증.
  • 등록 결과를 사용자 목록과 대조.

감사자(보안 준수):

  • 토큰 생성·배포 프로세스의 감사 로그 유지 확인.
  • 토큰 폐기·교체 절차 테스트.

검증 체크리스트(간단)

  • udev 규칙 파일이 /etc/udev/rules.d/에 존재하는가?
  • linotpadminclientce가 설치되어 있는가?
  • 모든 YubiKey가 LinOTP에 시리얼로 등록되었는가?
  • 등록된 YubiKey로 인증에 성공하는가?

요약

LinOTP를 이용한 YubiKey 대량 등록은 중앙에서 비밀 키를 관리하고 자체 인증 인프라로 운영하려는 조직에 적합합니다. 작업 흐름은 LinOTP 서버와 admin 클라이언트 준비, udev를 통한 USB 권한 설정, linotpadm의 yubikey_mass_enroll 명령 실행, 검증으로 구성됩니다. 운영 시 보안과 권한 관리를 엄격히 하고, 분실·재발급 정책을 명확히 하세요.

중요: 프로덕션에 배포하기 전에 테스트 환경에서 전체 프로세스를 검증하고, 모든 운영 스텝에 대한 문서와 책임자를 지정하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

아이폰 비밀번호 없이 잠금 해제하는 방법 — 단계별 가이드
모바일

아이폰 비밀번호 없이 잠금 해제하는 방법 — 단계별 가이드

스냅챗 계정 재활성화 가이드
가이드

스냅챗 계정 재활성화 가이드

Instagram에서 좋아요한 게시물 확인하는 법
제품 사용법

Instagram에서 좋아요한 게시물 확인하는 법

Firefox AI 탭 그룹화 CPU 급증 해결 가이드
브라우저

Firefox AI 탭 그룹화 CPU 급증 해결 가이드

LinOTP로 YubiKey 대량 등록 가이드
인증

LinOTP로 YubiKey 대량 등록 가이드

Windows AppData 폴더: 위치·역할·안전한 정리
Windows

Windows AppData 폴더: 위치·역할·안전한 정리