Các script cung cấp báo lỗi rồi tiếp tục còn tệ hơn những script không bao giờ chạy. Việc thiết lập máy khách chạm vào các khóa được bảo vệ, một danh tính tại cổng và một dịch vụ có thể đang phục vụ lưu lượng. Mỗi thứ đó cần một điều kiện dừng, và script phải biết mình đã tới giai đoạn nào khi dừng lại.

Coi toàn bộ là một giao dịch với năm điểm kiểm tra, và khiến mỗi điểm kiểm tra tự từ chối tiếp tục.

Sửa đầu vào trước khi chạm vào hệ thống tệp

Bắt đầu bằng một hợp đồng rõ ràng: một danh tính, một nguồn hồ sơ, một chủ sở hữu dịch vụ dự định. Xác minh rằng hồ sơ tồn tại, rằng chứng chỉ và khóa mà nó tham chiếu có thể đọc được, và rằng thư mục đích thuộc về gói mong đợi. Một đường dẫn phân giải được không phải là bằng chứng rằng tài liệu phía sau nó đã đầy đủ.

Từ chối sớm các biến rỗng. Một $DEVICE chưa được đặt mà mở rộng thành rỗng sẽ biến install -m 400 $KEY /etc/openvpn/client/ thành một bản sao nhắm vào thư mục, và lỗi đến sau đó dưới dạng một dịch vụ không thể đọc khóa của nó.

Lắp bộ hồ sơ trong một thư mục chuẩn bị

Trước tiên hãy dựng bộ đầy đủ ở một nơi riêng tư: hồ sơ, CA, chứng chỉ máy khách, khóa và mọi trình trợ giúp mà hồ sơ gọi tới. Sao chép bằng install -m 400 -o root -g root để quyền được đặt ngay khi tạo chứ không phải sau đó. Sau đó kiểm tra các tham chiếu bên trong hồ sơ, vì một dòng ca hoặc key tương đối được phân giải theo thư mục làm việc của unit ngay khi dịch vụ khởi động. Không nên ghi gì vào thư mục đang hoạt động cho tới khi toàn bộ bộ hồ sơ được xác thực.

Ghi lại một dấu vân tay không bí mật về những gì lần chạy này tạo ra, ví dụ sha256sum office.conf được lưu cạnh một dấu phiên bản. Chính giá trị duy nhất đó cho phép một lần chạy lại phân biệt bản cập nhật với việc không làm gì.

Hoán đổi nguyên tử và giữ bộ trước đó

Di chuyển bộ đã chuẩn bị vào vị trí bằng một thao tác duy nhất ở nơi hệ thống tệp cho phép, và giữ bộ trước đó đã được rà soát dưới một tên có dấu thời gian. Một bản sao dở dang để lại hồ sơ mới bên cạnh khóa cũ tạo ra một dịch vụ xác thực bằng danh tính sai và không ghi lại gì hữu ích về nguyên nhân. Nếu việc hoán đổi không thể nguyên tử, hãy sắp thứ tự di chuyển để hồ sơ đến sau cùng.

Khi đích đã tồn tại, hãy quyết định rõ ràng lần chạy này là một bản cập nhật, một lần chạy lại y hệt, hay một xung đột với hồ sơ của thiết bị khác. Ghi đè âm thầm một hồ sơ thuộc về danh tính khác chính là cách hai máy kết thúc việc dùng chung một chứng chỉ. Thay vào đó hãy từ chối lần chạy và nêu tên chủ sở hữu xung đột.

Kích hoạt một chủ sở hữu và chứng minh điều đó

Chọn một đường kích hoạt duy nhất, hoặc phiên bản systemd hoặc NetworkManager, và dùng nó nhất quán. Khởi động một tiến trình openvpn không được quản lý bên cạnh một unit đã kích hoạt cho ra hai đường hầm, các cập nhật DNS cạnh tranh và không có câu trả lời rõ ràng về việc lệnh dừng nhắm vào đường nào. Sau khi kích hoạt, kiểm tra systemctl is-active openvpn-client@office, rồi tuyến đến tiền tố từ xa, rồi resolvectl status cho bộ phân giải mà đường hầm đã cài. Kết thúc bằng việc chạm tới một tài nguyên mà đường hầm tồn tại vì nó.

Một tiến trình đang chạy và một biểu tượng khay màu xanh là sự thật về tiến trình, không phải bằng chứng rằng danh tính và chính sách lưu lượng đã sống sót qua việc bàn giao.

Chạy lại và ngừng sử dụng là hai quy trình riêng

Lần chạy thứ hai nên hội tụ về cùng những tệp đã rà soát và cùng chủ sở hữu, không tạo tài khoản thứ hai hay daemon thứ hai. Ngừng sử dụng là thủ tục riêng: dừng đúng chủ sở hữu, lưu trữ hoặc xóa hồ sơ cục bộ theo chính sách, và thu hồi danh tính tại cổng. Xóa một tệp khóa cục bộ không thu hồi một bản sao đã rời khỏi máy.

Giữ một đường phục hồi không phụ thuộc vào đường hầm, chẳng hạn truy cập bảng điều khiển hoặc một tuyến quản trị thứ hai. Một thay đổi cung cấp khóa bạn ra ngoài máy là một thay đổi thất bại ngay cả khi mọi giai đoạn đã báo thành công.

Script đáng giữ lại là một giao dịch quanh quyền sở hữu và bằng chứng. Một danh sách ngắn các lệnh sao chép đặc quyền không phải là cùng một thứ.

Bài viết liên quan