Debian-sys-maint MySQL kullanıcısı nedir (ve dahası)?


71

Ubuntu depolarından yüklenen mysql-server paketlerinde varsayılan olarak yüklenen 'debian-sys-maint' kullanıcısı tarafından birkaç kez ısırıldım.

Genel olarak ne olduğu, sorun giderme veya yeni bir gelişme için üretim veritabanımızın (Debian / Ubuntu'da çalışmayan) yeni bir kopyasını alıyorum ve mysql.user tablosunu hariç tutmayı unutuyorum.

Herhangi bir nedenden dolayı yeni mysql kullanıcıları eklersek, sadece tabloyu yerleştirmek yerine, bunları geliştirme ortamımla 'birleştirmeliyim'.

Kullanıcı olmadan sistemim hala işlevsel görünüyor, ancak aşağıdaki gibi hatalarla karşılaştı:

sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
  • Debian-sys-maint ne için kullanılır?
    • Paket servis sağlayıcılarının yapmaya çalıştıkları şeyi yapmaları için daha iyi bir yol var mı?
  • Kaybettikten sonra geri yüklemenin en kolay yolu nedir?
  • Bu kullanıcı için doğru / minimum ayrıcalık kümesi nedir?
    • '*. * ... üzerindeki tüm ayrıcalıkları vermek' için kötü bir fikir gibi görünüyor

Düzenle

Ek soru - /etc/mysql/debian.cnf dosyasındaki parola zaten karıştırılmış mı veya bu düz metin parolası mı? Kullanıcıyı yeniden yaratmaya gideceğiniz zaman önemlidir ve ilk denemede hiçbir zaman doğru olamadım.

Teşekkürler


8
Parola /etc/mysql/debian.cnf içinde düz metindir
Brent

Yanıtlar:


57

Debian-sys-maint ne için kullanılır?

Kullanıldığı en büyük şey, sunucuya günlükleri yuvarlamasını söylemek. En azından yeniden yükleme ve kapatma ayrıcalığına ihtiyacı var.

/Etc/logrotate.d/mysql-server dosyasına bakın

/etc/init.d/mysqlSunucunun durumunu almak için komut dosyası tarafından kullanılır . Sunucuyu dikkatlice kapatmak / yeniden yüklemek için kullanılır.

İşte README.Debian'dan alıntı

* 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.

Kaybettikten sonra geri yüklemenin en kolay yolu nedir?

En iyi plan, basitçe kaybetmemek. Şifreyi gerçekten kaybederseniz, başka bir hesap kullanarak sıfırlayın. MySQL sunucusundaki tüm yönetici ayrıcalıklarını kaybettiyseniz, root şifresini sıfırlamak için yönergeleri izleyin, sonra onarın debian-sys-maint.

Hesabı yeniden oluşturmak için daha sonra kullanabileceğiniz bir SQL dosyası oluşturmak için böyle bir komut kullanabilirsiniz.

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

/Etc/mysql/debian.cnf içindeki şifre zaten hashe

Parola yüklendiğinde şifrelenmemiş / şifrelenmemiş, ancak mysql'nin yeni sürümlerinin şimdi kimlik bilgilerini şifreleyecek bir yolu var (bkz: https://serverfault.com/a/750363 ).


1
“En iyi plan, basitçe kaybetmemek.” Ciddi anlamda? Yükseltme sırasında görünüşte yaptığım gibi, zaten kaybeden insanlar için bu sıfır yardım. Bu kullanıcının çünkü gerekiyor olanlar için, kullanıcıyı yeniden oluşturmak "GRANT ALL" diğer yanıtlar seçenekler birini kullanın DEĞİL sadece logrotate işlemleri için kullanılan - yükseltme sürecinde kritik bir parçası.
FKEinternet

Kimlik bilgilerini kaybederseniz, her zaman, sadece mysql / mariadb arka planını, izin sistemini atlayan seçenekle başlatma ya da root mysql ayrıcalıklarına sahip bir kullanıcı olarak oturum açma ve şifreyi sıfırlama seçeneğiniz vardır. Şifreleri sıfırlamak ve ayrıcalık sistemini atlamak, Google’daki diğer yerlerde ve bu sitedeki diğer sorularda iyi bir şekilde belgelenmiştir.
Zoredache

22

Debian-sys-Maint kullanıcı varsayılan olarak ise kök eşdeğer . Debian sistemlerindeki belirli komut dizileri tarafından kullanılır ve yan etkisi olarak, kutuya kök erişimi olan kullanıcıların /etc/mysql/debian.cnf (iyi veya kötü?) İçindeki düz metin şifresini görüntülemesine olanak tanır

Kullanıcıyı şu şekilde yeniden oluşturabilirsiniz:

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

Sadece şifrenin /etc/mysql/debian.cnf ile eşleştiğinden emin olun


9
Re (iyi ya da kötü) - Birisi kökleşmeyi başarırsa, ayrıcalık sistemini tamamen sunucuyu doğru seçeneklerle yeniden başlatarak tamamen atlayabilir. Bir saldırganın kök salması durumunda, muhtemelen bu yapılandırma dosyasından daha büyük sorunlarınız vardır.
Zoredache

2
ayrıca re: iyi veya kötü - Unutulduğunda MySQL root hesabı şifresini tekrar ayarlamak için debian-sys-maint erişimine güvenmek zorunda kaldım. Bu geri dönüş seçeneği olması güzeldi.
Brent,

1
@Brent: MySQL root şifresini sıfırlamak için dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html adresini ziyaret edin. Debian'da birçok mysql kurulumunda bu kullanıcıyı devre dışı bıraktım, çünkü başlangıçta büyük tablolar olup olmadıklarını kontrol ederek tahribata yol açabilir.
Nathan,

1
Nathan, bu bağlantı için teşekkürler. Bu benim için yeni bilgi. Debian-sys-maint hesabını tamamen devre dışı bırakma prosedürünüz varsa, bunu neden ayrı bir cevap olarak dahil etmiyorsunuz? Bu harika olurdu!
Brent,

3
daha iyi bir hibe, kapatma / başlatma ayrıcalıklarının verilmesidir.
jmtd

19

Ayrıca yapabilirdin:

sudo dpkg-reconfigure mysql-server-5.0

Hangi size debian-sys-maint kullanıcısını yeniden yaratma seçeneği sunacak. Mevcut kullanıcılar ve veritabanları güvenlidir.


Bu, aynı zamanda mysql-server-5.5 üzerinde çalıştı.
serverSentinel

Bu, yalnızca mysql-sunucu kurulumunuz bozulduysa çalışır - debian-sys-maint kullanıcısı eksikse olduğu gibi.
FKEinternet

19

Sadece yorum yapmak istedim, ancak doğru yazımın kendi girişini hak ettiğini düşünüyorum . Bu debian-sys-maint kullanıcısını yaratacaktır :

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

Hala /etc/mysql/debian.cnf dosyanız varsa, oradaki şifreyi kullanın.

Daha paranoyak, güvenli bir çözüm bulmaktan çekinmeyin .


1
Olması gerektiği kadar paranoyak. O zaman dosyayı okuyabilen tek kişi /etc/mysql/debian.cnfLinux rootkullanıcısıdır. Birisi bu dosyayı okuyabiliyorsa root, makineye zaten erişebilir ve MySQL sunucusunu durdurabilir ve kendi sistem yöneticilerini ekleyebilir. Ve MySQL ve diğer paketleri başlatan komut dosyası güvenlik bakımı ve diğer bakımı yapamaz. Yani evet, olması gerektiği kadar güvenli. Güvenli olmayan modda yeniden başlatmanıza gerek kalmadan, kurtarmak için MySQL yönetici şifresini kaybederseniz kullanışlıdır. ;-)
Anders

