it-swarm-ko.tech

debian-sys-maint MySQL 사용자는 무엇입니까?

우분투 저장소에서 설치된 mysql-server 패키지에 기본적으로 설치된 'debian-sys-maint'사용자가 여러 번 물었습니다.

일반적으로 발생하는 문제는 문제 해결 또는 새로운 개발을 위해 프로덕션 데이터베이스 (Debian/Ubuntu에서 실행되지 않음)의 새로운 사본을 가져 와서 mysql.user 테이블을 제외하여 debian-sys-maint 사용자를 잃는 것입니다.

어떤 이유로 든 새로운 mysql 사용자를 추가하면 테이블을 오버레이하는 대신 개발 환경에 이들을 '병합'해야합니다.

사용자가 없으면 내 시스템은 여전히 ​​작동하는 것처럼 보이지만 다음과 같은 오류가 발생했습니다.

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는 무엇을 위해 사용됩니까?
    • 패키지 관리자가 수행하려는 작업을 수행하는 더 좋은 방법이 있습니까?
  • 분실 한 후 복원하는 가장 쉬운 방법은 무엇입니까?
  • 이 사용자에 대한 올바른/최소 권한은 무엇입니까?
    • '*. * ...에 대한 모든 권한을 부여하는 것'이 잘못된 생각 인 것 같습니다.

편집

추가 질문-/etc/mysql/debian.cnf의 비밀번호가 이미 해시되었거나 일반 텍스트 비밀번호입니까? 사용자를 다시 만들 때 중요하며 첫 번째 시도에서 제대로하지 않는 것 같습니다.

감사

69
Joe Holloway

Debian-sys-maint는 무엇을 위해 사용됩니까?

사용되는 한 가지 중요한 것은 서버에게 로그를 롤링하도록 지시하는 것입니다. 최소한 재로드 및 종료 권한이 필요합니다.

파일 참조 /etc/logrotate.d/mysql-server

/etc/init.d/mysql 스크립트는 서버의 상태를 가져옵니다. 서버를 정상적으로 종료/재로드하는 데 사용됩니다.

README의 인용문은 다음과 같습니다.

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

분실 한 후 복원하는 가장 쉬운 방법은 무엇입니까?

최선의 계획은 단순히 그것을 잃지 않는 것입니다. 비밀번호를 잊어 버린 경우 다른 계정을 사용하여 비밀번호를 재설정하십시오. mysql 서버에서 모든 관리자 권한을 잃은 경우 가이드를 따라 루트 비밀번호를 재설정 한 다음 debian-sys-maint.

이와 같은 명령을 사용하여 나중에 계정을 다시 만드는 데 사용할 수있는 SQL 파일을 작성할 수 있습니다.

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

/etc/mysql/debian.cnf의 비밀번호가 이미 해시되어 있습니까?

