Saya punya skrip Bash kecil yang saya gunakan untuk mengakses twitter dan memunculkan pemberitahuan Growl dalam situasi tertentu. Apa cara terbaik untuk menangani penyimpanan kata sandi saya dengan skrip?
Saya ingin mengkomit skrip ini ke git repo dan membuatnya tersedia di GitHub, tapi saya bertanya-tanya apa cara terbaik untuk menjaga kerahasiaan kata sandi / login saya saat melakukan ini. Saat ini, kata sandi disimpan dalam skrip itu sendiri. Saya tidak dapat menghapusnya tepat sebelum saya mendorong karena semua komitmen lama akan berisi kata sandi. Mengembangkan tanpa kata sandi bukanlah pilihan. Saya membayangkan bahwa saya harus menyimpan kata sandi dalam file konfigurasi eksternal, tetapi saya pikir saya akan memeriksa untuk melihat apakah ada cara yang mapan untuk menangani ini sebelum saya mencoba dan menyatukan sesuatu.
.gitignore
File tidak berlaku untuk file yang dilacak yang sudah ada di repositori. Misalnya,git add -u
akan menambahkan file yang diubah meskipun sudah ada.gitignore
.Suatu pendekatan dapat dengan mengatur kata sandi (atau kunci API) menggunakan variabel lingkungan. Jadi kata sandi ini di luar kendali revisi.
Dengan Bash, Anda dapat mengatur variabel lingkungan menggunakan
Pendekatan ini dapat digunakan dengan layanan integrasi berkelanjutan seperti Travis , kode Anda (tanpa kata sandi) yang disimpan dalam repositori GitHub dapat dieksekusi oleh Travis (dengan kata sandi Anda diset menggunakan variabel lingkungan).
Dengan Bash, Anda bisa mendapatkan nilai variabel lingkungan menggunakan:
Dengan Python, Anda bisa mendapatkan nilai variabel lingkungan menggunakan:
PS: ketahuilah bahwa itu mungkin agak berisiko (tapi ini praktik yang cukup umum) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/
PS2:
dev.to
artikel ini berjudul "Cara menyimpan kunci API dengan aman" mungkin menarik untuk dibaca.sumber
Apa yang dikatakan Greg tetapi saya akan menambahkan bahwa sebaiknya memeriksa file
foobar.config-TEMPLATE
.Itu harus berisi contoh nama, kata sandi atau info konfigurasi lainnya. Maka sangat jelas apa yang seharusnya berisi foobar.config, tanpa harus melihat semua kode yang nilainya harus ada
foobar.config
dan format apa yang harus mereka miliki.Seringkali nilai konfigurasi bisa tidak jelas, seperti string koneksi database dan hal serupa.
sumber
Berurusan dengan kata sandi dalam repositori akan ditangani dengan berbagai cara tergantung pada apa masalah Anda sebenarnya.
1. Jangan lakukan itu.
Dan cara untuk menghindari melakukan tercakup dalam beberapa balasan - .gitignore, config.example, dll
atau 2. Membuat repositori hanya dapat diakses oleh orang yang berwenang
Yaitu orang yang diizinkan untuk mengetahui kata sandi.
chmod
dan kelompok pengguna muncul di pikiran; juga masalah seperti apakah karyawan Github atau AWS diizinkan untuk melihat sesuatu jika Anda meng-host repositori atau server Anda secara eksternal?atau 3. Enkripsi data sensitif (tujuan balasan ini)
Jika Anda ingin menyimpan file konfigurasi yang berisi informasi sensitif (seperti kata sandi) di lokasi publik, maka file itu harus dienkripsi. File-file itu dapat didekripsi ketika dipulihkan dari repositori, atau bahkan digunakan langsung dari formulir terenkripsi mereka.
Contoh solusi javascript untuk menggunakan data konfigurasi terenkripsi ditunjukkan di bawah ini.
Jadi, Anda dapat memulihkan file konfigurasi terenkripsi dengan menulis beberapa baris Javascript.
Perhatikan bahwa menempatkan file
config.RSA
ke dalam repositori git akan secara efektif menjadikannya file biner dan karenanya akan kehilangan banyak manfaat dari sesuatu seperti Git, misalnya kemampuan untuk memilih perubahan pada file tersebut.Solusi untuk itu mungkin mengenkripsi pasangan nilai kunci atau mungkin hanya nilai. Anda dapat mengenkripsi semua nilai, misalnya jika Anda memiliki file terpisah untuk informasi sensitif, atau mengenkripsi hanya nilai-nilai sensitif jika Anda memiliki semua nilai dalam satu file. (Lihat di bawah)
Contoh saya di atas agak tidak berguna bagi siapa pun yang ingin melakukan tes dengannya, atau sebagai contoh untuk memulai karena mengasumsikan adanya beberapa kunci RSA dan file konfigurasi terenkripsi
config.RSA
.Jadi, inilah beberapa baris kode tambahan yang ditambahkan untuk membuat kunci RSA dan file konfigurasi untuk dimainkan.
Mengenkripsi nilai saja
Anda dapat mendekripsi file konfigurasi dengan nilai terenkripsi menggunakan sesuatu seperti ini.
Dengan setiap item konfigurasi pada baris terpisah (mis.
Hello
DanGoodbye
atas), Git akan mengenali lebih baik apa yang terjadi dalam file dan akan menyimpan perubahan pada item informasi sebagai perbedaan daripada file lengkap. Git juga akan dapat mengelola penggabungan dan pemilihan ceri dll dengan lebih baik.Namun semakin Anda ingin mengubah kontrol perubahan pada informasi sensitif, semakin Anda bergerak menuju solusi SAFE REPOSITORY (2) dan menjauh dari solusi ENCRYPTED INFO (3).
sumber
Seseorang dapat menggunakan Vault yang mengamankan, menyimpan, dan mengontrol akses ke token, kata sandi, sertifikat, kunci API, dll. Misalnya Ansible menggunakan Vault Ansible yang berkaitan dengan kata sandi atau sertifikat yang digunakan dalam buku pedoman
sumber
Berikut adalah teknik yang saya gunakan:
Saya membuat folder di folder rumah saya bernama:
.config
Dalam folder itu saya menempatkan file konfigurasi untuk sejumlah hal yang ingin saya eksternalisasi kata sandi dan kunci.
Saya biasanya menggunakan sintaks nama domain terbalik seperti:
com.example.databaseconfig
Kemudian dalam skrip bash saya melakukan ini:
The
|| exit 1
menyebabkan script untuk keluar jika tidak mampu memuat file konfigurasi.Saya menggunakan teknik itu untuk skrip bash, python, dan semut.
Saya cukup paranoid dan tidak berpikir bahwa file .gitignore cukup kuat untuk mencegah check-in yang tidak disengaja. Plus, tidak ada yang memonitornya, jadi jika check-in benar-benar terjadi, tidak ada yang akan mengatasinya.
Jika aplikasi tertentu memerlukan lebih dari satu file, saya membuat subfolder daripada satu file.
sumber
Jika Anda menggunakan ruby pada rel, permata Figaro sangat bagus, mudah, dan dapat diandalkan. Ini memiliki faktor sakit kepala yang rendah dengan lingkungan produksi juga.
sumber
Percaya tapi verifikasi.
Dalam
.gitignore
hal ini akan mengecualikan direktori "aman" dari repo:Tapi saya berbagi paranoia @ Michael Potter . Jadi untuk memverifikasi .gitignore, berikut ini adalah unit test Python yang akan menaikkan klaxon jika direktori "aman" ini diperiksa. Dan untuk memeriksa cek, direktori yang sah juga diuji:
sumber