pengembangan-web-mp-pd.com

Apa itu pengguna MySQL debian-sys-Maint (dan banyak lagi)?

Saya telah digigit beberapa kali oleh pengguna 'debian-sys-Maint' yang diinstal secara default pada paket server mysql diinstal dari repositori Ubuntu.

Secara umum yang terjadi adalah saya menarik salinan baru dari basis data produksi kami (yang tidak berjalan di Debian/Ubuntu) untuk pemecahan masalah atau pengembangan baru dan lupa untuk mengecualikan tabel mysql.user sehingga kehilangan pengguna debian-sys-Maint.

Jika kami menambahkan pengguna mysql baru untuk alasan apa pun, saya harus 'menggabungkan' ini ke dalam lingkungan pengembangan saya sebagai lawan dari hanya overlay tabel.

Tanpa pengguna, sistem saya tampaknya masih berfungsi, tetapi terganggu dengan kesalahan seperti:

Sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
  • Untuk apa debian-sys-maint digunakan?
    • Apakah ada cara yang lebih baik bagi pengelola paket untuk melakukan apa yang mereka coba lakukan?
  • Apa cara termudah untuk memulihkannya setelah saya kehilangannya?
  • Apa set privilege yang benar/minimal untuk pengguna ini?
    • Sepertinya ide yang buruk untuk 'memberikan semua hak istimewa pada *. * ...'

Edit

Pertanyaan tambahan - Apakah kata sandi di /etc/mysql/debian.cnf sudah di-hash atau apakah ini kata sandi plaintext? Itu penting ketika Anda pergi untuk membuat ulang pengguna dan saya sepertinya tidak pernah melakukannya dengan benar pada percobaan pertama.

Terima kasih

69
Joe Holloway

Untuk apa debian-sys-maint digunakan?

Satu hal utama yang digunakan untuk memberitahu server untuk menggulung log. Setidaknya perlu hak istimewa untuk memuat ulang dan mematikan.

Lihat file /etc/logrotate.d/mysql-server

Ini digunakan oleh /etc/init.d/mysql skrip untuk mendapatkan status server. Ini digunakan untuk mematikan/memuat kembali server dengan anggun.

Berikut adalah kutipan dari README.Debian

* MYSQL WON'T START OR STOP?:
=============================
You may never ever delete the special mysql user "debian-sys-maint". This user
together with the credentials in /etc/mysql/debian.cnf are used by the init
scripts to stop the server as they would require knowledge of the mysql root
users password else.

Apa cara termudah untuk memulihkannya setelah saya kehilangannya?

Rencana terbaik adalah tidak kehilangannya. Jika Anda benar-benar kehilangan kata sandi, setel ulang, menggunakan akun lain. Jika Anda telah kehilangan semua hak admin di server mysql ikuti panduan untuk mereset kata sandi root, kemudian perbaiki debian-sys-maint.

Anda bisa menggunakan perintah seperti ini untuk membuat file SQL yang bisa Anda gunakan nanti untuk membuat ulang akun.

mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql

Apakah kata sandi di /etc/mysql/debian.cnf sudah di-hash

