NetworkManager가 저장된 VPN 비밀번호를 표시하지 않게 하기
매번 묻거나, 키링에 넘기거나, root 전용 파일로 두십시오. 선택마다 노출이 다르며, 비밀번호 플래그도 그에 맞아야 합니다.
NetworkManager는 VPN 비밀번호를 보관해 아무도 입력하지 않아도 연결이 올라오게 할 수 있고, 그 값을 편집기나 nmcli --show-secrets를 통해 다시 보여 줄 수 있습니다. 소유 모델은 세 가지이며, 표시 동작은 어느 것을 골랐는지의 증상일 뿐입니다. 먼저 모델을 고른 다음 그에 맞는 플래그를 설정하고, 다음 사람을 혼란스럽게 할 자리 표시자로 필드를 숨기는 일은 피하십시오.
세 가지 소유 모델
첫 번째 모델은 매번 묻습니다. 아무것도 저장되지 않고, 비밀은 활성화가 지속되는 동안에만 존재하며, 연결을 시작하는 사람은 비밀번호를 알아야 합니다. 가장 불편한 선택이며 변호하기 가장 쉽습니다.
두 번째는 비밀을 사용자 소유의 키링에 넘깁니다. 에이전트는 세션이 시작될 때 잠금을 해제하고 요청 시 값을 제공하므로, 연결 파일 밖에 두지만 연결을 그 사용자의 세션에 묶습니다. 여기서 에이전트가 실행 중이어야 하고 잠금이 해제되어 있어야 한다는 두 조건이 따릅니다.
세 번째는 시스템 연결을 위한 보호된 자격 증명을 저장합니다. 재부팅을 견디고 누군가 로그인하기 전에도 동작하며, 그 대신 값은 암호화가 아니라 파일 권한으로 보호되어 디스크에 남습니다.
각 모델은 올바른 맥락에서 합리적입니다. 실수는 그것들을 섞는 것이며, 그래서 노트북에는 비밀이 두 곳에 남고 어느 쪽이 정본인지 분명한 답이 없게 됩니다. 프로필이 어떤 모델을 쓰는지 적어 두십시오. 팀 런북의 한 줄이 다음 사람이 네 번째 확인 장소를 만들어 내지 않게 해 줍니다.
바꾸기 전에 현재 상태를 읽으십시오
연결을 관리하는 사용자로서 프로필과 비밀의 상태를 보십시오. 두 번째 명령이 값이 실제로 읽히는지 알려 줍니다.
nmcli connection show "Office VPN"
nmcli --show-secrets connection show "Office VPN"
sudo stat -c '%U %a %n' /etc/NetworkManager/system-connections/*.nmconnection
그 디렉터리의 키 파일은 보통 root 소유에 모드 600입니다. 이것은 일반 사용자를 막지만 root는 막지 않으며, 같은 머신을 공유하거나 백업이 root로 실행될 때 중요합니다.
파일 권한은 경계이지 암호화가 아닙니다. root로 파일을 읽을 수 있는 사람은 비밀번호를 평문으로 가집니다. 무인 서버에는 받아들일 만한 거래이고 공유 워크스테이션에는 나쁩니다. 한 번 적어 두면 값이 보호되는지에 대한 긴 논쟁을 막을 수 있습니다.
각 플래그 값이 하는 일
VPN 비밀은 flags 속성을 가지며, 값은 숫자만으로는 직관적이지 않습니다.
| Value | Meaning | Practical effect |
|---|---|---|
| 0 | No special flag | Secret is typically saved with the connection |
| 1 | Agent-owned | A keyring or secret agent supplies it |
| 2 | Not saved | Prompted at each activation |
| 4 | Not required | Connection proceeds without asking |
실제 동작은 플러그인과 에이전트 실행 여부에도 달려 있으므로, 표는 계약으로, 관찰된 동작은 검증 대상으로 보십시오. 한 데스크톱에서 되는 값이 세션이 없는 서버에서는 다르게 동작할 수 있습니다. 혼란스러운 티켓 대부분이 이 간극에 있습니다.
줄을 지우고 기대하기보다 속성을 명시적으로 설정하십시오. 없는 플래그는 정책이 아니며, 다음 패키지 업데이트가 의도하지 않은 값으로 채울 수 있습니다.
연결이 시작되는 시점에 모델을 맞추십시오
연결이 사용자가 로그인한 동안에만 시작된다면 에이전트 소유가 잘 맞고 비밀을 파일 밖에 둡니다. 부팅 시, 어떤 세션도 존재하기 전에 시작된다면 에이전트는 도울 수 없습니다.
대부분의 머신에서 결정은 이것으로 끝입니다. 연결이 대화형으로는 동작하고 재부팅 후 실패하는 혼란스러운 보고의 부류도 이것으로 설명됩니다. 플래그는 바뀐 적이 없고 맥락이 바뀐 것입니다.
무인 상황에서는 root 소유의 제한된 파일이나 승인된 자격 증명 원본이 실용적인 답입니다. 그 프로필이 나중에 내보내지거나 다른 머신으로 복사된다면 연결 프로필 밖에 두십시오.
값이 이미 보였다면 교체하십시오
플래그를 바꿔도 비밀번호 자체는 그대로입니다. 스크린샷, shell 기록, 지원팀에 보낸 묶음, 다른 사용자가 열 수 있었던 파일에 나타난 값은 노출된 것으로 봐야 합니다.
서버에서 바꾼 다음 클라이언트를 고치고 예전 값으로 인증한 세션을 모두 종료하십시오. 로컬 연결을 지워도 상대편에서는 아무것도 취소되지 않으며, 바로 이 부분을 놓치기 쉽습니다.
그다음 비밀번호를 명령줄에 두는 것을 그만두십시오. shell 기록에 남고 프로세스 목록에 나타날 수 있으므로, 대신 대화형 프롬프트나 에이전트를 쓰십시오.
다시 연결해 검증하십시오
비밀을 보여 준 명령을 반복하고 필드가 더 이상 출력되지 않는지 확인하십시오. 그다음 연결을 끊고 다시 연결하고, 연결이 자동으로 시작되면 세션 맥락이 바뀔 때만 흥미로운 실패가 나타나므로 재부팅하십시오.
비밀이 여전히 보인다면 다른 프로필이나 다른 에이전트가 제공하는 것입니다. 증상이 옮겨 갈 때까지 파일을 지우지 말고 활성 연결과 키링을 살펴보십시오.