VPN 버튼에 sudo가 필요할 때: 규칙 범위를 좁히고 정책을 검증하세요
데스크톱 버튼은 암호 없는 root를 허용할 이유가 아닙니다. 네트워크 관리자가 스스로 할 수 있는지 확인하고, 명령 하나로 범위를 좁힌 뒤 전체 sudo 정책을 검증하세요.
VPN 버튼은 관리자에게는 동작하고 나머지 모두에게는 실패하므로, 누군가 sudoers에 한 줄을 추가한다. 그 줄은 원래 해결하려던 문제보다 오래 살아남고, 버튼이 필요로 하는 것보다 더 많은 권한을 주는 경우가 많다. 정책을 편집하기 전에 지원되는 연결 소유자가 이미 그 작업을 할 수 있는지 확인한다. 아래 세 조건이 sudo가 아예 관여하는지를 결정한다.
조건 1: 지원되는 소유자가 sudo 없이 할 수 있다
대부분의 Linux 데스크톱에서 네트워크 관리자는 이미 VPN 연결을 소유하고 있으며, 그 권한 부여는 sudo가 아니라 polkit을 거친다. 연결을 올릴 수 있는 사용자는 어떤 root 규칙 없이도 명령줄에서 이를 할 수 있다. 버튼에 권한이 필요하다고 가정하기 전에 관리자가 무엇을 허용하는지 확인한다. 답이 그렇다면 sudoers 변경은 존재하지 않는 문제를 해결하는 셈이다.
nmcli connection show
nmcli connection up "Work VPN"
관리자가 거부하면 이유를 읽는다. polkit 규칙이 없거나, 다른 사용자가 소유한 연결이거나, 사용자가 읽을 수 없는 곳에 저장된 프로필이다. 각각에는 sudo 규칙보다 좁은 지원되는 수정 방법이 있다. 권한 상승은 마지막 수단이지 첫 번째가 아니다.
조건 2: 규칙이 실행 파일 하나와 그 인수를 지정한다
sudo가 정말로 필요하다면 규칙은 정확한 명령과, 가능하면 사용할 수 있는 인수를 지정해야 한다. 사용자에게 래퍼 스크립트 실행을 허용하는 규칙은 그 스크립트의 권한만큼만 안전하다. 사용자가 root가 실행할 내용을 편집할 수 있기 때문이다. 명령 뒤에 와일드카드가 있는 규칙도 더 짧은 형태의 같은 문제다.
sudo -l -U alice
ls -l /usr/local/sbin/vpn-up
명령 체인의 모든 경로를 확인한다. 바이너리, 그것이 호출하는 스크립트, 그것이 읽는 구성 파일, 그리고 그 사이의 모든 디렉터리다. 이 중 하나라도 사용자가 쓸 수 있다면 범위를 좁힌 규칙은 사실상 무제한 root다. 인수도 중요하다. 구성 경로를 받는 명령은 사용자가 제어하는 파일을 가리키도록 할 수 있기 때문이다. 규칙은 버튼이 아니라 작업을 위해 쓴다.
명령이 동작하려면 사용자가 제어하는 파일이 필요하다면 멈춘다. 그렇다면 설계가 잘못된 것이며, 어떤 sudoers 문법도 그것을 안전하게 만들지 못한다.
조건 3: 당신의 줄만이 아니라 전체 정책이 파싱된다
파일을 잠그고 문법을 검사하는 편집기로 검증하고, 조각이 아니라 조립된 정책을 검증한다. 스스로 파싱되는 파일도 포함 순서를 깨거나 동작을 바꾸는 방식으로 규칙을 중복시킬 수 있다.visudo 매뉴얼은 잠그는 편집기와 여기서 사용하는 검사 전용 모드를 모두 문서화한다.
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/vpn-launcher
검사는 실패할 때 파일과 줄을 보고하며, 그 보고가 유용한 부분이다. 알려진 오류를 강제로 저장하지 말고 편집기를 통해 의도한 변경을 고친다. 깨진 정책은 모든 관리자를 한꺼번에 잠글 수 있기 때문이다. 포함 디렉터리의 파일에도 매뉴얼이 요구하는 소유권과 모드가 필요하며, 그렇지 않으면 무시되거나 거부된다. 문법은 첫 번째 관문일 뿐이다. 통과한 뒤 규칙을 다시 읽고 그것이 실제로 무엇을 허용하는지 물어야 한다.
변경을 동작시키는 유일한 방법이 문법 검사를 끄는 것이라면 멈춘다. 그것은 정책이 아니라 재부팅을 기다리는 장애다.
복구: 여전히 동작하는 세션을 유지한다
저장하기 전에 권한이 있는 관리 세션이 이미 열려 있고 기계로 들어가는 두 번째 경로가 있는지 확인한다. sudoers 실수는 그것을 고칠 능력을 빼앗을 수 있고, 데스크톱 버튼은 그 위험을 감수할 가치가 없다. sudo가 이미 깨졌다면 직접 고안하지 말고 시스템의 문서화된 복구 경로를 사용한다.
sudo -n true
id
pkexec 같은 대안은 자체 설치와 정책에 의존하므로 보장된 두 번째 root 프롬프트가 아니다. 로컬 권한 부여는 VPN 비밀 제공과도 분리해 둔다. sudo 규칙은 없는 비밀 에이전트를 열 수 없고 게이트웨이의 MFA를 충족하지 못한다. 수정 후에는 일반 계정이 의도한 작업만 수행하도록 시험하고, 그다음 관리자의 평소 제어를 사용한다.
어떤 조건이 sudo를 정당화했는지, 규칙이 무엇을 지정하는지, 전체 정책이 파싱되는지, 그렇지 않다면 어떻게 복구할지를 말할 수 있을 때 결정이 끝난다. 관리 접근을 잃게 만드는 권한 있는 실행기는 나쁜 거래이며, 대개 피할 수 있다.