Hồ sơ OpenVPN trong Git: cần bỏ gì trước khi commit
Đọc tệp để tìm khóa nhúng, quyết định những gì kho lưu trữ được phép phân phối, và thu hồi trước khi bạn viết lại lịch sử.
Hồ sơ phục vụ hai mục đích cùng lúc: chúng ghi lại cấu hình kết nối và mang theo một gói thông tin xác thực đang hoạt động. Phần mở rộng tệp không cho bạn biết mình đang cầm loại nào. Hãy đọc nội dung trước khi quyết định rằng nó thuộc về một kho lưu trữ.
Các bước dưới đây giả định một mẫu máy khách đang được xem xét để đưa vào kiểm soát phiên bản. Hãy thực hiện theo thứ tự và dừng lại trước khi commit thứ bạn không thể thu hồi.
Đọc tệp bạn sắp đưa vào chỉ mục
Bắt đầu từ các byte thực tế, vì một hồ sơ tham chiếu tới các tệp riêng biệt trông rất khác so với hồ sơ nhúng chúng. Hãy tìm các dấu khối PEM và các thẻ nội tuyến có tên ca, cert, key, tls-auth và tls-crypt, và cùng một lượt kiểm tra sẽ cho thấy cả hai trường hợp. Khóa riêng tư đã mã hóa vẫn được coi là tài liệu nhạy cảm, và khóa tls-auth hoặc tls-crypt dùng chung là thông tin xác thực dù không phải danh tính của người dùng. Áp dụng cùng cách rà soát cho mọi thứ được đưa vào chỉ mục cùng với hồ sơ, kể cả kho lưu trữ và tập lệnh cài đặt có tham chiếu tới tệp thông tin xác thực.
Sau đó hãy nhìn vào tập đã đưa vào chỉ mục chứ không phải cây làm việc. git diff --cached cho biết commit sẽ thực sự chứa gì, và đó là phiên bản duy nhất có ý nghĩa cho quyết định này.
Quyết định kho lưu trữ được phân phối những gì
Một mẫu có thể mang các cấu hình dùng chung đã được rà soát và các chỗ giữ tên cho mọi thứ một người nhận được khi đăng ký. Điều nó không thể mang là một danh tính dùng được, vì kho lưu trữ được phân phối cho tất cả những ai đọc được nó, kể cả tự động hóa. Kho riêng tư thu hẹp đối tượng nhưng không thay đổi câu hỏi liệu mỗi người đọc có được phép cho thông tin xác thực đó hay không.
Một quy tắc bỏ qua ngăn các lần thêm trong tương lai và không làm gì với những gì đã được ghi lại. Sự bất đối xứng đó đáng được thấm nhuần trước lần commit đầu tiên chứ không phải sau lần thứ mười. Tên và địa chỉ hạ tầng là một phán đoán riêng: chúng không phải bí mật xác thực, nhưng có thể tiết lộ nhiều hơn những gì một nhóm định công bố. Hãy đưa ra quyết định đó một cách rõ ràng thay vì phân loại từng dòng thành mật khẩu hay công khai.
Nếu tài liệu đã nằm trong lịch sử
Xóa dòng trong một commit mới vẫn để nguyên phiên bản cũ cho bất kỳ ai tải nó về. Hãy coi việc lộ lọt là có thật: xác định loại thông tin xác thực, rồi tìm cơ quan có thể vô hiệu hóa nó. Chứng chỉ máy khách bị thu hồi và danh sách thu hồi được tạo lại; khóa kênh điều khiển dùng chung được thay trên máy chủ và trên mọi máy khách sử dụng nó.
Hai trường hợp có bán kính ảnh hưởng rất khác nhau, và kế hoạch nên nêu rõ bạn đang thực hiện trường hợp nào trước khi bắt đầu. Hãy định vị commit đã đưa tài liệu vào bằng một tìm kiếm kiểu git log --all -S 'BEGIN PRIVATE KEY', để phạm vi dọn dẹp được biết chứ không phỏng đoán. Bản sao của đồng nghiệp hoặc một fork có thể đã giữ đối tượng cũ, vì thế việc thu hồi đến trước và dọn dẹp đến sau.
Chỉ dọn dẹp sau khi đã khoanh vùng
Viết lại lịch sử thay đổi mọi commit sau commit bạn sửa, nên trước hết cần sự đồng ý của chủ kho lưu trữ và những người làm việc trong đó. Một lần push cưỡng bức không phải là sửa chữa; đó là sự kiện phối hợp với rủi ro hoàn tác riêng. Hãy lên lịch, sao lưu và nói với nhóm khi nào nó diễn ra.
Sau đó, hãy xác minh cây hiện tại và phần lịch sử còn lại thay vì tin vào bản tóm tắt của công cụ.
Giữ kết quả dưới dạng hai hiện vật: mẫu an toàn để chia sẻ và bản kiểm kê thông tin xác thực được cấp trong quá trình đăng ký. Không cái nào đòi hỏi một danh tính dùng được phải sống trong kho lưu trữ.
Sự tách biệt đó chính là cách khắc phục thật sự, và nó tồn tại qua người tiếp theo muốn commit một hồ sơ.