Kata sandi tidak diacak/dienkripsi saat diinstal, tetapi versi baru mysql sekarang memiliki cara untuk mengenkripsi kredensial (lihat: https://serverfault.com/a/75036 ).

58
Zoredache

Pengguna debian-sys-Maint secara default adalah setara dengan root. Ini digunakan oleh skrip pemeliharaan tertentu pada sistem Debian, dan sebagai efek samping, memungkinkan pengguna dengan akses root pada kotak untuk melihat kata sandi plaintext di /etc/mysql/debian.cnf (baik atau buruk?)

Anda dapat membuat ulang pengguna dengan:

GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY 'your password' WITH GRANT OPTION;

Just pastikan kata sandi cocok yang ada di /etc/mysql/debian.cnf

22
Brent

Saya ingin hanya berkomentar, tapi saya pikir sintaks yang benar layak untuk entri itu sendiri. Ini akan membuat pengguna debian-sys-maint :

mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;

Jika Anda masih memiliki file /etc/mysql/debian.cnf, cukup gunakan kata sandi di sana.

Merasa bebas untuk membuat lebih banyak paranoid solusi aman.

19
d-_-b

Anda juga bisa:

Sudo dpkg-reconfigure mysql-server-5.0

Yang akan memberi Anda opsi untuk membuat ulang pengguna debian-sys-Maint. Pengguna dan basis data yang ada aman.

19
Spoom

Jika Anda perlu menambahkan debian-sys-maint pengguna hanya untuk logrotate.d tujuan, Anda harus tidak memberikan ALL PRIVILEGES atau GRANT OPTION - ini adalah lubang keamanan raksasa yang tidak perlu. Sebagai gantinya, Anda bisa menambahkan pengguna dengan hak istimewa RELOAD seperti ini (dengan anggapan Anda mengakses db Anda sebagai root, dan Anda mengganti xxxxxx dengan kata sandi Anda)

# add the user with the reload right
GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx'; 

# reload the rights
FLUSH PRIVILEGES;

# double check
select * from mysql.user;

Pembaruan 2019

Jawaban ini mungkin kedaluwarsa - silakan lihat komentar dengan pendapat kuat di bawah ini.

6
Mark Chackerian

debian-sys-Main izin yang diperlukan

Jawaban lain telah menangani semuanya dengan cukup kecuali set izin minimum yang diperlukan untuk pengguna debian-sys-Maint. Banyak jawaban di sini benar-benar salah dalam hal itu, dan sebenarnya berbahaya. Jangan mengurangi hak istimewa debian-sys-Maint (termasuk opsi hibah) tanpa membaca dan memahami di bawah ini:

Pemelihara Debian tidak memberikan semua hak istimewa kepada pengguna dengan berubah-ubah. Inilah yang dibutuhkan, di mana dan mengapa. Beberapa hak istimewa ini adalah superset dari yang lain, tetapi saya akan mencantumkannya secara independen jika Anda ingin menyesuaikan hal-hal dan menghapus persyaratan untuknya:

  • shutdown dan reload, diperlukan cukup mengejutkan, untuk mematikan atau melakukan database, dilakukan oleh /etc/init.d/mysql
  • pilih pada mysql.user, diperlukan untuk pemeriksaan kewarasan yang dilakukan ketika database dimulai, memastikan bahwa ada pengguna root. Selesai setiap startup dengan/etc/mysql/debian-start (dipanggil oleh /etc/init.d/mysql) dengan kode aktual dalam fungsi check_root_accounts dalam file /usr/share/mysql/debian-start.inc.sh
  • pilih pada information_schema.tables, pilih global, diperlukan untuk memeriksa tabel macet. Selesai setiap startup dengan/etc/mysql/debian-start (dipanggil oleh /etc/init.d/mysql) dengan kode aktual dalam fungsi check_for_crashed_tables dalam file /usr/share/mysql/debian-start.inc.sh
  • global all privilege, diperlukan untuk meningkatkan tabel jika/ketika versi baru MySQL diinstal melalui pembaruan atau peningkatan Debian. Selesai setiap startup dengan/etc/mysql/debian-start (dipanggil oleh /etc/init.d/mysql) dengan kode aktual dalam fungsi upgrade_system_tables_if_n diperlukan dalam file /usr/share/mysql/debian-start.inc.sh - sebenarnya memanggil mysql_upgrade biner MySQL - jangan terkecoh dengan nama fungsi (upgrade_system_tables_if_n diperlukan), ini berpotensi menyentuh semua tabel - lihat di bawah

Yang terakhir adalah, tentu saja, persyaratan utama untuk hak istimewa. Halaman manual untuk mysql_upgrade menyatakan bahwa:

mysql_upgrade memeriksa semua tabel di semua database untuk ketidakcocokan dengan versi MySQL Server saat ini. mysql_upgrade juga memutakhirkan tabel sistem sehingga Anda dapat memanfaatkan hak atau kemampuan baru yang mungkin telah ditambahkan.

Jika mysql_upgrade menemukan bahwa sebuah tabel memiliki kemungkinan ketidakcocokan, ia melakukan pemeriksaan tabel dan, jika masalah ditemukan, upaya perbaikan tabel.

PERINGATAN Jika Anda memutuskan untuk mengurangi hak istimewa yang dimiliki debian-sys-Maint, maka pastikan Anda siap untuk menangani secara manual setiap pembaruan keamanan debian di masa depan dan/atau peningkatan yang menyentuh MySQL. Jika Anda melakukan pembaruan pada paket-paket MySQL dengan hak istimewa debian-sys-Main yang berkurang, dan jika mysql_upgrade tidak dapat diselesaikan sebagai hasilnya, itu dapat membuat database Anda dalam keadaan (baca rusak) yang tidak ditentukan. Mengurangi hak istimewa mungkin tidak memiliki masalah sehari-hari yang jelas sampai pembaruan datang, jadi jangan ikuti kenyataan bahwa Anda telah mengurangi hak istimewa tanpa efek berbahaya sebagai dasar untuk berpikir itu aman.

3
Kurt Fitzner

Dari pada

GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION; FLUSH PRIVILEGES;

Kupikir

GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES;

karena kata sandi tidak di-hash ...?

3
Sean

Saat menggunakan MySQL 5.6+, saya akan merekomendasikan menggunakan mysql_config_editor perintah untuk membuat entri untuk pengguna 'debian-sys-maint'@'localhost' menggunakan kata sandi yang relevan, artinya kata sandi tidak perlu disimpan dalam teks biasa di server.

mysql_config_editor set --login-path=debian-sys-maint --Host=localhost --user=debian-sys-maint --password

Setelah ini, file konfigurasi khusus debian /etc/mysql/debian.cnf dapat diubah sehingga detail nama pengguna dan kata sandi tidak disimpan dalam file.

Terakhir, ubah file logrotate untuk MySQL sehingga menggunakan detail login yang tersimpan di ~/.mylogin.cnf file alih-alih file spesifik debian dengan mengganti

/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf

dengan

/usr/bin/mysqladmin --login-path=debian-sys-maint

Semoga ini membantu :)

Dave

2
Dave Rix

Sebagai catatan untuk ini, lihat posting blog kinerja mysql ini untuk alasan mengapa Anda mungkin ingin menonaktifkan hal-hal khusus debian.

2
Jon Topper