Düzenleme bunun için var.
RobinJ

6

Eklemek gerekirse debian-sys-maintsadece kullanıcıya logrotate.damaçlar sen gerektiğini değil vermek ALL PRIVILEGESveya GRANT OPTION- Bu gereksiz bir dev güvenlik açığı olduğunu. Bunun yerine, kullanıcıyı yalnızca bu RELOADayrıcalıkla ekleyebilirsiniz (db'nize olarak eriştiğiniz rootvarsa ve xxxxxx'i şifrenizle değiştirirseniz)

# 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;

2019 Güncellemesi

Bu yanıtın tarihi geçmiş olabilir - lütfen aşağıda şiddetle görüşülen yorumları inceleyin.


Bu tek güvenli cevap, sadece gerekli izinleri verir debian-sys-maint. Ayrıca, bir cazibe gibi çalıştığını onaylayabilirim. Şerefe!
Jealie,

2
Gerçekten bir güvenlik deliği mi? Birisi /etc/mysql/debian.cnf dosyasını zaten okuyabilirse, muhtemelen root erişimine sahip olabilir ve mysql'i --skip-grant-tables ile yeniden başlatabilir.
mc0e

Teşekkürler. Ancak işleri iki kez yıkamanıza gerek yok, MySQL zaten GRANT komutunun ne yaptığını biliyor. Bakınız dev.mysql.com/doc/refman/5.6/en/privilege-changes.html
ygoe

