saya ingin berlari
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
dalam pekerjaan cron. Bagaimana saya bisa melakukannya dengan aman?
Saya tahu saya bisa meletakkan perintah di sana, tetapi siapa pun yang memiliki akses ke mesin akan langsung melihatnya melalui crontab. Apakah ada cara yang lebih baik untuk melakukannya?
Jawaban:
Sebagaimana dinyatakan dalam
man mysqldump
: lihat 6.1.2.1. Panduan Pengguna Akhir untuk Keamanan Kata Sandi dalam manual referensi MySQL.File opsi adalah taruhan teraman, paling tidak menurut referensi di atas. Memberikannya dalam plaintext di crontab tidak baik, paling tidak karena baris perintah proses secara default dapat dilihat oleh
ps
pengguna lain. Hal yang sama sebenarnya berlaku untuk variabel lingkungan seperti yang dijelaskan dalam referensi.Bagian yang relevan dari manual referensi MySQL:
Lihat juga https://stackoverflow.com/q/10725209 .
sumber
Jalankan cronjob sebagai pengguna tertentu dan gunakan beberapa logika Bash sederhana untuk mengekstrak kata sandi dari file plaintext yang disimpan di suatu tempat di sistem dengan izin yang hanya memungkinkan pengguna (atau mungkin grup) untuk mengaksesnya.
Jadi jika cronjob berjalan sebagai 'contoh' pengguna, kepemilikan file harus "contoh: contoh" dan diizinkan 0400.
Anda juga dapat mencapai fungsi serupa menggunakan tingkat pengguna .my.cnf .
sumber
read PASS < /path/to/pwdfile
adalah pembersih yang lebih baik untuk melakukan hal yang sama (mungkin saya kira; superuser.com/q/323060/49184 berlaku).ARGMAX
, dibutuhkan proses tambahan daripada menggunakan shell built-in, itu mungkin menggoda konstruksi sepertifor i in `cat file`; do ...
dengan array masalah sendiri, dll. Tapi tentu saja, seperti dengan banyak hal: jika seseorang tahu apa yang terjadi, ia bebas untuk melakukan apa yang ia pilih. Saya tidak berada di perang salib di sini, terlepas dari bagaimana hal itu muncul :-D.Siapa pun yang memiliki akses ke mesin memiliki tingkat akses yang
/var/spool/cron/crontabs/
sama dengan yang/var/lib/mysql
Anda izinkan. Jadi, atur izin yang tepat pada direktori dan selesai. Siapa pun yang memiliki akses root memiliki akses langsung ke file database secara langsung. Siapa pun yang Anda tidak percaya memiliki akses ke mesin tidak boleh memiliki akses sama sekali ke mesin.Biasanya orang hanya melihat cronjobs mereka sendiri via
crontab -l
.sumber
Untuk tujuan pencadangan, pertimbangkan untuk memiliki pengguna hanya baca di mysql, seperti itu
mysqldump hanya membutuhkan
SELECT
danLOCK TABLES
hak istimewa untuk melakukan tugasnya.sumber