Yubico PAM 모듈은 YubiKey를 기존 사용자 인증 인프라에 통합하는 쉬운 방법을 제공합니다. PAM은 사용자 인증을 위해 GNU/Linux, Solaris 및 Mac OS X와 NCSA MyProxy와 같은 기타 특수 응용 프로그램에서 사용됩니다.
이 모듈은 다중 사용자 시스템에서 작동합니다. 기본 작업 모드는 YubiKey 검증 서비스(예: YubiCloud 또는 'urllist' 매개변수를 사용하여 구성된 개인 서비스)를 사용하여 온라인 검증을 수행하는 것입니다.
버전 2.6에서는 YubiKey 2.2 이상에 있는 HMAC-SHA1 Challenge-Response를 사용하여 오프라인 검증도 가능해졌습니다. 이로 인해 ykpersonalize 패키지에서 libykpers-1의 종속성이 도입되었습니다. 이 종속성을 방지하려면 --without-cr
전달하여 configure
하세요.
개발 커뮤니티는 GitHub 프로젝트 페이지를 통해 조정됩니다.
이 프로젝트는 BSD 라이선스에 따라 라이선스가 부여됩니다. 정확한 표현은 COPYING 파일을 참조하세요. 이 패키지에서 YYYY-ZZZZ로 지정된 저작권 연도 범위의 경우 범위는 해당 닫힌 간격의 모든 단일 연도를 지정합니다.
공식 패키지 버전을 사용하는 경우 다음 섹션으로 건너뛰세요.
다음 명령을 사용하여 Git을 사용하여 소스를 확인할 수 있습니다.
$ 자식 클론 https://github.com/Yubico/yubico-pam.git
그러면 yubico-pam
디렉토리가 생성됩니다.
컴파일 가능한 소스 트리를 생성하려면 Autoconf, automake, libtool, asciidoc, xsltproc 및 docbook-xsl을 설치해야 합니다.
다음을 사용하여 빌드 시스템을 생성합니다.
$ cd 유비코팜 $ autoreconf --설치
libykclient(ykclient.h, libykclient.so) 및 libpam-dev(security/pam_appl.h, libpam.so)가 설치되어 있어야 합니다. 차례로 설치해야 하는 cURL과 libyubikey가 필요합니다.
Challenge-Response 오프라인 인증에는 yubikey-personalization 프로젝트의 libykpers-1이 필요합니다.
자체 테스트에는 Net::LDAP::Server 모듈이 설치된 Perl이 필요합니다.
빌드 시스템은 Autoconf를 사용하여 빌드 시스템 실행을 설정합니다.
./구성
--without-ldap을 사용하여 LDAP 지원을 비활성화합니다.
그런 다음 코드를 빌드하고 자체 테스트를 실행한 후 바이너리를 설치합니다.
확인 설치
Fedora/EPEL에는 yum을 사용하여 설치할 수 있는 yubico-pam 패키지가 이미 있습니다.
$ sudo yum 설치 pam_yubico
합리적으로 현대적인 Ubuntu 플랫폼에 다음 명령을 사용하여 설치할 수 있는 yubico-pam용 Ubuntu PPA(Personal Package Archive)가 있습니다.
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get 업데이트 $ sudo apt-get 설치 libpam-yubico
설치 후 /usr/share/doc/libpam-yubico/README.Debian
파일을 참조하세요.
yubico-pam 및 지원 Yubico 패키지에는 해당 FreeBSD 포트가 있습니다. 설치하려면:
$ cd /usr/ports/security/pam_yubico $ 설치를 깨끗하게 만듭니다
여기에서 고급 구성 참고 사항을 확인할 수 있습니다.
/etc/pam.d/
의 적절한 파일에 한 줄을 추가하여 PAM 설정에 설치하세요.
충분한 인증 pam_yubico.so id=[귀하의 API 클라이언트 ID] 디버그
pam_yubico.so를 /lib/security/(또는 PAM 모듈이 시스템에 있는 위치)로 이동합니다.
mv /usr/local/lib/security/pam_yubico.so /lib/security/
자세한 내용은 프로젝트 설명서를 참조하세요.
지원되는 PAM 모듈 매개변수는 다음과 같습니다.
인증 파일 | YubiKey 토큰 ID와 사용자 이름의 매핑을 보유하는 파일의 위치를 나타냅니다. |
ID | Yubico 검증 서버의 API 클라이언트 ID입니다. 기본 YubiCloud 서비스를 사용하려면 여기로 이동하세요. |
열쇠 | 클라이언트 키를 base64 형식으로 표시합니다. 클라이언트 키는 API 키라고도 하며 클라이언트(귀하)와 유효성 검사 서버 간의 통신에 무결성을 제공합니다. 기본 YubiCloud 서비스와 함께 사용할 서비스를 얻으려면 여기로 이동하세요. |
디버그 | 디버그 출력을 활성화합니다. |
debug_file | 디버그를 작성할 파일 이름은 파일이 존재하고 일반 파일이어야 합니다. 표준 출력이 기본값입니다. |
항상 좋아 | 모든 인증 시도가 성공할 수 있도록 합니다(프레젠테이션 모드라고도 함). |
try_first_pass | 사용자에게 비밀번호를 묻는 메시지를 표시하기 전에 모듈은 이 모듈도 만족하는 경우 먼저 이전 스택 모듈의 비밀번호를 시도합니다. |
use_first_pass | use_first_pass 인수는 모듈이 이전에 스택된 모듈 비밀번호를 사용하도록 강제하고 사용자에게 메시지를 표시하지 않습니다. 사용 가능한 비밀번호가 없거나 비밀번호가 적절하지 않은 경우 사용자의 액세스가 거부됩니다. |
항상 프롬프트 | 설정된 경우 사용자에게 YubiKey가 구성되어 있는지 확인하기 위해 조회를 시도하지 말고 대신 무슨 일이 있어도 이를 묻는 메시지를 표시합니다. 이는 ldap_bind_as_user가 활성화되어 있지만 이 모듈이 사용자 비밀번호를 읽는 데 사용되는 경우에 유용합니다(YubiKey+OTP 인증 시나리오에서). |
널록 | 설정된 경우 인증 매핑 파일이나 LDAP에서 사용자에 대해 선언된 토큰이 없을 때 실패하지 않습니다. 사용자에게 연결된 토큰이 없으면 YubiKey 인증을 선택 사항으로 만드는 데 사용할 수 있습니다. |
ldap_starttls | 설정된 경우 바인딩을 시도하기 전에 LDAP 연결에 대해 STARTTLS 명령을 실행하십시오. 이는 포트 389에서만 수신 대기하지만 여전히 TLS가 필요한 서버에 대한 일반적인 설정입니다. |
ldap_bind_as_user | 설정된 경우 로그인하는 사용자를 사용하여 LDAP에 바인딩합니다. 이는 PAM을 통해 사용자가 제공한 비밀번호를 사용합니다. 이것이 설정되면 ldapdn 및 uid_attr도 설정되어야 합니다. 이 기능을 활성화하면 'ldap_bind_user' 및 'ldap_bind_password'가 무시됩니다. |
URL 목록 | 사용할 URL 템플릿 목록입니다. 이는 ykclient_set_url_bases를 호출하여 설정됩니다. 목록은 |
URL | 이 옵션은 사용해서는 안 됩니다. 대신 urllist 옵션을 사용하십시오. 사용할 URL 템플릿을 지정하세요. 이는 yubikey_client_set_url_template을 호출하여 설정되며 기본값은 |
카파스 | X509 인증서가 저장되는 경로를 지정합니다. 이는 'url' 및 'ldap_uri'에 각각 'https' 또는 'ldaps'가 사용되는 경우에 필요합니다. |
카인포 | 경로 대신 CA 번들 사용을 허용하는 옵션입니다. |
대리 | 유효성 검사 서버에 연결할 프록시를 지정합니다. 유효한 구성표는 http://, https://, 양말4://, 양말4a://, 양말5:// 또는 양말5h://입니다. Socks5h는 프록시에게 DNS 확인을 수행하도록 요청합니다. 구성표나 포트가 지정되지 않은 경우 HTTP 프록시 포트 1080이 사용됩니다. |
verbose_otp | 이 인수는 입력 시 OTP(일회용 비밀번호)를 표시하는 데 사용됩니다. 즉, 입력한 문자의 터미널 에코를 활성화하는 데 사용됩니다. 이중 인증을 사용하는 경우 화면에 비밀번호가 표시되므로 이 기능을 사용하지 않는 것이 좋습니다. 이를 위해서는 사용자 정의 필드를 표시하기 위해 PAM 모듈을 사용하는 서비스가 필요합니다. 이 옵션은 OpenSSH와 함께 사용할 수 없습니다. |
ldap_uri | LDAP 서버 URI(예: ldap://localhost)를 지정합니다. |
LDAP서버 | LDAP 서버 호스트를 지정합니다(기본 LDAP 포트가 사용됨). 더 이상 사용되지 않습니다. 대신 "ldap_uri"를 사용하세요. |
LDAPDN | 사용자가 저장된 DNS를 지정합니다(예: ou=users,dc=domain,dc=com). |
ldap_clientcertfile | LDAP 서버와 통신할 때 사용할 클라이언트 인증서 파일의 경로입니다. 이를 위해서는 'ldap_clientkeyfile'도 설정해야 합니다. |
ldap_clientkey파일 | LDAP 서버와 통신할 때 클라이언트 인증서와 함께 사용할 키의 경로입니다. 이를 위해서는 'ldap_clientcertfile'도 설정해야 합니다. |
ldap_bind_user | LDAP 바인딩을 시도할 사용자입니다. |
ldap_bind_password | LDAP 바인드에 사용할 비밀번호입니다. |
LDAP_필터 | LDAP에서 올바른 개체를 찾으려고 시도하는 데 사용할 LDAP 필터입니다. 이 문자열에서 |
ldap_cacert파일 | LDAP 연결을 위한 CA 인증서 파일입니다. |
user_attr | 사용자 이름(예:cn)을 저장하는 데 사용되는 LDAP 속성을 지정합니다. |
yubi_attr | YubiKey ID를 저장하는 데 사용되는 LDAP 속성을 지정합니다. |
yubi_attr_prefix | 여러 유형의 ID를 저장하는 데 사용되는 일반 속성의 경우 LDAP 속성 값의 접두사를 지정합니다. |
토큰_ID_길이 | OTP 앞에 붙는 ID의 길이입니다(YubiCloud를 사용하는 경우 12입니다). |
방법 | 작동 모드. YubiCloud와 같은 YubiKey 검증 서비스를 통해 온라인 검증을 위해 "클라이언트"를 사용하거나 HMAC-SHA-1 Challenge-Response 구성과 함께 YubiKeys를 사용하여 오프라인 검증을 위해 "challenge-response"를 사용하세요. 오프라인 Challenge-Response 검증을 구성하는 방법에 대한 자세한 내용은 맨페이지 ykpamcfg(1)를 참조하십시오. |
chalresp_path | 시스템 전체 구성의 경우 챌린지 파일을 저장하는 데 사용되는 디렉터리입니다(사용자의 홈 디렉터리에 저장되는 챌린지 파일과 대조). 이 위치는 루트만 읽고 쓸 수 있어야 합니다. 이러한 설정에 대한 자세한 내용은 |
mysql_server | 매핑에 사용할 mysql 서버의 호스트 이름/주소입니다. |
mysql_port | mysql 서버의 네트워크 포트입니다. |
mysql_user | mysql 데이터베이스에 액세스하는 사용자입니다. |
mysql_password | mysql 사용자의 비밀번호입니다. |
mysql_database | 사용할 mysql 데이터베이스입니다. |
"디버그"를 사용하는 경우 누구나 쓸 수 있는 로그 파일을 만드는 것이 유용할 수 있습니다.
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
메모 | 시스템에 대한 물리적 접근으로 인해 종종 보안 통제를 우회할 수 있다는 점을 기억하십시오. 공격자가 시스템(예: 호텔 방에 남겨둔 노트북)에 물리적으로 접근할 수 있고 단일 사용자 모드로 부팅할 수 있는 경우 시스템 구성에서 yubico-pam을 비활성화할 수 있습니다. |
YubiKey 토큰 ID와 연결된 사용자 ID 간에 매핑이 이루어져야 합니다. 이를 수행하는 방법에는 두 가지가 있습니다. 하나의 파일에서 중앙적으로 또는 사용자가 홈 디렉토리에 매핑을 생성할 수 있는 개별적으로입니다. 중앙 권한 부여 매핑 파일을 사용하는 경우 사용자 홈 디렉터리 매핑은 사용되지 않으며, 반대로 사용자 홈 디렉터리 매핑을 사용하는 경우 중앙 권한 부여 매핑 파일은 사용되지 않습니다.
/etc/yubikey_mappings
생성하세요. 파일에는 YubiKey를 사용하여 시스템에 허용하려는 각 사용자에 대해 콜론으로 구분된 사용자 이름과 YubiKey 토큰 ID(passwd 파일과 동일한 형식)가 포함되어야 합니다.
매핑은 한 줄에 하나씩 다음과 같아야 합니다.
<첫 번째 사용자 이름>:: :… <두 번째 사용자 이름>: : :…
이제 PAM 구성 줄에 authfile=/etc/yubikey_mappings
추가하면 다음과 같습니다.
충분한 인증 pam_yubico.so id=[귀하의 API 클라이언트 ID] authfile=/etc/yubikey_mappings
각 사용자는 홈 디렉터리 내에 ~/.yubico/authorized_yubikeys
파일을 생성하고 해당 파일에 매핑을 배치합니다. 파일에는 한 줄만 있어야 합니다.
<사용자 이름>::
이는 SSH Authorized_keys 파일과 거의 동일한 개념입니다.
YubiKey 토큰 ID는 여러 가지 방법으로 얻을 수 있습니다. 하나는 YubiKey로 생성된 OTP(일회용 비밀번호)의 마지막 32자를 제거하는 것입니다. 또 다른 방법은 modhex 계산기를 사용하는 것입니다.
YubiKey OTP를 입력하고 변환하세요. YubiKey 토큰 ID는 12자이며 다음과 같이 나열됩니다.
Modhex로 인코딩됨: XXXXXXX
마지막 부분이 무엇을 의미하는지 모르시나요? OTP 사본을 얻는 방법은 다음과 같습니다.
터미널 열기
YubiKey의 버튼을 누르면 OTP가 셸에 출력됩니다.
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
이는 Modhex_Calculator 페이지에 붙여넣을 수 있습니다.
이를 위해서는 'debug'가 활성화된 pam 모듈이 활성화되어 있어야 합니다. YubiKey를 묻는 메시지가 나타나면 버튼을 누르세요. pam 모듈은 토큰의 OTP 및 ID를 포함한 디버그 정보를 셸에 인쇄합니다. ID를 구성 파일에 복사하면 시작됩니다.
'사용자'를 위한 YubiKey: [pam_yubico.c:pam_sm_authenticate(867)] 변환이 44바이트를 반환했습니다. [pam_yubico.c:pam_sm_authenticate(885)] 처음 0바이트를 건너뛰는 중입니다. 길이는 44이고 token_id는 12로 설정되며 토큰 OTP는 항상 32입니다. [pam_yubico.c:pam_sm_authenticate(892)] OTP: ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe ID: cccccclabcab
적용 모드(Fedora 17+의 기본값)에서 SELinux를 사용하는 사용자는 polkit-agent-helper-1, sshd 및 로그인을 통해 검증된 서비스를 포함하여 서비스에서 로그인 문제를 경험할 수 있습니다.
이는 ssh에 대한 해결 방법을 포함하여 Red Hat bugzilla에 문서화되어 있습니다(다른 서비스에 대해서도 동일한 파일이 생성될 수 있음). '허용' 모드의 시스템은 AVC 경고를 생성하지만 인증은 성공합니다.
SELinux를 적용하는지 여부를 확인하려면 sestatus
명령을 실행하십시오.
Linux 콘솔 로그인에서 YubiKey를 사용하여 인증하려면 /etc/pam.d/login
상단에 다음을 추가하세요.
충분한 인증 pam_yubico.so id=[귀하의 API 클라이언트 ID] 디버그
YubiKey 공개 ID 속성 저장/특정 사용자 계정과의 연결을 위한 Michael Ludvig의 샘플 Active Directory 스키마 확장을 참조하세요: https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
'/etc/pam.d/openvpn' 파일 만들기:
인증 필요 pam_yubico.so ldap_uri=ldap://contoso.com debug id=[귀하의 API ID] yubi_attr=YubiKeyID ldapdn=DC=콘토소,DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=사용자)(memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser,OU=서비스 계정,DC=contoso,DC=com] ldap_bind_password=bind_password try_first_pass 계정이 필요합니다 pam_yubico.so
'openvpn.conf' 파일 생성
플러그인 openvpn-plugin-auth-pam.so openvpn