1
Ve bu debian-sys-maint, aynı zamanda , kullanıcı sunucuyu kapatmak için kullanıldığı için çalışmayacaktır. Ayrıca, mysql sunucusunu başlatırken bir kök kullanıcısını kontrol etmek için. Bu nedenle, en azından mysql. * Ve kapatma ayrıcalıklarına seçkin ayrıcalıklar vermeniz gerekir.
Anders

1
HAYIR HAYIR HAYIR HAYIR, bu cevabın tavsiyelerine uymayın - "debian-sys-maint gerekli izinler" başlıklı diğer cevapta belirtilen nedenlerden dolayı tüm ayrıcalıkları debian-sys-maint'e vermeniz gerekir. Kısacası, günlük olarak iyi olabilirsiniz ancak bir güvenlik güncellemesi uyguladığınızda, sisteminizi güncellerken veya güncellerken ciddi sorunlarla karşılaşabilirsiniz.
Kurt Fitzner

3

Onun yerine

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

bence

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

şifre şifreli olmadığı için ...?


3

debian-sys-maint gerekli izinler

Diğer cevaplar debian-sys-maint kullanıcısı için gerekli olan minimum izinler dizisi dışındaki her şeyi yeterince ele almıştır. Buradaki cevapların birçoğu bu açıdan sadece yanlıştır ve aslında tehlikelidir. Aşağıdakileri okuma ve anlamadan debian-sys-maint ayrıcalıklarını (hibe seçeneği dahil) azaltmayın:

Debian sorumlusu, tüm ayrıcalıkları kapıcı bir şekilde kullanıcıya vermedi. İşte neyin gerekli, nerede ve neden. Bu ayrıcalıklardan bazıları başkalarının üstünleridir, ancak bir şeyleri özelleştirmek ve gereksinimlerini kaldırmak istemeniz durumunda bunları bağımsız olarak listeleyeceğim:

  • Kapama ve yeniden yükleme , /etc/init.d/mysql tarafından yapılan, kapatılması veya bir veritabanı yapılması için yeterince şaşırtıcı olmamalıdır
  • mysql.user'da seçin , veritabanı başlatıldığında yapılan akıl sağlığı kontrolleri için gerekli, bir kök kullanıcısı olduğundan emin olun. Her start / etc / mysql / debian-start (/etc/init.d/mysql tarafından çağrılır) /usr/share/mysql/debian-start.inc.sh dosyasındaki check_root_accounts işlevindeki asıl kodla yapılır.
  • information_schema.tables , global select'i seçin , çökmüş tabloları kontrol etmek için gerekli. Her başlatma / etc / mysql / debian-start (/etc/init.d/mysql tarafından) /usr/share/mysql/debian-start.inc.sh dosyasındaki check_for_crashed_tables işlevindeki asıl kodla / etc / mysql tarafından yapılır.
  • küresel bir MySQL sürümü bir güncelleme veya Debian yükseltme ile yüklendiğinde / yükseltildiğinde tabloları yükseltmek için gerekli tüm ayrıcalıklar . Her start / etc / mysql / debian-start (/etc/init.d/mysql tarafından) /usr/share/mysql/debian-start.inc.sh dosyasındaki upgrade_system_tables_if_necessary işlevindeki asıl kodla / etc / mysql tarafından yapılır. aslında MySQL ikili mysql_upgrade çağırır - işlev adı (aldırma_system_tables_if_necessary) tarafından kanmayın, bu potansiyel olarak tüm tablolara dokunabilir - aşağıya bakınız

