Saya memiliki kata sandi MySQL yang disimpan di file foo.php
, misalnya P455w0rd
, ketika saya mencoba menggunakannya:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Kedua opsi masih meminta kata sandi, dari mana cara yang benar untuk mengirim kata sandi stdin
?
-p
dan kata sandi Anda./proc
dapat dengan sepele membacanya selama program sedang berjalan . Itulah~/.my.cnf
gunanya, dengan benar diubah menjadi 0600Jawaban:
Anda harus sangat berhati-hati bagaimana Anda mengirimkan kata sandi ke baris perintah karena, jika Anda tidak hati-hati, Anda akan membiarkannya terbuka untuk mengendus menggunakan alat seperti
ps
.Cara teraman untuk melakukan ini adalah membuat file konfigurasi baru dan meneruskannya dengan
mysql
menggunakan opsi baris perintah--defaults-file=
atau--defaults-extra-file=
.Perbedaan antara keduanya adalah bahwa yang terakhir dibaca selain file konfigurasi default sedangkan dengan yang pertama, hanya satu file yang dilewatkan sebagai argumen yang digunakan.
File konfigurasi tambahan Anda harus berisi sesuatu yang mirip dengan:
Pastikan Anda mengamankan file ini.
Lalu lari:
sumber
argv
untuk menimpa parameter yang diberikan pada-p
flag. Setidaknya itulah yang disimpulkan di sini, bersama dengan info relevan lainnya: unix.stackexchange.com/questions/78757/…--login-path
sekarang ini didukung. Ini tidak jauh lebih baik dari ini, tetapi sedikit kurang teks biasa (meskipun penghalang untuk mengubah konten menjadi plaintext rendah).export MYSQL_PWD=muhpassword
) dan jalankan perintah Anda tanpa-p
. Lihat Variabel Lingkungan Program MySQL . Terlepas dari peringatan mengerikan manual ini , ini agak aman . Kecuali Anda memulai warez aneh di shell yang sama nanti. Jadi kita jalankan:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
The
mysql
utilitas klien dapat mengambil password pada baris perintah dengan baik-p
atau--password=
pilihan.Jika Anda menggunakan
-p
, tidak boleh ada ruang kosong setelah surat opsi:Saya lebih suka opsi panjang dalam skrip karena mereka mendokumentasikan diri:
sumber
/proc/$pid/cmdline
atau melaluips
perintah. Memang benar bahwa mysql menimpa kata sandi di argv selama startup tetapi selalu ada jendela waktu di mana pengguna lain dapat mengamati kata sandi. Juga, pada beberapa sistem, penulisan ulang argv mungkin tidak berfungsi.Jika Anda ingin memulai
mysql
dengan kata sandi asalkan Anda harus mengambil kata sandi dalam sebuah variabel terlebih dahulu:Kemudian Anda dapat memulai
mysql
perintah Anda dengan:sumber
MYSQL_PWD
variabel lingkungan yang dibacamysql
jika Anda tidak menentukan-p
. Dan di Linux ini adalah metode yang aman karena lingkungan pengguna tidak dapat dibaca oleh pengguna yang tidak diprivasi - berbeda dengan vektor argumen.