이 가정은 받아들이기 쉽고 알아차리기 어렵다: VPN 연결 훅은 root로 실행되므로 그것이 시작하는 마운트도 root로 구성되어야 한다는 생각이다. 그 추론은 데스크톱 사용자가 열 수 없는 팀 디렉터리, 트리거 서비스가 재시작될 때 사라지는 마운트, 아무도 답할 수 없는 컨텍스트에서의 인증 프롬프트를 만든다. 훅과 마운트는 서로 다른 작업이며, 둘 중 하나만 권한이 필요하다.

신화: 네트워크 권한은 마운트 권한을 뜻한다

인터페이스를 올리는 것과 파일 서버에 인증하는 것은 서로 무관한 능력이고 보통 다른 계정에 속한다. VPN 구성 요소는 라우트와 인터페이스를 바꿀 만큼의 권한이 필요하다. 파일 서버 계정은 키나 비밀번호, 호스트 키에 대한 결정, 마운트할 홈 디렉터리가 필요하다. 두 번째 작업의 자격 증명을 첫 번째 신원에 넘기는 것이 네트워크 서비스가 사용자의 키를 쥐게 되는 경로다.

단일 사용자 노트북에서는 같은 계정일 수 있지만 그 우연은 설계가 아니다.

권한 있는 훅이 마운트를 수행하면 세 가지가 조용히 잘못된다. 마운트는 root 소유가 되고, 사용자의 에이전트는 그 환경에 없으며, 실패는 관심 있는 세션이 아니라 네트워크 서비스 로그에 나타난다. 이 중 어느 것도 마운트 명령에 옵션을 더해 고쳐지지 않는다. 신원을 가진 세션에 작업을 넘겨야 고쳐진다.

마운트가 로그인한 사용자에게 속하는 이유

SSHFS 마운트는 그것을 만든 프로세스가 소유하는 FUSE 마운트이며, 접근은 부모 디렉터리의 모드가 아니라 그 소유권을 따른다. 참조 문서는 일반 사용자와 그 사용자가 소유한 마운트 지점을 권장하며, root 프로세스가 만든 마운트가 다른 모두에게 불편한 이유가 바로 그것이다. 마운트 지점의 권한을 바꿔도 고쳐지지 않는다. 장애물은 마운트 자체의 소유자이기 때문이다.

사용자 세션 안에서 수동 기준선부터 시작하라. 홈 디렉터리 아래의 기존 빈 마운트 지점, 서버의 승인된 계정, 승인된 절차로 이미 검증한 호스트 키가 필요하다. 한 번 직접 마운트해서 써 보라. 자동화가 존재하기 전에 신원 경로가 작동함을 증명하기 때문이다. 명령에 무엇이 필요했는지 기록하라. 계정 이름, 내보내기 경로, 사설 호스트 이름이다. 동작하는 수동 마운트가 트리거가 재현해야 할 사양이므로 그 컨텍스트를 자동 버전에 그대로 유지하라.

sshfs [email protected]:/exports/team "$HOME/mnt/team"

그 줄의 모든 이름과 경로를 자리 표시자로 취급하라. 계정과 내보내기도 포함된다. VPN 계정 비밀번호가 자동으로 저장소 계정의 자격 증명이 되지는 않는다.

트리거가 세션에 무엇을 요청해야 하는가

지원되는 구성은 네트워크 이벤트에서 사용자 세션으로의 요청이지 빌려온 자격 증명이 아니다. 트리거를 의도한 연결로 한정하라. 이름이나 UUID로 지정하고, 우연히 tun0이라는 인터페이스에 맡기지 마라. 그 한 가지 변경으로 두 번째 프로필, 테스트 터널, 동료의 디버깅 세션이 마운트를 시작하지 못한다.

세션 측 동작은 의도한 기존 마운트를 찾은 다음 한 번의 제한된 시도를 해야 한다.

매 폴링마다 재시도하지 말고 서버에 닿을 수 없는 동안 자격 증명을 계속 요구하지 마라. 둘 다 일시적 장애를 계정 잠금으로 바꾼다. 무인 서비스는 별도의 설계이며, 자체 실행 컨텍스트에서 자체 승인된 자격 증명과 호스트 검증 방식을 갖는다. 누군가 그래픽 에이전트를 잠금 해제했으리라 기대할 수 없다. 코드가 어디에 살지 고르기 전에 둘 중 무엇을 만드는지 결정하라. 여기서 혼란의 대부분은 하나를 만들고 다른 하나를 기대하는 데서 온다.

연결 해제는 파일 시스템 이벤트이지 훅 이벤트가 아니다

계획된 연결 해제는 파일 작업을 끝내고, 그 파일 시스템 유형에 지원되는 명령으로 마운트한 사용자의 세션에서 언마운트해야 한다. 훅이 빨리 돌아오게 하려고 강제로 분리하는 것이 애플리케이션이 작업 디렉터리를 잃고 사용자가 자동화에 대한 신뢰를 잃는 경로다. 사용 중인 마운트에는 파일을 닫거나 쓰기를 멈추는 식의 애플리케이션 수준 결정이 필요하지, 더 강한 신호가 아니다. 훅의 종료 상태는 최적화할 대상이 아니다.

fusermount3 -u "$HOME/mnt/team"

예기치 않은 손실은 다른 경우이며, SSHFS는 중단된 작업이 전송이 다시 연결되는 동안 블록될 수 있다고 문서화한다.

재연결 옵션은 전송을 복구하지만, 그 재연결 전에 연 파일은 여전히 오류를 반환하고 다시 열어야 할 수 있다. VPN이 돌아왔다고 해서 이전 핸들이나 저장하지 않은 작업에 대해 증명되는 것은 없다. 장애 시 원하는 동작을 고르라. 일시 중지, 오류 표시, 의도적 재마운트다. 무엇이든 그것에 의존하기 전에 일회용 파일로 시험하라.

관련 글