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


71

우분투 저장소에서 설치된 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의 비밀번호가 이미 해시되었거나 일반 텍스트 비밀번호입니까? 사용자를 다시 만들 때 중요하며 첫 번째 시도에서 제대로하지 않는 것 같습니다.

감사


8
비밀번호는 /etc/mysql/debian.cnf의 평문입니다
Brent

답변:


57

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/750363 참조 ).


1
"가장 좋은 계획은 단순히 그것을 잃지 않는 것입니다." 진심이야? 그건 제로 내가 분명히 업그레이드하는 동안 그랬던 것처럼 이미 잃은 사람들을 위해 도움이됩니다. 이 사용자가 있기 때문에해야 할 사람들을 위해, 사용자를 다시 만들려면 "GRANT ALL"다른 답변에서 옵션 중 하나를 사용 하지 만 logrotate에 작업에 사용 -이 업그레이드 프로세스의 중요한 부분입니다.
FKEinternet

자격 증명을 잃어버린 경우 항상 권한 시스템을 건너 뛰는 옵션으로 mysql / mariadb 데몬을 시작하거나 루트 mysql 권한을 가진 다른 사용자로 로그인하고 비밀번호를 재설정하는 옵션이 항상 있습니다. 비밀번호 재설정 및 권한 시스템 우회는 Google의 다른 위치 및이 사이트의 기타 질문에 잘 설명되어 있습니다.
Zoredache

22

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

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

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

그냥 암호가 일치하는지 확인 /etc/mysql/debian.cnf에 있음


9
재 (좋거나 나쁨)-누군가 루트 권한을 가지면 올바른 옵션으로 서버를 다시 시작하여 권한 시스템을 완전히 우회 할 수 있습니다. 공격자가 루트를 얻는 경우 해당 구성 파일보다 더 큰 문제가있을 수 있습니다.
Zoredache

2
또한 : 좋고 나쁨-잊어 버렸을 때 MySQL 루트 계정 암호를 다시 설정하려면 debian-sys-maint 액세스 권한을 사용해야했습니다. 이 대체 옵션이 있으면 좋았습니다.
Brent

1
@Brent : 참조 dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html MySQL의 루트 암호를 다시 설정하는 방법에 대해. 데비안의 많은 mysql 설치 에서이 사용자를 비활성화했습니다. 테이블이 큰 경우 테이블을 확인하여 시작시 혼란을 초래할 수 있습니다.
Nathan

1
네이선 그것은 새로운 정보입니다. debian-sys-maint 계정을 비활성화하는 절차가 있다면 여기에 별도의 답변으로 포함시키지 않겠습니까? 대단 할 것입니다!
Brent

3
더 나은 허가는 종료 / 시동 권한을 부여하는 것입니다.
jmtd

19

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

sudo dpkg-reconfigure mysql-server-5.0

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


이것은 mysql-server-5.5에서도 작동했습니다.
serverSentinel

이것은 debian-sys-maint 사용자가없는 경우와 같이 mysql-server 설치가 중단되지 않은 경우에만 작동합니다.
FKEinternet

19

나는 단지 의견을 말하고 싶었지만 올바른 구문 은 그 자체의 항목 이라고 생각 합니다 . 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 파일이 있으면 여기에 비밀번호를 사용하십시오.

편집증적인 보안 솔루션 을 생각해보십시오 .


1
그것은 필요한만큼 편집증입니다. 그러면 파일 /etc/mysql/debian.cnf파일 을 읽을 수 있는 사람은 Linux root사용자입니다. 그리고 누군가 파일을 읽을 수있을 때 이미 root머신에 액세스 할 수 있으며 MySQL 서버를 중지하고 자신의 시스템 관리자를 추가 할 수 있습니다. 그리고 MySQL 및 기타 패키지를 시작하는 스크립트는 보안 유지 관리 및 기타 유지 관리를 수행 할 수 없습니다. 예, 필요한만큼 안전합니다. 그리고 안전하지 않은 모드에서 다시 시작할 필요없이 MySQL 관리자 암호를 풀어 복구 할 때 유용합니다. ;-)
Anders

그것이 편집을위한 것입니다.
RobinJ

6

당신은 추가해야하는 경우 debian-sys-maint단지에 대한 사용자를 logrotate.d위해, 당신은해야 되지 부여 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 년 업데이트

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


이는에 필요한 권한 만 부여하는 단일 보안 답변 debian-sys-maint입니다. 또한 그것이 매력처럼 작동하는지 확인할 수 있습니다. 건배!
Jealie

2
정말 보안 허점입니까? 누군가가 /etc/mysql/debian.cnf를 이미 읽을 수 있다면 아마도 루트 액세스 권한이 있고 --skip-grant-tables를 사용하여 mysql을 다시 시작할 수 있습니다.
mc0e

감사. 그러나 두 번 플러시 할 필요가 없습니다. MySQL은 이미 GRANT 명령의 기능을 알고 있습니다. 참조 dev.mysql.com/doc/refman/5.6/en/privilege-changes.html
ygoe

1
debian-sys-maint사용자가 서버를 종료하는데도 사용 되므로 작동하지 않습니다 . 또한 mysql 서버를 시작할 때 루트 사용자를 확인하십시오. 따라서 최소한 mysql. * 및 종료 권한에 대한 선택 권한을 부여해야합니다.
Anders

1
아니요 아니요 아니요,이 답변의 조언을 따르지 마십시오. "debian-sys-maint required permissions"라는 제목의 다른 답변에 요약 된 이유로 debian-sys-maint에 모든 권한을 부여해야합니다. 요컨대 보안 업데이트, 패치 또는 시스템 업그레이드를 적용 할 때 매일 문제는 없지만 심각한 문제가 발생할 수 있습니다.
커트 피츠너

3

대신에

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

debian-sys-maint 필수 권한

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

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

  • /etc/init.d/mysql에 의해 수행되는 데이터베이스 종료 또는 수행을위한 shutdownreload
  • 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가 테이블에 비 호환성이 있음을 발견하면 테이블 검사를 수행하고 문제가 발견되면 테이블 복구를 시도합니다.

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


정교한 답변에 감사드립니다. 이 질문은 거의 10 살이라고 믿기 어렵다!
Joe Holloway

사람들이 가장 먼저 읽는 것 중 하나입니다.
FKEinternet

2

이것에 대한 부수적 인 설명으로, 이 mysqlperformanceblog 게시물 에서 데비안 특정 항목을 비활성화하려는 이유를 살펴보십시오 .


1
"MYISAM 이외의 테이블에서 CHECK TABLE을 실행하지 않는 init-scripts와 함께 제공되므로 Debian lenny의 MySQL에서는 이것이 문제가되지 않습니다." -링크 된 페이지에서
d -_- b

2

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

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

데이브


그러나 debian-sys-maint 이것에 의해 사용자 의 목적 이 달성 될 것인가? 이 패키지는이 사용자 / 암호를 사용 root하여 Linux 도메인의 사용자 로서 일부 시스템 유지 보수를 수행 할 수 있어야 합니다 ( root관리자가 rootMySQL에 대한 암호 를 입력 할 필요가없는 MySQL의 사용자는 아닙니까?
Anders

/etc/mysql/debian.cnf암호를 제거하고 보안 세부 정보를 사용하도록 logrotate 파일을 변경하도록 변경하는 등의 모든 변경을 수행하면 테스트에서 효과가 있습니다 . debian-sys-maint 사용자가 다른 용도로 사용되는지 확실하지 않지만, 그렇다면 데비안이 사용자를 대신하여이 사용자 계정을 사용하는 위치를 알려주는 데 도움이됩니다.
Dave Rix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.