sudo, &, -b hay --daemon: cách đưa một ứng dụng khách OpenVPN ra nền
Dấu ampersand giải phóng terminal chứ không giải phóng đăng nhập. Hãy so sánh sudo -b, --daemon và một instance dịch vụ theo việc ai sở hữu tiến trình và ai trả lời các lời nhắc.
Cụm từ “chạy nó ở chế độ nền” che giấu hai câu hỏi. Câu thứ nhất là liệu người dùng này có thể khởi động một tiến trình đặc quyền hay không; câu thứ hai là liệu phiên có thể tiếp tục mà không ai gõ vào terminal hay không. Dấu ampersand của shell không trả lời cả hai, và một script lưu mật khẩu sudo trong biến trả lời kém câu thứ nhất và để nguyên câu thứ hai. Tách hai câu hỏi ra, các lựa chọn sẽ dễ so sánh.
So sánh ba ứng viên theo quyền sở hữu, không theo sự tiện lợi.
Ba cách rời terminal, ba chủ sở hữu khác nhau
Thêm dấu ampersand vào một lệnh yêu cầu shell chạy nó như một công việc nền, và công việc vẫn thuộc về shell đó. sudo có thể hỏi trước cả khi chương trình bắt đầu, và OpenVPN có thể hỏi sau đó về cụm mật khẩu khóa hoặc đăng nhập. Đưa một lệnh đang chờ nhập liệu ra nền tạo ra một tiến trình chờ một terminal mà không ai theo dõi. Terminal được giải phóng; tương tác thì không.
Đó là lựa chọn rẻ nhất và là lựa chọn thất bại khó hiểu nhất, vì lời nhắc xuất hiện ở nơi mà người vận hành đã rời đi.
sudo -b không phải trình xử lý thông tin xác thực
sudo -b chạy lệnh ở chế độ nền theo góc nhìn của chính sudo, nghe như tính năng còn thiếu nhưng không phải. Theo hướng dẫn của sudo, các lệnh tương tác thường hoạt động sai trong chế độ đó, và điều khiển công việc của shell không thể quản lý các tiến trình mà nó tạo ra. Nó di chuyển tiến trình mà không cho nó cách trả lời câu hỏi. Không có gì trong đó cung cấp cụm mật khẩu khóa riêng hay đăng nhập cổng.
Nếu kết nối cần tương tác, giải pháp là một cơ chế xác thực phi tương tác được hỗ trợ, không phải một cách khác để khởi chạy cùng lời nhắc.
--daemon thay đổi chương trình, không thay đổi đăng nhập
--daemon yêu cầu chính OpenVPN tách ra sau khi khởi tạo. Hướng dẫn phiên bản 2.6 ghi chú rằng việc chuyển hướng syslog xảy ra khi tùy chọn được phân tích, dù việc tách ra diễn ra sau đó, nên các thông báo có thể ngừng xuất hiện trong terminal sớm hơn dự kiến. Sự im lặng sau điểm đó không chứng minh gì về đường hầm. Thêm một --log hoặc --log-append rõ ràng để đầu ra rơi vào nơi bạn có thể đọc.
Chế độ daemon cũng loại bỏ bảng điều khiển vĩnh viễn. Một khóa riêng được bảo vệ cần askpass trong chế độ đó, và thông tin xác thực nhập từ bảng điều khiển kết hợp với tùy chọn bộ nhớ đệm có thể để lần xác thực lại sau đó không còn nơi để hỏi. Kiểm tra mô hình xác thực với phiên bản đã cài đặt trước khi cho rằng khởi động nền sẽ sống sót qua lần gia hạn khóa đầu tiên.
Xác thực sudo mang lại gì và không mang lại gì
sudo -v xác thực hoặc làm mới thông tin xác thực cục bộ đã lưu trong bộ nhớ đệm, xác thực nếu chính sách yêu cầu. Nó không khởi động OpenVPN, không xác thực với cổng và không đảm bảo một lệnh sau đó trong script được phép. sudo -n có nghĩa ngược lại: đừng hỏi, hãy thất bại. Điều đó làm cho lỗi ủy quyền cục bộ trở nên rõ ràng, hữu ích, và nó không nói gì về những gì OpenVPN sẽ yêu cầu sau này.
Không lựa chọn nào là lý do để cấp lệnh không mật khẩu cho mọi người hoặc đưa mật khẩu quản trị vào một script.
Ưu tiên một chủ sở hữu có thể quan sát được
Đối với một đường hầm thuộc sở hữu máy, hãy dùng instance dịch vụ mà bản phân phối hỗ trợ. Chủ sở hữu đó cung cấp khởi động, dừng, trạng thái và nhật ký, và tồn tại sau khi phiên của bạn kết thúc. Việc lắp ghép chạy nền của shell, daemon hóa và vòng lặp khởi động lại quanh nhau tạo ra ba chủ sở hữu cho một đường hầm và không có câu trả lời rõ ràng cái nào đang chạy.
Dù bạn chọn gì, hãy xác minh tài nguyên mà đường hầm tồn tại vì nó. Một yêu cầu khởi động thành công là sự kiện của tiến trình, không phải bằng chứng của một kết nối đang hoạt động.