비밀번호는 설치시 해시/암호화되지 않지만 새로운 버전의 mysql은 이제 자격 증명을 암호화 할 수 있습니다 ( https://serverfault.com/a/75036 참조).

58
Zoredache

debian-sys-maint 사용자는 기본적으로 root equivalent입니다. 데비안 시스템의 특정 유지 보수 스크립트에서 사용되며 부작용으로 상자에 루트 액세스 권한이있는 사용자가 /etc/mysql/debian.cnf의 일반 텍스트 비밀번호를 볼 수 있습니다 (좋거나 나쁨?).

다음을 통해 사용자를 다시 만들 수 있습니다.

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

그냥 암호가 일치하는지 확인하십시오 /etc/mysql/debian.cnf

22
Brent

나는 단지 의견을 말하고 싶었지만 올바른 구문 자체 항목이 필요하다고 생각합니다. debian-sys-maint 사용자가 생성됩니다 :

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

여전히 /etc/mysql/debian.cnf 파일이 있으면 여기에 비밀번호를 사용하십시오.

더 많은 것을 생각해 내십시오 편집증 안전한 솔루션.

19
d-_-b

당신은 또한 할 수 있습니다 :

Sudo dpkg-reconfigure mysql-server-5.0

Debian-sys-maint 사용자를 재 작성할 수있는 옵션이 제공됩니다. 기존 사용자와 데이터베이스는 안전합니다.

19
Spoom

debian-sys-maint 사용자 만 logrotate.d 목적으로 not grant ALL PRIVILEGES 아니면 그 GRANT OPTION-이것은 불필요한 거대한 보안 허점입니다. 대신, 이와 같은 RELOAD 권한을 가진 사용자를 추가 할 수 있습니다 (DB에 root로 액세스하고 xxxxxx를 비밀번호로 대체한다고 가정).

# 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 업데이트

이 답변은 최신 내용이 아닐 수 있습니다. 아래의 의견이 많은 의견을 참조하십시오.

6
Mark Chackerian

debian-sys-maint required permissions

다른 답변은 debian-sys-maint 사용자에게 필요한 최소 권한 세트를 제외한 모든 것을 충분히 해결했습니다. 여기의 많은 답변은 그 점에서 단순히 틀 렸으며 실제로 위험합니다. 아래를 읽고 이해하지 않고 debian-sys-maint 권한 (grant 옵션 포함)을 줄이지 마십시오 :

데비안 관리자는 사용자에게 모든 권한을 변덕스럽게 부여하지 않았습니다. 필요한 것, 장소 및 이유는 다음과 같습니다. 이 특권 중 일부는 다른 특권보다 우선하지만, 사물을 커스터마이즈하고 요구 사항을 제거하려는 경우에 대비하여 개별적으로 나열합니다.

  • shutdownreload, /etc/init.d/mysql에 의해 수행 된 데이터베이스를 종료하거나 수행하기에 충분하지 않은 필수 항목
  • mysql.user에서 선택, 데이터베이스가 시작될 때 온 전성 검사에 필요하며 루트 사용자가 있는지 확인하십시오. /usr/share/mysql/debian-start.inc.sh 파일의 check_root_accounts 함수에있는 실제 코드를 사용하여 /etc/mysql/debian-start(/etc/init.d/mysql)에 의해 각 시작을 완료했습니다.
  • Information_schema.tables에서 선택, 전역 선택, 충돌 된 테이블을 확인하는 데 필요합니다. /usr/share/mysql/debian-start.inc.sh 파일의 check_for_crashed_tables 함수에있는 실제 코드를 사용하여 /etc/mysql/debian-start(/etc/init.d/mysql)에 의해 각 시작을 완료했습니다.
  • 전역 모든 권한, 업데이트 또는 데비안 업그레이드를 통해 새 버전의 MySQL을 설치 한 경우/테이블 업그레이드에 필요합니다. /usr/share/mysql/debian-start.inc.sh 파일에있는 upgrade_system_tables_if_necessary 함수의 실제 코드를 사용하여 /etc/mysql/debian-start(/etc/init.d/mysql)에 의해 각 시작을 완료했습니다. 실제로 MySQL 바이너리 mysql_upgrade를 호출합니다-함수 이름 (upgrade_system_tables_if_necessary)에 속지 마십시오. 잠재적으로 모든 테이블을 만질 수 있습니다-아래 참조

마지막 것은 물론 특권에 대한 주요 요구 사항입니다. mysql_upgrade의 매뉴얼 페이지는 다음과 같이 말합니다.

mysql_upgrade는 모든 데이터베이스의 모든 테이블에서 현재 버전의 MySQL 서버와의 비 호환성을 검사합니다. mysql_upgrade는 시스템 테이블을 업그레이드하여 추가되었을 수있는 새로운 권한이나 기능을 활용할 수 있습니다.

Mysql_upgrade가 테이블에 비 호환성이 있음을 발견하면 테이블 검사를 수행하고 문제가 발견되면 테이블 복구를 시도합니다.

WARNING debian-sys-maint의 권한을 줄이기로 결정한 경우, 향후 데비안 보안 업데이트를 수동으로 처리 할 준비가되었는지 확인하십시오. MySQL에 영향을주는 업그레이드 debian-sys-maint 권한이 감소 된 MySQL 패키지에서 업데이트를 수행하고 결과적으로 mysql_upgrade가 완료되지 않으면 데이터베이스가 정의되지 않은 (읽기 깨진) 상태로 남아있을 수 있습니다. 권한을 줄이면 업데이트가 이루어질 때까지 명백한 일상적인 문제가 없을 수 있으므로 안전하다고 생각하기위한 기초로 이미 해로운 영향을주지 않고 권한을 줄인 사실에 의존하지 마십시오.

3
Kurt Fitzner

대신에

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

나는 생각한다

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

비밀번호가 해시되지 않았기 때문에 ...?

3
Sean

MySQL 5.6 이상을 사용하는 경우 mysql_config_editor 명령을 사용하여 관련 비밀번호를 사용하여 사용자 'debian-sys-maint'@'localhost'에 대한 항목을 작성하는 것이 좋습니다. 즉, 비밀번호를 일반 텍스트로 저장할 필요가 없습니다. 섬기는 사람.

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

그런 다음, 데비안 특정 설정 파일 /etc/mysql/debian.cnf을 변경하여 사용자 이름과 비밀번호 세부 정보가 파일에 저장되지 않도록 할 수 있습니다.

마지막으로, MySQL의 logrotate 파일을 변경하여 데비안 특정 파일 대신 ~/.mylogin.cnf 파일에 저장된 로그인 정보를 사용하도록 변경하십시오.

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

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

도움이 되었기를 바랍니다 :)

데이브

2
Dave Rix

이에 대한 참고로 데비안 특정 항목을 비활성화하려는 이유는 this mysqlperformanceblog post 를 참조하십시오.

2
Jon Topper