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 1000
dan perintah gema dengan rahasia itu tidak terlihat dalam output "ps aux". Jadi saya menganggap itu aman - tetapi bisakah pakar keamanan mengonfirmasi itu? :)
.history
).Jawaban:
Jawabannya tergantung pada shell yang Anda gunakan. Banyak kerang memiliki
echo
sebagai 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/echo
atau./echo
atau jika Anda menonaktifkan builtin denganenable -n echo
perintah, 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:
sumber
Untuk kasus mysql ~ / .my.cnf dapat digunakan untuk menyimpan rahasia, yaitu
sumber
Gunakan saja
dan tekan enter. Anda kemudian akan diminta kata sandi dan itu tidak akan terlihat di daftar proses atau file sejarah.
sumber