Apa cara paling tidak aman untuk menyimpan kata sandi yang digunakan oleh skrip?

13

Saya memiliki skrip Bash yang secara otomatis mengautentikasi dengan layanan menggunakan nama pengguna dan kata sandi saya. Kredensial saat ini disimpan sebagai teks biasa di dalam skrip.

Peringatan apa yang harus saya ambil untuk paling aman menyimpan kredensial ini sambil tetap mengizinkan akses skrip?

Poin klarifikasi:

  • Saya mengerti bahwa, jika tersedia, metode otentikasi lain harus digunakan sebagai gantinya. Saya masih ingin tahu apa yang harus dilakukan jika otentikasi kata sandi adalah satu-satunya pilihan.
  • Tidak menyimpan kata sandi sama sekali bukanlah jawaban yang dapat diterima di sini. Saya bertanya tentang kasus di mana skrip harus memiliki akses tanpa pengawasan ke kata sandi.
ændrük
sumber
2
tidak menyimpan bagian kode sandi dari kredensial, mungkin?
Thomas Ward
Tidakkah itu bekerja untuk mengakses GNOME Keyring atau yang serupa?
Firefeather
Mungkin jika Anda bisa menyimpannya sebagai hash kriptografi (seperti SHA-1), itu akan menyenangkan.
Anonim
ROT13 akan mengaburkannya, tetapi TIDAK akan mengamankannya dengan cara apa pun.
Anonim
@Anonim Jika kata sandi disimpan sebagai hash kriptografis, bagaimana Anda menyarankan untuk mengambilnya?
ændrük

Jawaban:

8

Layanan apa? Layanan tertentu memiliki metode lain untuk mengotentikasi, misalnya kunci SSH untuk SSH bersama dengan agen SSH.

Saya akan menyimpan kata sandi terpisah dari skrip, dan memastikan bahwa semua komponen jalur memiliki izin yang benar. Misalnya, pastikan bahwa di jalan /path/to/file, /, /pathdan /path/todimiliki oleh pengguna Anda percaya ( root) dan bahwa ini tidak ditulis oleh seseorang yang tidak diizinkan untuk melihat file Anda. Akhirnya, izin yang disarankan fileadalah 600 atau 400.

Itu filebisa terlihat seperti ini:

PASSWORD='something that you cannot remember'

Dalam skrip Anda, gunakan kode di bawah ini untuk mengimpor variabel:

. /path/to/file

Mengenai skrip Anda, pastikan skrip itu tidak berisi lubang yang memungkinkan penyerang mengeksekusi kode dalam konteks skrip (mis. Lingkungan yang tidak terkontrol yang mungkin memiliki $PATHset variabel yang sewenang-wenang atau penggunaan file lain yang tidak sah (mis. Sumber file yang bisa ditulis dunia) .

Sedangkan untuk perlindungan kata sandi Anda yang sebenarnya, Anda tidak bisa. Itu harus tersedia entah bagaimana ke layanan lain. Sebagai alternatif, Anda dapat mengenkripsi file / skrip yang berisi kata sandi menggunakan opensslatau gpgjadi Anda harus memasukkan kata sandi sebelum kredensial dibuka. Ini sangat berguna jika kata sandi layanan Anda sulit diingat.

Lekensteyn
sumber
14

Alih-alih melakukan hardcoding kata sandi dalam file, simpan kata sandi dalam file terpisah dan lindungi file ( chmod 700atau chmod 500) sehingga hanya pengguna yang berwenang yang dapat mengaksesnya.

Ambil kata sandi dengan cat /dir/to/file/with/.passwordalih - alih membaca file dan menyimpan kontennya ke dalam variabel.

Rinzwind
sumber
Beberapa alat bahkan memiliki opsi untuk membaca kata sandi dari file secara langsung karena alasan ini, seperti --passphrase-fileopsi gpg .
2
... dan menjadikannya .dotfile (/dir/to/file/with/.password)
knb
2
chmod 400untuk file (hanya baca). Tentu saja, Anda harus mengamankan direktori terkemuka (700 atau 500, atau bahkan 100 jika Anda paranoid). Perhatikan bahwa 400 (atau 500 untuk direktori) sudah cukup, mode lain (100) dapat dianggap sebagai keamanan melalui ketidakjelasan , seperti menyembunyikan file dengan meletakkan sebuah titik di depan nama.
Lekensteyn
1

Saya tahu ini adalah pertanyaan lama tetapi saya menghadapi masalah yang sama dan saya menggunakan gantungan kunci Ubuntu untuk menyelesaikannya. Berikut ini solusinya di ubuntu 18.04LTS Buka terminal Tuliskan keyring set {{service}} {{username}} misalnya jika Anda menggunakan ini untuk pencatatan kata sandi sekolah:

keyring set school mohamed

Ini akan mencatat Anda untuk kata sandi, masukkan kata sandi. Sekarang kata sandi yang Anda masukkan disimpan di keyring Ubuntu.

Untuk mendapatkan kata sandi ini, tulis di terminal:

keyring get school mohamed

untuk menggunakan ini dalam konteks skrip:

password=$(keyring get school mohamed)

Sekarang kata sandi berisi kata sandi yang Anda masukkan sebelumnya.

Mohamed Ashref
sumber