Dịch vụ khởi động, một máy khách kết nối, và không bao giờ có tuyến nào xuất hiện ở phía máy chủ. Hoặc daemon từ chối khởi động và nêu tên một lệnh mà nó không thể thực thi. Cả hai kết quả đều tuân theo cùng ba dòng, thường được sao chép cùng nhau từ một hướng dẫn gia cố: chuyển sang tài khoản không có đặc quyền, bỏ nhóm và thay đổi gốc của hệ thống tệp. Chỉ một trong ba dòng che giấu tệp, và chỉ một trong số đó tước quyền thay đổi bảng định tuyến. Tách chúng ra chính là cách bạn học được dòng nào bạn thực sự muốn.

Nhà tù lấy đi điều gì mà daemon vẫn cần

Việc thay đổi gốc diễn ra sau khi khởi động, nên daemon giữ mọi thứ nó đã mở và mất mọi thứ nó sẽ mở sau đó. Bất kỳ trợ giúp nào mà kết nối chạy sau điểm đó đều phải tồn tại bên trong gốc mới, cùng với các thư viện chia sẻ mà nó tải. Một nhà tù dựng từ tệp cấu hình và chứng chỉ không có cả hai.

Chuyển sang tài khoản không có đặc quyền là một hạn chế riêng. Một tiến trình đã từ bỏ root có thể không thay đổi được tuyến hay đưa một giao diện lên, ngay cả khi tệp nhị phân nằm ngay đó, nên hai lỗi phải được chẩn đoán riêng.

Ba điều kiện quyết định bạn cần bản sửa nào

Điều kiện đầu tiên là cách bản dựng của bạn cài đặt tuyến. Các bản OpenVPN mới cấu hình giao diện và bảng định tuyến ngay trong tiến trình, trong khi các gói cũ hơn và cấu hình tự tạo dựa vào công cụ bên ngoài hoặc tập lệnh up và down. Nếu nhật ký nêu tên một lệnh, tức là có công cụ bên ngoài tham gia và nhà tù đang che nó. Nếu nhật ký thay vào đó hiển thị lỗi quyền, thì vấn đề là tài khoản.

Điều kiện thứ hai là bảo trì. Nhà tù có tệp nhị phân được sao chép phải được làm mới mỗi khi gói cung cấp chúng được nâng cấp, nếu không lần nâng cấp đầu tiên sẽ để lại một đường hầm hỏng. Điều kiện thứ ba là liệu một kiểm soát cụ thể có thực sự cần chroot hay không; nếu yêu cầu thực chất là về tách đặc quyền, thì chỉ việc đổi tài khoản có thể đã đủ.

Signal in the logOther side of the boundaryRepair direction
Command not found after startupBinary and its libraries absent inside the new rootPopulate the jail, or drop the chroot line
Operation not permittedAccount lost the privilege to edit routesKeep the account privileged, or pre-create routes elsewhere
No such deviceJail lacks the tun device nodeCreate the node inside, or open it before the root change

Nhà tù hoạt động được phải chứa gì

Một nhà tù chạy lệnh cần tệp nhị phân, mọi thư viện mà nó liên kết, và mọi nút thiết bị mà daemon mở muộn. Hãy sao chép các phần và kiểm thử chúng mà không có VPN trong bức tranh:

ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up

Lệnh đầu tiên liệt kê các phụ thuộc, và đó chính là lệnh mà mọi người bỏ qua. Một tệp nhị phân được sao chép mà không tìm thấy thư viện sẽ hỏng với thông báo khác với tệp nhị phân bị thiếu, và cả hai đều trông như lỗi OpenVPN khi đọc từ phía máy khách. Chạy lệnh bằng tay trong nhà tù tái tạo lỗi mà không cần khởi động lại dịch vụ.

Cũng hãy sao chép cấu hình, chứng chỉ và bất kỳ CRL nào vào nhà tù, vì một tệp mà daemon mong đọc lại sau khi khởi động sẽ không được tìm thấy khi gốc đã thay đổi. Ghi lại những gì bạn đã sao chép, vì lần nâng cấp gói mạng tiếp theo sẽ thay thế bản gốc và để nhà tù trên bản sao cũ.

Thay vào đó hãy thu nhỏ việc gia cố

Nếu nhà tù chỉ tồn tại vì một hướng dẫn nói vậy, thì việc bỏ đúng dòng đó trong khi giữ các hạn chế tài khoản là một kết quả có thể bảo vệ được. Daemon giữ nguyên góc nhìn hệ thống tệp và thoát khỏi vấn đề, còn việc hạ đặc quyền vẫn loại bỏ root khỏi tiến trình sống lâu.

Hãy ghi lại điều gì còn lại, và tại sao. Một cấu hình âm thầm mất một kiểm soát mà không có ghi chú chính là cách gia cố trôi dạt, và lần kiểm toán tiếp theo sẽ hỏi tại sao dòng đó biến mất.

Hãy chia ba dòng trước khi chọn

Sao chép cấu hình, vô hiệu hóa cả ba chỉ thị và xác nhận rằng một máy khách kết nối và các tuyến mong đợi xuất hiện. Sau đó bật lại chỉ các dòng tài khoản, rồi riêng chroot. Bước mà đường hầm đứt chỉ ra ranh giới, và bạn tránh phải dựng lại một nhà tù chưa bao giờ là nguyên nhân.

Khi nó định tuyến trở lại, hãy chạy một phiên máy khách với độ chi tiết cao hơn và đọc dòng nêu tên lệnh hoặc quyền đã thất bại. Dòng đó đáng giá hơn thời gian chờ mà máy khách cuối cùng báo cáo.

Bài viết liên quan