Các mount SSHFS thuộc về người dùng, không phải hook VPN
Quyền nâng một giao diện không phải quyền mount một thư mục chia sẻ. Hãy chứng minh mount của phiên người dùng bằng tay, rồi để trình kích hoạt yêu cầu đúng ngữ cảnh đó.
Giả định này dễ tiếp nhận và khó nhận ra: một hook kết nối VPN chạy với quyền root, nên mount mà nó khởi động cũng nên được tổ chức với quyền root. Lý lẽ đó tạo ra một thư mục nhóm mà người dùng máy tính để bàn không thể mở, một mount biến mất khi dịch vụ kích hoạt khởi động lại, và một lời nhắc xác thực trong ngữ cảnh không ai có thể trả lời. Hook và mount là hai công việc khác nhau, và chỉ một trong hai cần đặc quyền.
Lầm tưởng: đặc quyền mạng đồng nghĩa đặc quyền mount
Nâng một giao diện và xác thực với một máy chủ tệp là những khả năng không liên quan, và thường thuộc các tài khoản khác nhau. Thành phần VPN cần đủ đặc quyền để thay đổi tuyến và giao diện. Tài khoản máy chủ tệp cần một khóa hoặc mật khẩu, một quyết định về khóa máy chủ và một thư mục nhà để mount vào. Giao thông tin xác thực của công việc thứ hai cho danh tính thứ nhất là cách một dịch vụ mạng cuối cùng nắm giữ khóa của người dùng.
Trên một laptop một người dùng, chúng có thể là cùng một tài khoản, và sự trùng hợp đó không phải là thiết kế.
Khi một hook có đặc quyền thực hiện mount, ba điều âm thầm sai. Mount thuộc sở hữu của root, tác nhân của người dùng vắng mặt trong môi trường đó, và lỗi xuất hiện trong nhật ký của dịch vụ mạng thay vì trong phiên quan tâm. Không điều nào trong số đó được sửa bằng cách thêm tùy chọn vào lệnh mount. Chúng được sửa bằng cách giao công việc cho phiên sở hữu danh tính.
Vì sao mount thuộc về người dùng đã đăng nhập
Mount SSHFS là một mount FUSE thuộc sở hữu của tiến trình đã tạo ra nó, và truy cập tuân theo quyền sở hữu đó chứ không phải chế độ của thư mục cha. Tài liệu tham chiếu khuyến nghị một người dùng thông thường với điểm mount thuộc sở hữu của người đó, và chính vì thế một mount do tiến trình root tạo ra lại bất tiện cho mọi người khác. Thay đổi quyền trên điểm mount không sửa được, vì trở ngại là chủ sở hữu của chính mount.
Hãy bắt đầu bằng một đường cơ sở thủ công bên trong phiên người dùng: một điểm mount trống đã có dưới thư mục nhà, một tài khoản được ủy quyền trên máy chủ và một khóa máy chủ đã được xác minh qua quy trình được phê duyệt của bạn. Mount nó một lần bằng tay và sử dụng, vì điều đó chứng minh đường danh tính hoạt động trước khi có bất kỳ tự động hóa nào. Ghi lại những gì lệnh cần: tên tài khoản, đường dẫn xuất và tên máy chủ riêng. Giữ đúng ngữ cảnh đó cho phiên bản tự động, vì một mount thủ công hoạt động chính là đặc tả mà trình kích hoạt phải tái tạo.
sshfs [email protected]:/exports/team "$HOME/mnt/team"Coi mọi tên và đường dẫn trong dòng đó là chỗ giữ chỗ, kể cả tài khoản và xuất. Mật khẩu tài khoản VPN không tự động là thông tin xác thực của tài khoản lưu trữ.
Trình kích hoạt nên yêu cầu phiên làm gì
Cách bố trí được hỗ trợ là một yêu cầu từ sự kiện mạng đến phiên của người dùng, không phải thông tin xác thực đi vay. Giới hạn trình kích hoạt vào kết nối bạn muốn, theo tên hoặc UUID, thay vì bất kỳ giao diện nào tình cờ có tên tun0. Thay đổi duy nhất đó ngăn một hồ sơ thứ hai, một đường hầm thử nghiệm hoặc phiên gỡ lỗi của đồng nghiệp bắt đầu mount.
Hành động phía phiên nên tìm mount hiện có dự định rồi thực hiện một lần thử có giới hạn.
Đừng thử lại ở mỗi lần thăm dò và đừng tiếp tục yêu cầu thông tin xác thực khi máy chủ không thể truy cập, vì cả hai đều biến một gián đoạn tạm thời thành khóa tài khoản. Một dịch vụ không giám sát là thiết kế riêng với thông tin xác thực được phê duyệt và cách xác minh máy chủ riêng trong ngữ cảnh thực thi riêng, và nó không thể dựa vào việc ai đó đã mở khóa một tác nhân đồ họa. Hãy quyết định bạn đang xây cái nào trong hai trước khi chọn nơi mã sống. Phần lớn sự nhầm lẫn ở đây đến từ việc xây một cái và mong đợi cái kia.
Ngắt kết nối là sự kiện của hệ thống tệp, không phải sự kiện của hook
Một lần ngắt kết nối có kế hoạch nên hoàn tất các thao tác tệp và tháo mount khỏi phiên của người dùng đã mount bằng lệnh được hỗ trợ cho loại hệ thống tệp đó. Buộc tách ra để hook trả về nhanh là cách ứng dụng mất thư mục làm việc và người dùng mất niềm tin vào tự động hóa. Một mount đang bận cần quyết định ở mức ứng dụng, như đóng tệp hoặc dừng ghi, không phải tín hiệu mạnh hơn. Trạng thái thoát của hook không phải là thứ được tối ưu.
fusermount3 -u "$HOME/mnt/team"Mất đột ngột là trường hợp khác, và SSHFS ghi nhận rằng một thao tác bị ngắt có thể bị chặn trong khi vận chuyển kết nối lại.
Tùy chọn kết nối lại khôi phục vận chuyển, và các tệp được mở trước lần kết nối lại đó vẫn có thể trả về lỗi và cần mở lại. Một VPN quay lại không chứng minh gì về các handle trước đó hay công việc chưa lưu. Chọn hành vi bạn muốn khi có gián đoạn — tạm dừng, hiển thị lỗi hoặc cố ý mount lại — và thử nghiệm với các tệp dùng một lần trước khi bất cứ điều gì phụ thuộc vào nó.