Linux는 VPN 비밀번호를 어디에 저장해야 할까? 프로필이 아니다
NetworkManager의 시크릿 플래그는 비밀번호를 프로필, 키링 에이전트, 또는 아무도 보관하지 않는지를 결정한다. 답은 연결이 언제 시작되는지에 달려 있다.
VPN 비밀번호는 연결 프로필 안, 데스크톱이 잠금을 해제하는 키링 안, 또는 어디에도 없는 어딘가에 살아야 한다. NetworkManager는 그 선택을 시크릿 플래그라고 부르며, 잘못된 것을 고르면 로그인 후에는 연결이 되지만 서비스로는 실패한다. 플래그는 설정 한 줄이며, 세 가지 결과 중 무엇을 얻을지 결정한다.
세 가지 플래그가 거의 모든 경우를 덮으며, 결정은 연결이 언제 시작되는지에 관한 것이다.
세 가지 시크릿 플래그, 세 가지 동작
플래그 0은 시크릿이 연결과 함께 저장된다는 뜻이며, 프로필을 보관하는 어떤 저장소든 마찬가지다. 플래그 1은 에이전트 소유로 만들며, 시크릿은 데스크톱 키링 같은 시크릿 에이전트에서 오고 NetworkManager는 활성화할 때 그것을 요청한다. 플래그 2는 저장 안 함이며, 시크릿은 절대 기록되지 않고 매번 제공해야 한다. 플래그 4는 시크릿을 필요 없음으로 표시하며, 정말로 아무것도 필요 없는 연결에 쓴다.
| Flag | Where it lives | Works unattended |
|---|---|---|
| 0 saved | Connection profile | Yes, if the store is readable |
| 1 agent-owned | Secret agent or keyring | Only if that agent is available |
| 2 not-saved | Nowhere | No |
플래그는 연결이 아니라 시크릿마다 설정한다. 한 연결이 에이전트 소유 비밀번호와 저장된 개인 키 암호 문구를 함께 가질 수 있다.
연결이 언제 시작되는지로 결정하라
로그인한 사용자가 연결을 시작한다면 에이전트 소유가 합당한 기본값이고 키링은 로그인으로 잠금이 해제되어 시크릿이 파일에 남지 않지만, 누군가 로그인하기 전에 연결이 올라와야 한다면 에이전트 소유는 잘못된 선택이다. 왜냐하면 잠금을 해제할 세션 키링이 없다.
그것이 결정의 전부다. 나머지는 모두 그 변형이다.
로그인 전 서비스에는 시스템 범위 저장소나 보호된 키 파일이 지원되는 패턴이며, 파일 권한이 곧 보호가 된다. 부팅 시 실행되는 셸 스크립트에 비밀번호를 붙여 넣어 해결하지 마라.
키링이 주는 것과 주지 않는 것
키링은 시크릿을 연결 프로필 밖에 두고 사용자 세션에 묶는다. 세션이 없는 서비스에 시크릿을 쓸 수 있게 하지 않고, 회선에서 아무것도 암호화하지 않는다. 사람들이 자주 뒤섞는 별개의 속성이다. 실제로 얻는 것은 프로필 파일이 유출될 때 피해 범위가 작아지는 것이다.
프로필이 참조하는 개인 키는 비밀번호가 어디에 있든 별도의 권한이 필요하다.
시크릿을 쏟아내지 않는 진단
연결 이름, UUID, 플래그만으로 보통 고장을 설명할 수 있다. nmcli connection show 프로필을 나열하며, 시크릿 플래그는 비밀번호가 어디서 와야 했는지 알려 준다.
피해야 할 것은 --show-secrets 티켓과 채팅에서의 사용이다. 한 번 붙여 넣으면 기록에 남는 자격 증명이다.
저장은 폐기가 아니다
한 키링에서 시크릿을 지워도 원격 운영자가 이미 수용한 자격 증명은 무효가 되지 않는다. 계정 폐기는 서버 측 작업이며, 로컬 저장은 별도의 소유자를 가진 별개의 문제다.
둘 다 사고 전에 결정해야 하며, 사고 중이 아니다. 대화형 사용자 연결과 로그인 전 서비스는 서로 다른 답을 요구하고, 공유 셸 스크립트는 둘 다 아니다. NetworkManager의 시크릿 플래그 문서 는 값을 모두 나열한다.