Bagaimana cara menggunakan kata sandi MySQL dari baris perintah tidak aman?

12

Saya punya beberapa alat BASH yang menggunakan mysql -e "{command}"fungsi ini. Memasukkan kata sandi setiap kali saya menggunakan alat ini akan merepotkan, jadi, untuk menghindari kata sandi ditulis dalam file plaintext dengan kode, saya menyimpannya dalam memori (menggunakan read -s) dan meminta BASH membacanya setiap kali menjalankan perintah.

Mysql masih berpikir kata sandi sedang dikirim melalui baris perintah (karena, dengan cara berbicara, itu adalah), dan masih memberi saya kesalahan "Menggunakan kata sandi pada antarmuka baris perintah bisa tidak aman."

Demi tujuan saya, saya tidak perlu menekan pesan ini. Yang perlu saya ketahui adalah, apa yang bisa membuatnya tidak aman? Kata sandi tidak pernah terlihat secara fisik, jadi berselancar bahu tidak dapat melakukannya dan bahkan seseorang yang menebak kata sandi SSH saya tidak akan dapat melakukannya karena disimpan dalam memori daripada dalam skrip itu sendiri. Apakah serangan pria di tengah atau sesuatu yang serupa mungkin terjadi?

Andrew
sumber
8
Taruh dalam ~/.my.cnf Contoh Anda dapat menentukan per host dengan melakukan [client<hostname>]mis. [clientlocalhost]Alat MySQL akan menggunakannya secara otomatis sehingga lebih mudah dan aman
AmazingDreams
Bagaimana Anda bashmembacanya ketika Anda menjalankan perintah? Jika Anda melakukannya mysql -p"$pass"maka siapa pun dapat melihatnya di ps.
Barmar

Jawaban:

26

Siapa pun yang dapat melihat variabel lingkungan Anda (termasuk program yang Anda jalankan) dapat melihat kata sandi. Dan siapa pun yang dapat melihat proses Anda dapat melihat baris perintah yang digunakan untuk menjalankannya, termasuk parameternya.

Jadi untuk kotak yang hanya Anda masuk, risikonya mungkin tidak signifikan. Tetapi untuk serangan yang ditargetkan pada Anda secara pribadi, ini adalah vektor serangan sepele dalam skema besar hal.

leher panjang
sumber
22
Serta seseorang yang melihat Anda ~/.history, dll
ivanivan
Belum lagi HTOP dan utilitas serupa lainnya sebelum ini ditutup. Banyak skrip juga tidak menggunakan variabel lingkungan $ PASS dll. Atas dasar bahwa pengguna hanya baca atau tidak memiliki izin. Pada pengguna tunggal yang berdiri sendiri, hal itu tampaknya tidak penting.
mckenzm
1
Di mana pertanyaannya mengatakan sesuatu tentang variabel lingkungan? Variabel Shell tidak dimasukkan ke lingkungan kecuali Anda mengekspornya.
Barmar