nmcli cứ hỏi mật khẩu VPN: lưu bí mật ngay trên máy
Phiên desktop trả lời lời nhắc bằng một tác nhân bí mật. Qua SSH không ai làm vậy, nên hãy đặt thông tin đăng nhập vào tệp khóa và tải lại hồ sơ.
Cùng một hồ sơ, hai phiên: từ desktop nó kết nối được, còn qua SSH nó treo ở lời nhắc mà không gì có thể trả lời. Không có gì hỏng và không cài đặt nào bị mất. NetworkManager đang yêu cầu thông tin đăng nhập từ một tác nhân bí mật, và tác nhân bí mật là thành phần desktop không tồn tại trong phiên bạn đang dùng.
Chạy chuỗi lệnh bên dưới và đường hầm sẽ dựng lên mà không cần giao diện đồ họa, với lưu ý rằng việc lưu một bí mật thay đổi ai có thể dùng hồ sơ đó.
Xác nhận chẩn đoán trước khi thay đổi bất cứ điều gì
Sự khác biệt giữa kích hoạt tương tác và không tương tác chính là toàn bộ chẩn đoán. Nếu nmcli --ask connection up thành công trong khi kích hoạt thường bị kẹt, hồ sơ là đúng và nguồn của bí mật bị thiếu. Chỉ một so sánh đó giúp bạn khỏi phải viết lại một cấu hình đang chạy.
nmcli -f NAME,UUID,TYPE connection show
nmcli connection show "Office IPsec" | grep -i flags
Hãy đọc các cờ thay vì đoán chúng. Những giá trị có nghĩa "hỏi một tác nhân" là thứ bạn đang tìm, và tên khóa chính xác khác nhau giữa các plugin VPN vì chúng sống trong từ điển dữ liệu riêng của plugin. Hồ sơ FortiSSL và hồ sơ IPsec không nhất thiết dùng cùng tên, nên hãy làm việc từ đầu ra của hồ sơ của bạn.
Cũng xác nhận rằng gói plugin cho giao thức đó đã được cài. Plugin thiếu hiện ra như một loại kết nối không xác định hoặc như lỗi kích hoạt không nói gì về mật khẩu, và việc đuổi theo bí mật trong trạng thái đó lãng phí cùng một giờ hai lần. Một truy vấn gói rẻ hơn cả một buổi chiều sửa tệp khóa.
Chuyển bí mật vào tệp khóa
Tệp kết nối nằm dưới /etc/NetworkManager/system-connections/. Bí mật không được giữ ở đó theo mặc định, và đó chính là ý nghĩa của các cờ bạn vừa đọc. Đặt một cờ về không nói với NetworkManager rằng giá trị được lưu cùng hồ sơ thay vì được yêu cầu khi kích hoạt.
[vpn]
password-flags=0
[vpn-secrets]
password=YOUR-VPN-PASSWORD
Với hồ sơ có hai bí mật, mẫu được lặp lại: một cờ cho mỗi bí mật trong phần [vpn], và các giá trị trong [vpn-secrets]. Hồ sơ IPsec thường mang một khóa chia sẻ trước bên cạnh thông tin đăng nhập của người dùng, và plugin đặt tên chúng khác với trường mật khẩu thông thường, nên hãy sao chép tên khóa từ đầu ra của vpn.data thay vì từ một bài blog dùng plugin khác. Một tên khóa sai tạo ra hồ sơ tải được rồi thất bại khi xác thực, đọc y như một mật khẩu sai. So sánh tệp của bạn với một hồ sơ đang hoạt động của cùng plugin trước khi kết nối lại.
Đặt trong dấu ngoặc kép các giá trị có chứa dấu cách, dấu ngoặc kép hoặc dấu đô la. Một giá trị không có ngoặc kép chứa $ sẽ được đọc nguyên văn hoặc bị mở rộng tùy theo nơi nó được phân tích, và lỗi xác thực phát sinh trông như mật khẩu sai.
Sau đó sửa quyền sở hữu và chế độ của tệp. Các tệp khóa này được một dịch vụ có đặc quyền đọc, và một tệp mà người dùng khác có thể đọc bị coi là không đáng tin cậy, đó là lý do thường gặp khiến một hồ sơ đã sửa có vẻ bị bỏ qua. Chủ sở hữu root, chế độ 600, không ngoại lệ.
Tải lại, rồi kích hoạt
Tệp được đọc khi kết nối được tải, nên chỉ sửa nó là không đủ. Tải lại các hồ sơ rồi nâng kết nối lên một cách tường minh.
sudo nmcli connection reload
sudo nmcli connection up "Office IPsec"
Nếu việc tải lại không bắt được thay đổi, khởi động lại toàn bộ dịch vụ sẽ bắt được, và có những báo cáo đúng về điều đó. Hãy ưu tiên tải lại khi các liên kết khác quan trọng, vì khởi động lại dịch vụ cắt mọi kết nối được quản lý, và trên một máy chủ từ xa điều đó có thể kết thúc phiên của bạn trước khi đường hầm bạn muốn được dựng lên.
Dùng UUID khi tên không rõ ràng. Các máy có nhiều hồ sơ khách hàng tích tụ các bản gần trùng, và kích hoạt nhầm cái sai tạo ra thất bại trông như vấn đề thông tin đăng nhập.
Khi bí mật đã lưu không phải là vấn đề
Hồ sơ FortiSSL có thể thất bại ngay cả với thông tin đăng nhập đã lưu đúng vì ứng dụng khách không bao giờ tin chứng chỉ của cổng. Cài đặt đó không nằm trong hộp thoại chính; nó nằm sau các tùy chọn nâng cao của VPN, nơi nhập bản tóm lược của chứng chỉ tin cậy. Nếu nhật ký nhắc đến chứng chỉ thay vì mật khẩu, bạn đang ở nhánh này và không lượng sửa [vpn-secrets] nào giúp được.
Có thêm hai kiểm tra thuộc về đây. Xác nhận hồ sơ không được nhập từ một tệp vẫn trỏ đến đường dẫn mà plugin không đọc được, và xác nhận rằng hồ sơ là cái đang hoạt động chứ không phải bản trùng cũ. Cả hai đều tạo ra thất bại kích hoạt đọc như lỗi xác thực.
Quyết định xem việc lưu có chấp nhận được không
PSK và mật khẩu đã lưu có thể bị đọc bởi bất cứ thứ gì chạy với quyền root trên máy đó. Trên một máy bạn kiểm soát, đó là đánh đổi hợp lý cho một dịch vụ không có giao diện. Trên một máy chủ dùng chung, điều đó đáng để bàn, vì hồ sơ giờ chứa thông tin đăng nhập trước đây được bảo vệ bởi chùm khóa của desktop. Hãy hỏi ai khác có thể chạm tới root trên máy chủ đó trước khi quyết định, không phải sau khi thay đổi đã được áp dụng.
Nếu chính sách cấm lưu bí mật VPN, đừng làm yếu hồ sơ để một tác vụ cron chạy được. Chạy kết nối từ một phiên có tác nhân, hoặc dùng cơ chế khác cho việc tự động hóa.
Cuối cùng, ghi lại hồ sơ nào mang bí mật để không ai sao chép một cái sang máy tính xách tay mà không để ý. Một chú thích phía trên phần bí mật kèm ngày và lý do là đủ, và nó sẽ giúp ai đó tránh một buổi rà soát khó xử về sau.