mengirim kata sandi dan keamanan

11

Terkadang saya melakukannya echo "secret" | mysql -u root -p .... Sekarang saya mengerti tentang keamanan di sini: dapatkah seseorang mendaftar semua proses melihat kata sandi?

Untuk memeriksa saya mencoba echo "test" | sleep 1000dan perintah gema dengan rahasia itu tidak terlihat dalam output "ps aux". Jadi saya menganggap itu aman - tetapi bisakah pakar keamanan mengonfirmasi itu? :)

Gucki
sumber
Tidak dapat melihatnya dalam daftar proses saat menjalankan loop tanpa akhir. Pertanyaan bagus.
Tim
1
Selain itu, jangan lupa bahwa apa pun yang Anda ketikkan pada kebanyakan shell akan disimpan dalam file history di suatu tempat (seperti .history).
Alexander Bird

Jawaban:

13

Jawabannya tergantung pada shell yang Anda gunakan. Banyak kerang memiliki echosebagai builtin perintah yang berarti bahwa itu tidak menelurkan sebuah proses yang terpisah dan karenanya tidak akan muncul dalam proses daftar. Namun, jika Anda mengetik /bin/echoatau ./echoatau jika Anda menonaktifkan builtin dengan enable -n echoperintah, maka shell tidak akan menggunakan perintah builtin dan akan menggunakan versi biner. Ini akan muncul dalam daftar proses.

Jika Anda menggunakan biner daripada shell builtin, perintah echo akan muncul selama diperlukan untuk memindahkan data ke buffer STDIN proses lainnya. Buffer ini memiliki ukuran yang terbatas sehingga jika ada lebih banyak data daripada yang akan muat di buffer, perintah echo harus menunggu sebentar sampai proses lain dapat membaca beberapa data keluar dari buffer. Untuk sebagian besar kasus (seperti dua contoh yang Anda berikan di atas) periode waktu ini akan menjadi mikrodetik. Jika Anda menyisipkan dump 20MB SQL ke MySQL menggunakan gema, ini bisa lebih lama. Tidak peduli seberapa pendek waktunya, jika Anda menggunakan biner alih-alih shell builtin dan seseorang mendapatkan waktu yang tepat, mereka akan dapat melihat proses dalam daftar proses.

Anda dapat menghindari ini dengan memasukkan data rahasia ke dalam file (dengan izin yang sesuai) dan menggunakan file sebagai STDIN seperti ini:

mysql -u root -p < file_with_secret.sql
Ladadadada
sumber
5
Ingatlah bahwa dengan mengetikkan kata sandi pada baris perintah seperti itu kemungkinan besar disimpan ke dalam file riwayat shell Anda, jadi ada baiknya memeriksa izin dan konten file sejarah.
aculich
3

Untuk kasus mysql ~ / .my.cnf dapat digunakan untuk menyimpan rahasia, yaitu

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME
menjadi paling lucu
sumber
1

Gunakan saja

mysql -uroot -p

dan tekan enter. Anda kemudian akan diminta kata sandi dan itu tidak akan terlihat di daftar proses atau file sejarah.

jdw
sumber
Data yang diterima di STDIN oleh MySQL adalah perintah yang harus dijalankan setelah Anda masuk. "Rahasia" dalam pertanyaan bukanlah kata sandi.
Ladadadada