openvpn binary nào đang chạy? Kiểm tra đường dẫn khởi chạy
Tên lệnh, đường dẫn dịch vụ và tệp gói có thể là ba đối tượng khác nhau. Kiểm tra đường dẫn khởi chạy, xác minh tệp của gói, rồi gỡ bỏ lớp bọc.
Một giải pháp cũ đã chuyển tệp thực thi OpenVPN sang chỗ khác và để lại một lớp bọc shell tại đường dẫn ban đầu. Nhiều tháng sau, một bản nâng cấp đến, và việc hoàn tác giải pháp đó trở thành trò đoán xem tệp nào mới thực sự là ứng dụng khách. Tên lệnh, tệp thực thi được cấu hình trong dịch vụ và chính danh sách tệp của gói đều có thể trỏ tới những đối tượng khác nhau, và sửa một trong số đó mà không sửa những cái còn lại tạo ra một máy chủ trông như đã được sửa nhưng lại hoạt động tệ hơn.
Bắt đầu từ đường dẫn mà dịch vụ khởi chạy
Một terminal và một unit systemd không phân giải tệp thực thi theo cùng một cách. Shell tìm trong PATH; unit nêu tên một đường dẫn, và các ghi đè drop-in có thể thay thế nó mà không chạm vào tệp bạn đang đọc. Chính khác biệt đó giải thích phần lớn sự nhầm lẫn trong bài này. Nó cũng quyết định tệp nào mà bản sửa của bạn phải nhắm tới.
Hỏi unit xem nó chạy gì, kể cả các drop-in sửa đổi nó, và đọc dòng ExecStart thu được thay vì đoạn mà bạn cho là có thẩm quyền. Sau đó lần theo đường dẫn đó qua bất kỳ liên kết tượng trưng nào tới tệp cuối cùng. Một lớp bọc kết thúc bằng exec vào một thư mục ẩn là cách bố trí phổ biến của những bản sửa cũ này.
Ghi lại đường dẫn đã phân giải trước khi thay đổi bất cứ điều gì.
systemctl cat [email protected] | grep -n 'ExecStart'
readlink -f "$(command -v openvpn)"So sánh tên lệnh với đường dẫn dịch vụ
Hai câu trả lời thường khác nhau, và sự khác biệt đó không tự động là lỗi. Một plugin của NetworkManager có thể khởi chạy đường dẫn riêng của nó, và một container có thể gắn thêm một đường dẫn khác.
Điều quan trọng là biết chủ sở hữu nào khởi chạy tiến trình phục vụ lưu lượng. Nếu unit chạy /usr/local/sbin/openvpn-wrapper trong khi shell của bạn phân giải /usr/sbin/openvpn, việc sửa tệp thứ hai không thay đổi gì ở dịch vụ.
Hỏi xem gói nào sở hữu từng ứng viên, rồi quyết định tệp do gói quản lý hay được đặt cục bộ. Một tệp không có gói sở hữu là tệp mà ai đó đã cố ý đặt vào, và nó xứng đáng có tên, chủ sở hữu và lý do trước khi bị xóa. Lỗi ngược lại cũng thường gặp: ghi đè tệp của gói bằng một binary cũ đã lưu vì một bài đăng trên diễn đàn dùng cùng thư mục.
Để cơ sở dữ liệu gói nói về các tệp của gói
Khi phần mềm đến từ một gói Debian, cơ sở dữ liệu gói có thể cho bạn biết các tệp của nó còn khớp với những gì đã cài hay không. Đây là một câu hỏi hẹp về tính toàn vẹn, không phải phán quyết bảo mật, và sự khác biệt đó quan trọng khi bạn quyết định sửa gì. Sự không khớp nghĩa là tệp đã thay đổi sau khi cài, có thể là giải pháp cũ của bạn hoặc một chỉnh sửa cục bộ hợp lệ. Kết quả không phân định cái nào, nên hãy đọc nó như một gợi ý chứ không phải kết luận.
Chạy xác minh và đọc kết quả thay vì coi một kết quả rỗng là bằng chứng của bất cứ điều gì.
dpkg -S /usr/sbin/openvpn
dpkg --verify openvpnHướng dẫn dpkg ghi rằng việc xác minh so sánh các tệp đã cài với siêu dữ liệu được ghi lại cục bộ, dùng các checksum đã lưu khi có. Nó nhận ra một tệp của gói đã bị thay đổi, và nó không thể cho bạn biết liệu một binary khác có đang được khởi chạy thay thế hay không.
Ghi lại trạng thái trước khi sửa
Thu thập đường dẫn khởi chạy đã phân giải, quan hệ của tệp với gói, vị trí của lớp bọc và bản ghi thay đổi đã đưa nó vào. Sao chép lớp bọc vào nơi được bảo vệ nếu nó chứa công việc tích hợp sẽ cần sau này.
Đừng dán nội dung của lớp bọc vào một luồng hỗ trợ trước khi đọc nó, vì những script này đôi khi mang thông tin đăng nhập hoặc chi tiết cổng.
Ghi lại dịch vụ dùng những hồ sơ nào và ai đang kết nối trong khi bạn làm việc, vì việc khởi động lại đường hầm có thể cắt phiên bạn đang dùng để quản trị máy chủ.
Xác minh khởi chạy, rồi gỡ bỏ lớp bọc
Sau khi sửa, khởi động dịch vụ và xác nhận tiến trình đang chạy đúng đường dẫn bạn định. Một truy vấn phiên bản chạy bằng tay chứng minh tệp hoạt động; nó không chứng minh unit đang dùng tệp đó.
Sau đó kết nối lại một máy khách và kiểm tra xem hồ sơ còn xác thực được không, vì việc thay binary mà bỏ qua các tùy chọn ban đầu sẽ thất bại theo cách trông giống sự cố chứng chỉ.
Gỡ bỏ lớp bọc bị thay thế thông qua chính bản ghi thay đổi đã đưa nó vào. Bản sửa hoàn tất nêu rõ tệp thực thi nào đang chạy, vì sao, và tệp nào đã bị gỡ; khôi phục lại một tên tệp rồi hy vọng không phải là cùng một việc.