Bạn hoàn toàn đúng khi muốn mã hóa tệp cài đặt nhạy cảm của mình trong khi vẫn duy trì tệp trong kiểm soát phiên bản. Như bạn đã đề cập, giải pháp tốt nhất sẽ là một giải pháp trong đó Git sẽ mã hóa trong suốt các tệp nhạy cảm nhất định khi bạn đẩy chúng sao cho cục bộ (tức là trên bất kỳ máy nào có chứng chỉ của bạn), bạn có thể sử dụng tệp cài đặt, nhưng Git hoặc Dropbox hoặc bất cứ ai lưu trữ các tệp của bạn dưới VC không có khả năng đọc thông tin trong bản rõ.
Hướng dẫn về mã hóa / giải mã trong suốt trong quá trình đẩy / kéo
Gist này https://gist.github.com/873637 hiển thị một hướng dẫn về cách sử dụng trình điều khiển bộ lọc smudge / clean của Git với openssl để mã hóa trong suốt các tệp được đẩy. Bạn chỉ cần làm một số thiết lập ban đầu.
Tóm tắt về cách thức hoạt động
Về cơ bản bạn sẽ tạo một .gitencrypt
thư mục chứa 3 tập lệnh bash,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
được Git sử dụng để giải mã, mã hóa và hỗ trợ Git diff. Một cụm mật khẩu chính và muối (cố định!) Được xác định trong các tập lệnh này và bạn PHẢI đảm bảo rằng .gitencrypt không bao giờ thực sự được đẩy. clean_filter_openssl
Kịch bản ví dụ :
#!/bin/bash
SALT_FIXED=<your-salt> # 24 or less hex characters
PASS_FIXED=<your-passphrase>
openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED
Tương tự cho smudge_filter_open_ssl
và diff_filter_oepnssl
. Xem ý chính.
Repo của bạn với thông tin nhạy cảm nên có tệp .gitattribution (không được mã hóa và bao gồm trong repo) tham chiếu thư mục .gitencrypt (chứa mọi thứ Git cần để mã hóa / giải mã dự án một cách trong suốt) và hiện diện trên máy cục bộ của bạn.
.gitattribute
nội dung:
* filter=openssl diff=openssl
[merge]
renormalize = true
Cuối cùng, bạn cũng sẽ cần thêm nội dung sau vào .git/config
tệp của mình
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
Bây giờ, khi bạn đẩy kho chứa thông tin nhạy cảm của mình sang kho lưu trữ từ xa, các tệp sẽ được mã hóa trong suốt. Khi bạn lấy từ một máy cục bộ có thư mục .gitencrypt (chứa cụm mật khẩu của bạn), các tệp sẽ được giải mã trong suốt.
Ghi chú
Tôi nên lưu ý rằng hướng dẫn này không mô tả cách chỉ mã hóa tệp cài đặt nhạy cảm của bạn. Điều này sẽ mã hóa toàn bộ kho lưu trữ được đẩy đến máy chủ VC từ xa và giải mã toàn bộ kho lưu trữ để nó được giải mã hoàn toàn cục bộ. Để đạt được hành vi bạn muốn, bạn có thể đặt các tệp nhạy cảm cho một hoặc nhiều dự án trong một nhạy cảm. Bạn có thể điều tra cách thức kỹ thuật mã hóa trong suốt này hoạt động với các mô đun con Git http://git-scm.com/book/en/Git-Tools-Submodules nếu bạn thực sự cần các tệp nhạy cảm trong cùng một kho lưu trữ.
Về mặt lý thuyết, việc sử dụng cụm mật khẩu có thể dẫn đến các lỗ hổng vũ lực nếu kẻ tấn công có quyền truy cập vào nhiều tệp / mã được mã hóa. IMO, xác suất của điều này là rất thấp. Như một lưu ý ở cuối hướng dẫn này đề cập, việc không sử dụng cụm mật khẩu cố định sẽ dẫn đến các phiên bản cục bộ của một repo trên các máy khác nhau luôn cho thấy những thay đổi đã xảy ra với 'trạng thái git'.