Sonuncusu, elbette, ayrıcalıklar için en büyük gereksinimdir. Mysql_upgrade için man sayfası şunları belirtir:

mysql_upgrade, tüm veritabanlarındaki tüm tabloları MySQL Sunucusunun geçerli sürümüyle uyumsuzluk açısından inceler. mysql_upgrade ayrıca sistem tablolarını yükseltir, böylece eklenmiş olabilecek yeni ayrıcalıklardan veya özelliklerden faydalanabilirsiniz.

Eğer mysql_upgrade bir tablonun olası bir uyumsuzluğa sahip olduğunu tespit ederse, bir tablo kontrolü gerçekleştirir ve eğer problem bulunursa bir tablo onarımı dener.

UYARI debian-sys-maint'in sahip olduğu ayrıcalıkları azaltmaya karar verirseniz, gelecekteki debian güvenlik güncellemelerini ve / veya MySQL'e dokunan yükseltmeleri elle işlemeye hazır olduğunuzdan emin olun. MySQL paketlerinde debian-sys-maint ayrıcalıklarının azaldığı bir güncelleme yaparsanız ve mysql_upgrade sonuç olarak tamamlanmazsa, veritabanınızı tanımsız (bozuk bir okuma) durumda bırakabilir. Ayrıcalıkları azaltmak, bir güncelleme gelene kadar herhangi bir günden güne belli bir sorun yaşamayabilir, bu nedenle, güvenli olduğunu düşündüğünüz bir temeli olarak zararlı hiçbir etkisi olmayan ayrıcalıkları azaltmış olmanıza gerek yoktur.


Ayrıntılı cevap için teşekkür ederiz. Bu sorunun neredeyse 10 yaşında olduğuna inanmak zor!
Joe Holloway

Bu, insanların ilk okuduğu şeylerden biri olmalı.
FKEinternet

2

Buna bir not olarak, debian'a özgü şeyleri neden devre dışı bırakmak isteyebileceğinize ilişkin nedenlerden dolayı bu mysqlperformanceblog yazısına bakın .


1
“Bunun, Debian lenny'den MySQL ile ilgili bir sorun olmaması gerektiğini, çünkü MYISAM dışındaki tablolarda CHECK TABLE çalıştırmayacak olan init-scriptleri ile birlikte gönderileceğini unutmayın.” - bağlantılı sayfadan
d -_- b

2

MySQL 5.6+ kullanırken, mysql_config_editorkullanıcının 'debian-sys-maint'@'localhost'ilgili parolayı kullanarak bir giriş oluşturmak için bu komutu kullanmasını tavsiye ederim ; bu, parolanın sunucuda düz metin olarak saklanması gerekmediği anlamına gelir.

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

Bunu takiben, debian özgü yapılandırma dosyası /etc/mysql/debian.cnfkullanıcı adı ve parola bilgilerini dosyada saklanmaz böylece değiştirilebilir.

Son olarak, MySQL için logrotate dosyasını değiştirerek debian'a ~/.mylogin.cnfözel dosya yerine dosyada kayıtlı olan giriş bilgilerini kullanmasını sağlayın.

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

ile

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

Bu yardımcı olur umarım :)

Dave


Ancak, debian-sys-maint kullanıcının amacı bunu gerçekleştirecek mi? Bu paketler root, Linux etki alanında kullanıcı olarak bazı sistem bakımı yapmak için bu kullanıcıyı / şifreyi kullanabilmelidir ( rootMySQL için rootşifreyi girmek için gerekli yönetici olmadan MySQL'de kullanıcı değil mi?
Anders

/etc/mysql/debian.cnfŞifrelerin kaldırılmasını değiştirmek ve güvenli ayrıntıları kullanmak için başvuruda bulunmak için logrotate dosyasını değiştirmek gibi tüm değişiklikleri yaparsanız, testlerimde benim için işe yarar. Debian-sys-maint kullanıcısının başka bir şey için kullanıldığından emin değilim, ancak öyleyse, bu, Debian'ın sizin adınıza bu kullanıcı hesabını nerede kullandığının bir göstergesidir.
Dave Rix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.