지속적으로 다가오는 사이버 공격의 위험에 대해 우려하는 것은 충분히 이해할 수 있습니다. 프롬프트 및 2단계 인증과 같은 인증 방법이 많은 잠재적 침입자를 효과적으로 차단할 수 있지만, 상당한 수의 성공적인 침해가 매일 계속 발생하고 있습니다.
인증 문제에 대한 해결책으로 유비키가 널리 제안되었습니다. 이는 신원 확인 수단으로 사용할 수 있는 물리적 장치의 한 예입니다. 사용 방법은 USB를 통해 컴퓨터에 연결하거나 최신 디바이스의 USB-C 슬롯에 삽입하는 것입니다. 그러면 로그인할 때 안전하게 신원을 인증할 수 있습니다. 하지만 YubiKey를 사용한다고 해서 Linux 시스템에 대한 무단 액세스로부터 완벽한 보호를 보장하는 것은 아닙니다.
하드웨어 인증에 YubiKey를 사용하는 이유는 무엇인가요?
비밀번호 기반 인증, SMS를 통한 2단계 인증, 모바일 장치에서 사용할 수 있는 인증 애플리케이션 활용 등 다양한 형태의 인증을 사용할 수 있습니다. 또한 요청 시 인증 토큰을 생성하는 소형 플러그인 장치를 사용하는 하드웨어 기반 인증이라는 비교적 흔하지 않은 형태의 인증도 존재합니다.
유비키 및 이와 유사한 하드웨어 인증 도구를 사용하면 기존 인증 방법에 비해 몇 가지 이점이 있습니다. 이러한 이점에는 사용 편의성, 강화된 보안 조치, 무단 액세스에 대한 거의 불가능한 저항성 등이 있으며, 실제 YubiKey 장치를 소지해야 합니다.
유비키 시작하기
몇 가지 간단한 단계만 거치면 유비키를 시작할 수 있습니다. 첫 번째 단계로, Yubico 이 만든 퀴즈를 사용하여 장치 사양에 가장 적합한 유비키를 쇼핑해야 합니다. 유비키가 준비되면 웹사이트와 앱의 인증 장치로 사용할 수 있습니다.
유비키는 sudo 또는 SSH를 사용하여 Linux 시스템에 로그인할 때 신원을 확인할 수 있는 안전하고 편리한 방법입니다. 이 도구는 비밀번호를 입력하는 것 이상의 추가적인 보안 계층을 제공하며, 액세스하려면 장치를 물리적으로 소유하고 있어야 합니다. 이 가이드에서는 sudo 및 SSH와 호환되는 적절한 YubiKey 모델 선택에 대한 포괄적인 지침과 원활한 인증을 위한 장치 설정에 대한 자세한 단계를 제공합니다.
이미지 출처: Tony Webster/ Flickr
시스템에 적합한 YubiKey 선택하기
Linux 시스템에서 인증에 YubiKey를 사용하려면 각각 USB-A 및 USB-C 포트와의 호환성으로 인해 탁월한 선택으로 간주되는 YubiKey 5 또는 YubiKey 5 NFC를 선택하는 것이 좋습니다.
리눅스 컴퓨터와 안드로이드 폰 모두에서 장치를 사용하고자 하는 사용자에게는 YubiKey 5c NFC를 추천합니다. 반면, 리눅스 컴퓨터와 아이폰을 사용하는 사용자는 USB-C 및 라이트닝 포트와 모두 호환되는 YubiKey 5ci를 선택해야 합니다.
YubiHSM 시리즈는 sudo 인증을 지원할 수 없음을 알려드립니다. 기존 Yubi키와 sudo/SSH 인증의 호환성은 개별 기능에 따라 다릅니다.
sudo 또는 SSH 인증을 사용하려면 YubiKey 개인 패키지 아카이브(PPA)를 설치해야 합니다. 터미널을 열고 다음 지침을 실행하여 패키지를 업그레이드하고 YubiKey 인증기와 YubiKey 매니저를 모두 설치하세요:
sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt install yubikey-manager libpam-yubico libpam-u2f
시스템과 YubiKey 간의 호환성을 보장하기 위해 장치 이름 지정 및 장치 번호 지정을 처리하는 udev의 기능을 확인해야 합니다. 이를 위해 터미널 창에서 다음 명령을 실행합니다:
sudo udevadm --version
터미널의 출력은 숫자 값을 반환하여 시스템이 YubiKey와 호환되는지 여부를 나타냅니다. 반환된 숫자가 244보다 크면 시스템이 호환되는 것으로 간주되며 사용자는 추가 확인 없이 다음 단계로 진행할 수 있습니다.
자동화 도구가 제대로 작동하려면 시스템에 필요한 구성 요소가 있는지 확인하는 것이 중요합니다. udev가 있는지 확인하고 없는 경우 설치하려면 다음 명령을 활용하세요:
dpkg -s libu2f-udev
sudo apt install libu2f-udev
유비키의 U2F(Universal 2nd Factor) 인터페이스가 잠금 해제되어 있는지 확인하세요. 이렇게 하려면 YubiKey NEO 또는 YubiKey NEO-n을 사용 중인 경우 장치를 삽입하고 YubiKey 매니저를 실행하세요. 그런 다음 “인터페이스” 섹션으로 이동하여 “저장”을 클릭하여 U2F 인터페이스를 활성화합니다.
Linux에서 sudo 인증을 위한 YubiKey 설정
Sudo는 사용자에게 관리자 권한으로 작업을 수행할 수 있도록 상승된 권한을 부여하는 Linux 운영 체제 내의 명령입니다.숙련된 운영자가 이 명령을 사용하면 생산성과 효율성에 엄청난 잠재력을 제공하지만, 부적절하게 처리하면 루트 수준의 액세스 권한을 부여하여 악의적인 조작에 취약해지기 때문에 시스템의 무결성에 강력한 위협이 될 수 있습니다.
유비키를 사용하면 유비키를 물리적으로 소유하지 않고는 이러한 인증을 재현하기가 매우 어렵기 때문에 sudo 인증 과정에서 탁월한 보안 이점을 제공합니다. 5 FIP 시리즈, 키 시리즈, 4 FIP 시리즈, 바이오 시리즈, 5 시리즈, 4 시리즈 모델을 포함한 대부분의 YubiKey는 sudo 인증을 완벽하게 지원하므로 무단 액세스에 대한 추가적인 보호 계층을 제공합니다.
유비코 에 따르면 sudo 인증을 구성하기 위해 수행해야 하는 첫 번째 단계는 규칙 파일을 만드는 것입니다. udev 버전이 188 이상인 경우 GitHub 에서 새 U2F 규칙을 설치하고 70-u2f.rules 파일을 /etc/udev/rules.d에 복사합니다.
udev 버전이 188 미만인 경우 GitHub 에서 기존 U2F 규칙을 설치하고 70-old-u2f.규칙 파일을 /etc/udev/rules.d에 복사합니다.
244 이상의 udev 버전을 보유하고 있거나 필요한 규칙 파일을 생성한 경우, 유비키를 계정과 연결할 준비가 된 것입니다.
유비키를 컴퓨터의 USB 포트에 삽입하고 터미널 창을 연 다음 다음 지침을 입력하여 유비키를 사용자 계정과 연결하세요:
mkdir -p ~/.config/Yubicopamu2fcfg > ~/.config/Yubico/u2f_keys
유비키의 LED 표시등이 깜빡이기 시작할 때까지 몇 초간 기다리세요. 그런 다음 YubiKey의 버튼을 눌러 장치 간 연결을 확인합니다.
유비키를 추가로 보유하고 있는 경우, 다음 지침을 실행하고 동일한 절차를 진행하여 비상 대책으로 유비키를 추가하는 것을 고려할 수 있습니다:
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
sudo 권한 상승 유틸리티를 통한 명령 실행에 YubiKey 인증 사용을 구현하기 위해서는 해당 유틸리티와 관련된 구성 설정을 조정해야 합니다. sudo 구성 파일에 액세스하려면 다음 명령을 입력하세요:
sudo vi /etc/pam.d/sudo
구성 파일을 연 후 “@include common-auth” 지시문 바로 아래에 다음 줄을 삽입하여 sudo에 대한 YubiKey 인증을 사용하도록 설정합니다.
auth required pam_u2f.so
현재 파일을 저장하고 종료하려면 키보드에서 “Escape” 키와 “:wq”를 차례로 누른 다음 “Enter” 버튼을 눌러주세요. 터미널을 닫으면 sudo 인증에 대한 변경 사항을 되돌릴 수 없으므로 터미널 창을 열어 두는 것이 중요합니다.
유비키를 연결한 후 지정된 터미널 창에 비밀번호를 입력한 후 연결을 해제하세요. 그런 다음 비밀번호를 다시 입력하여 프로세스를 완료하세요.
sudo echo testing
인증을 시도하기 전에 유비키를 삽입하고 명령어와 비밀번호를 입력했는지 확인하시기 바랍니다. 유비키 표시등이 깜박이기 시작하면 유비키의 버튼을 눌러 인증 절차를 완료하세요. 이 단계는 유비키가 sudo 인증을 위해 성공적으로 구성되었음을 확인합니다
이미지 출처: Håkan Dahlström/ Flickr
SSH 인증을 위해 유비키를 설정하는 방법
유비키는 비밀번호 없이 안전하게 로그인할 뿐만 아니라 SSH 인증에도 사용할 수 있는 다용도 도구입니다. 5 FIPS 시리즈, 5 시리즈, 4 FIPS 시리즈, 4 시리즈 등 다양한 YubiKey 모델이 SSH와 호환됩니다. SSH 인증에 YubiKey를 활용하면 모든 로그인의 보안을 강화할 수 있습니다.
숙련된 사용자가 GitHub 에서 YubiKey를 설정하는 가장 좋은 방법을 설명했습니다. SSH 8.2 이상과 펌웨어 5.2.3 이상의 YubiKey가 필요합니다. 다음 명령을 사용하여 OpenSSH 버전을 확인하고 필요한 경우 업데이트할 수 있습니다:
ssh -V
sudo apt update && sudo apt upgrade
SSH로 YubiKey를 사용하려면 vi 텍스트 편집기를 사용하여 해당 구성 파일을 수정해야 합니다. 이를 위해 다음 지시어를 실행합니다.
sudo vi /etc/ssh/sshd_config
필요한 조정을 수행하여 YubiKey를 인식할 수 있도록 구성 파일을 수정합니다.
PubkeyAcceptedKeyTypes [email protected],[email protected]
SSH에 대한 업데이트된 구성을 사용할 수 있도록 하려면 키보드 단축키 “Escape” 다음에 “:wq”를 사용하여 현재 수정 사항을 파일에 저장한 다음 “Enter”를 누릅니다. 그런 다음 터미널에서 적절한 명령을 실행하여 SSH 서비스를 다시 로드하면 새로 구현된 변경 사항이 적용됩니다.
sudo service ssh restart
이제 SSH 세션을 인증하는 데 사용할 키 쌍을 생성할 준비가 되었습니다.
cd home/username/.ssh
ssh-keygen -t ed25519-sk
앞서 설명한 프로세스를 통해 두 개의 별개의 아카이브가 생성되며, 이 아카이브는 사용자의 홈 디렉터리인 ~/.ssh/에 위치할 것으로 예상됩니다. 키 등록 단계에서 운영 체제가 Ed25519 암호화 방법과의 호환성을 인식하지 못하는 경우, 대신 ecdsa-sk라는 대체 옵션을 사용해야 할 수도 있습니다.
계속 진행하려면 서버에서 다음 명령을 실행하세요:
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub username@server
루트 로그인을 비활성화한 후 필요한 권한을 유지하려면 sudoers 파일에 사용자 계정을 추가해야 합니다. 이 파일에 액세스하려면 터미널 또는 명령 프롬프트에서 “sudo visudo” 명령을 사용하세요.
일반 텍스트 편집기를 사용하여 sudoers 파일에 액세스하면 의도하지 않은 결과를 초래할 수 있으므로 사용을 자제해 주세요.
“root ALL=(ALL:ALL)” 항목 아래에 후속 문을 포함해야 합니다.
username ALL=(ALL:ALL) ALL
동일한 명령어를 고급 어휘로 더 설득력 있게 표현하려면 다음 단락을 참조하세요. 루트 계정 및 비밀번호 인증 사용을 금지하려면 ‘/etc/ssh/ssd\_config’에 있는 파일을 편집해야 합니다. 파일을 열면 설정 문서에 다음 지시문을 추가하세요:
ChallengeResponseAuthentication noPermitRootLogin no
마지막으로, 나머지 세션 동안 비밀 키를 SSH 에이전트에 통합하려면 다음 명령을 실행하세요:
ssh-add ~/.ssh/id_ed25519_sk
이제 SSH를 통해 원격 서버와 보안 연결을 설정하기 위한 목적으로 유비키를 사용할 준비가 되었습니다. 프로세스를 시작하려면 지침에 따라 YubiKey를 장치에 삽입하고 활성화 알림이 표시되면 버튼을 눌러야 합니다. 이러한 2단계 인증 구현으로 SSH를 통해 원격 서버에 액세스하는 보안이 대폭 강화됩니다.
YubiKey의 기타 잠재적 용도
Linux 시스템에서 YubiKey를 사용하는 데는 어떠한 제한도 없습니다. PC의 보안을 강화하려면 디스크를 암호화하거나 비밀번호 없는 인증을 구현하는 데 YubiKey를 사용하는 것을 고려하세요. 또한 원하는 경우 전자 메시지와 문서에 서명하는 데 사용할 수도 있습니다.
YubiKey로 Linux 시스템 보호
YubiKey의 활용은 단순히 SSH 및 수도 인증에 적용하는 것 이상으로 확장되며, 이중 인증 프로토콜을 시작하는 데 필요한 최소한의 노력으로 다양한 온라인 계정에 대한 액세스를 확인하는 데 사용할 수 있습니다.