Người dùng MySQL debian-sys-duy trì (và hơn thế nữa) là gì?


71

Tôi đã bị người dùng 'debian-sys-duy trì cắn nhiều lần được cài đặt theo mặc định trên các gói máy chủ mysql được cài đặt từ kho Ubuntu.

Nói chung, những gì xảy ra là tôi lấy một bản sao mới của cơ sở dữ liệu sản xuất của chúng tôi (không chạy trên Debian / Ubuntu) để khắc phục sự cố hoặc phát triển mới và quên loại trừ bảng mysql.user do đó làm mất người dùng debian-sys-duy trì.

Nếu chúng tôi thêm người dùng mysql mới vì bất kỳ lý do gì, tôi phải 'hợp nhất' những điều này vào môi trường phát triển của mình thay vì chỉ chồng chéo bảng.

Không có người dùng, hệ thống của tôi vẫn có vẻ hoạt động, nhưng gặp nhiều lỗi như:

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-duy trì được sử dụng để làm gì?
    • Có cách nào tốt hơn để các nhà bảo trì gói thực hiện những gì họ đang cố gắng làm không?
  • Cách dễ nhất để khôi phục nó sau khi tôi mất nó là gì?
  • Tập hợp đặc quyền chính xác / tối thiểu cho người dùng này là gì?
    • Có vẻ như ý tưởng tồi để 'cấp tất cả các đặc quyền trên *. * ...'

Biên tập

Câu hỏi bổ sung - Mật khẩu trong /etc/mysql/debian.cnf đã được băm hay đây là mật khẩu văn bản gốc? Nó quan trọng khi bạn đi tạo lại người dùng và tôi dường như không bao giờ có được nó ngay lần thử đầu tiên.

Cảm ơn


8
Mật khẩu là văn bản gốc trong /etc/mysql/debian.cnf
Brent

Câu trả lời:


57

Debian-sys-duy trì được sử dụng để làm gì?

Một điều quan trọng mà nó được sử dụng là bảo máy chủ cuộn các bản ghi. Nó cần ít nhất là đặc quyền tải lại và tắt máy.

Xem tệp /etc/logrotate.d/mysql-server

Nó được sử dụng bởi /etc/init.d/mysqltập lệnh để lấy trạng thái của máy chủ. Nó được sử dụng để tắt / tải lại máy chủ một cách duyên dáng.

Dưới đây là trích dẫn từ 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.

Cách dễ nhất để khôi phục nó sau khi tôi mất nó là gì?

Kế hoạch tốt nhất là chỉ đơn giản là không mất nó. Nếu bạn thực sự mất mật khẩu, hãy đặt lại, sử dụng tài khoản khác. Nếu bạn đã mất tất cả các đặc quyền quản trị viên trên máy chủ mysql, hãy làm theo các hướng dẫn để đặt lại mật khẩu gốc, sau đó sửa chữa debian-sys-maint.

Bạn có thể sử dụng một lệnh như thế này để xây dựng tệp SQL mà bạn có thể sử dụng sau này để tạo lại tài khoản.

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

Là mật khẩu trong /etc/mysql/debian.cnf đã được băm

Mật khẩu không được băm / mã hóa khi cài đặt, nhưng các phiên bản mới của mysql hiện có cách mã hóa thông tin đăng nhập (xem: https://serverfault.com/a/750363 ).


1
"Kế hoạch tốt nhất là đơn giản là không mất nó." Nghiêm túc? Đó là không giúp đỡ cho những người đã mất nó như tôi rõ ràng đã làm trong quá trình nâng cấp. Đối với những người cần tạo lại người dùng, hãy sử dụng một trong các tùy chọn "GRANT ALL" trong các câu trả lời khác, vì người dùng này KHÔNG chỉ được sử dụng cho các hoạt động logrotate - đó là một phần quan trọng của quá trình nâng cấp.
FKEi Internet

Nếu bạn mất thông tin đăng nhập, bạn luôn có tùy chọn, chỉ cần khởi động trình nền mysql / mariadb với tùy chọn bỏ qua hệ thống cấp phép hoặc đăng nhập với tư cách người dùng khác với quyền mys mys gốc và đặt lại mật khẩu. Đặt lại mật khẩu và bỏ qua hệ thống đặc quyền cũng được ghi lại ở các vị trí khác trên Google và các câu hỏi khác trên trang web này.
Zoredache

22

Người dùng debian-sys-duy trì theo mặc định là một gốc tương đương . Nó được sử dụng bởi các tập lệnh bảo trì nhất định trên các hệ thống Debian và như một hiệu ứng phụ, cho phép người dùng có quyền truy cập root trên hộp để xem mật khẩu văn bản gốc trong /etc/mysql/debian.cnf (tốt hay xấu?)

Bạn có thể tạo lại người dùng bằng cách:

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

Chỉ cần đảm bảo mật khẩu khớp với /etc/mysql/debian.cnf


9
Re (tốt hoặc xấu) - Nếu ai đó quản lý để trở thành root, họ có thể bỏ qua hệ thống đặc quyền hoàn toàn bằng cách khởi động lại máy chủ với các tùy chọn chính xác. Nếu bạn là kẻ tấn công bị root, có lẽ bạn có vấn đề lớn hơn với tệp cấu hình đó.
Zoredache

2
cũng re: tốt hay xấu - Tôi đã phải dựa vào quyền truy cập debian-sys-duy trì để đặt lại mật khẩu tài khoản root MySQL khi nó bị quên. Thật tuyệt khi có tùy chọn dự phòng này.
Brent

1
@Brent: Xem dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html để biết cách đặt lại mật khẩu gốc mysql. Tôi đã vô hiệu hóa người dùng này trên nhiều cài đặt mysql trên Debian vì nó có thể gây ra sự tàn phá khi khởi động với các bảng kiểm tra nếu chúng là các bảng lớn.
Nathan

1
Nathan, cảm ơn vì liên kết đó. Đó là thông tin mới cho tôi. Nếu bạn có một quy trình vô hiệu hóa tài khoản debian-sys-duy trì hoàn toàn, tại sao bạn không đưa nó vào đây như một câu trả lời riêng biệt. Điều đó sẽ rất tuyệt!
Brent

3
một khoản trợ cấp tốt hơn sẽ chỉ là để cung cấp cho các đặc quyền tắt / khởi động.
jmtd

19

Bạn cũng có thể:

sudo dpkg-reconfigure mysql-server-5.0

Điều này sẽ cung cấp cho bạn tùy chọn để tạo lại người dùng debian-sys-duy trì. Người dùng và cơ sở dữ liệu hiện tại là an toàn.


Điều này cũng hoạt động trên mysql-server-5.5.
chủSentinel

Điều này sẽ chỉ hoạt động nếu cài đặt máy chủ mysql của bạn không bị hỏng - như có thể xảy ra nếu người dùng debian-sys-duy trì bị thiếu.
FKEi Internet

19

Tôi chỉ muốn bình luận, nhưng tôi nghĩ cú pháp đúng xứng đáng là mục riêng của nó. Điều này sẽ tạo ra người dùng debian-sys-duy trì :

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

Nếu bạn vẫn có tệp /etc/mysql/debian.cnf, chỉ cần sử dụng mật khẩu trong đó.

Hãy đến với một giải pháp an toàn hoang tưởng hơn .


1
Nó là hoang tưởng như nó cần phải được. Sau đó, chỉ có một người có thể đọc tệp /etc/mysql/debian.cnftệp là rootngười dùng Linux . Và khi ai đó có thể đọc tệp đó, họ đã có rootquyền truy cập vào máy và có thể dừng máy chủ MySQL và thêm quản trị viên hệ thống của riêng họ. Và tập lệnh bắt đầu MySQL và các gói khác không thể bảo trì bảo mật và bảo trì khác. Vì vậy, có, nó là an toàn như nó cần phải được. Và hữu ích nếu bạn mất mật khẩu quản trị viên MySQL để khôi phục nó, mà không cần phải khởi động lại nó trong chế độ không an toàn. ;-)
Anders

Đó là những gì chỉnh sửa dành cho.
RobinJ

6

Nếu bạn cần thêm debian-sys-maintngười dùng chỉ cho logrotate.dmục đích, bạn không nên cấp ALL PRIVILEGEShoặc GRANT OPTION- đây là một lỗ hổng bảo mật khổng lồ không cần thiết. Thay vào đó, bạn chỉ có thể thêm người dùng với RELOADđặc quyền như thế này (giả sử bạn đang truy cập db của mình rootvà bạn thay thế xxxxxx bằng mật khẩu của mình)

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

Cập nhật 2019

Câu trả lời này có thể đã lỗi thời - vui lòng xem các bình luận được đánh giá cao dưới đây.


Đây là câu trả lời an toàn duy nhất tại nó chỉ cấp quyền yêu cầu debian-sys-maint. Ngoài ra, tôi có thể xác nhận rằng nó hoạt động như một bùa mê. Chúc mừng!
Jealie

2
Có thực sự là một lỗ hổng bảo mật? Nếu ai đó có thể đọc /etc/mysql/debian.cnf, thì có lẽ họ có quyền truy cập root và có thể khởi động lại mysql bằng --skip-Grant-bảng.
mc0e

Cảm ơn. Nhưng không cần phải xóa hai lần, MySQL đã biết lệnh GRANT làm gì. Xem dev.mysql.com/doc/refman/5.6/en/privilege-changes.html
ygoe

1
Và điều này sẽ không hoạt động, vì debian-sys-maintngười dùng cũng được sử dụng để tắt máy chủ. Và cũng để kiểm tra người dùng root khi khởi động máy chủ mysql. Vì vậy, ít nhất bạn cần cấp các đặc quyền được chọn trên mysql. * Và tắt các đặc quyền.
Anders

1
KHÔNG KHÔNG KHÔNG, KHÔNG làm theo lời khuyên của câu trả lời này - bạn cần cấp tất cả quyền riêng tư cho debian-sys-duy trì vì những lý do được nêu trong câu trả lời khác có tiêu đề "quyền yêu cầu debian-sys-duy trì". Nói tóm lại, bạn có thể ổn định từng ngày nhưng gặp phải vấn đề nghiêm trọng khi bạn áp dụng bản cập nhật bảo mật, vá lỗi hoặc nâng cấp hệ thống của mình.
Kurt Fitzner

3

Thay vì

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

tôi nghĩ

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

bởi vì mật khẩu không được băm ...?


3

quyền yêu cầu debian-sys-duy trì

Các câu trả lời khác đã giải quyết đầy đủ mọi thứ trừ bộ quyền tối thiểu được yêu cầu cho người dùng debian-sys-duy trì. Nhiều câu trả lời ở đây chỉ đơn giản là sai ở khía cạnh đó, và thực tế là nguy hiểm. Không giảm các đặc quyền debian-sys-duy trì (bao gồm tùy chọn cấp) mà không đọc và hiểu bên dưới:

Trình bảo trì Debian không cung cấp tất cả các đặc quyền cho người dùng một cách nghiêm túc. Đây là những gì được yêu cầu, ở đâu và tại sao. Một số đặc quyền này là supersets của những người khác, nhưng tôi sẽ liệt kê chúng một cách độc lập trong trường hợp bạn muốn tùy chỉnh mọi thứ và loại bỏ yêu cầu cho chúng:

  • tắttải lại , yêu cầu không đủ ngạc nhiên, để tắt hoặc thực hiện cơ sở dữ liệu, được thực hiện bởi /etc/init.d/mysql
  • chọn trên mysql.user , được yêu cầu để kiểm tra độ tỉnh táo được thực hiện khi cơ sở dữ liệu được khởi động, đảm bảo rằng có người dùng root. Đã hoàn thành mỗi lần khởi động bằng / etc / mysql / debian-start (được gọi bởi /etc/init.d/mysql) với mã thực tế trong hàm check_root_accounts trong tệp /usr/share/mysql/debian-start.inc.sh
  • chọn trên information_schema.tables , chọn toàn cục , cần thiết để kiểm tra các bảng bị hỏng. Đã hoàn thành mỗi lần khởi động bằng / etc / mysql / debian-start (được gọi bởi /etc/init.d/mysql) với mã thực tế trong hàm check_for_crashing_tables trong tệp /usr/share/mysql/debian-start.inc.sh
  • toàn cầu tất cả các đặc quyền , được yêu cầu để nâng cấp các bảng nếu / khi một phiên bản MySQL mới được cài đặt thông qua bản cập nhật hoặc nâng cấp Debian. Thực hiện mỗi lần khởi động bằng / etc / mysql / debian-start (được gọi bởi /etc/init.d/mysql) với mã thực tế trong hàm nâng cấp_system_tables_if_n cần thiết trong tệp /usr/share/mysql/debian-start.inc.sh - thực sự gọi là nhị phân MySQL mys mys_upTHER - đừng bị đánh lừa bởi tên hàm (nâng cấp_system_tables_if_n cần thiết), điều này có khả năng có thể chạm vào tất cả các bảng - xem bên dưới

Tất nhiên, cái cuối cùng là yêu cầu chính đối với các đặc quyền. Trang hướng dẫn cho mysql_upTHER nói rằng:

mysql_upTHER kiểm tra tất cả các bảng trong tất cả các cơ sở dữ liệu về sự không tương thích với phiên bản hiện tại của Máy chủ MySQL. mysql_upTHER cũng nâng cấp các bảng hệ thống để bạn có thể tận dụng các đặc quyền hoặc khả năng mới có thể đã được thêm vào.

Nếu mysql_upTHER thấy rằng một bảng có khả năng không tương thích, nó sẽ thực hiện kiểm tra bảng và nếu phát hiện có vấn đề, hãy thử sửa chữa bảng.

CẢNH BÁO Nếu bạn quyết định cắt giảm các đặc quyền mà debian-sys-duy trì có, thì hãy đảm bảo rằng bạn đã sẵn sàng để xử lý thủ công mọi cập nhật bảo mật và / hoặc nâng cấp trong tương lai chạm vào MySQL. Nếu bạn thực hiện cập nhật trên các gói MySQL với đặc quyền debian-sys-duy trì giảm và nếu mysql_upTHER không thể hoàn thành do đó, nó có thể khiến cơ sở dữ liệu của bạn ở trạng thái không xác định (đọc bị hỏng). Giảm đặc quyền có thể không có bất kỳ vấn đề rõ ràng hàng ngày nào cho đến khi có bản cập nhật, vì vậy đừng đi theo thực tế là bạn đã giảm đặc quyền mà không có tác động có hại nào làm cơ sở cho rằng nó an toàn.


Cảm ơn câu trả lời công phu. Khó tin câu hỏi này đã gần 10 tuổi!
Joe Holloway

Đây phải là một trong những điều đầu tiên mọi người đọc.
FKEi Internet

2

Là một lưu ý phụ cho điều này, hãy xem bài đăng mysqlperformanceblog này để biết lý do tại sao bạn có thể muốn vô hiệu hóa các công cụ cụ thể của debian.


1
"Lưu ý rằng đây không phải là vấn đề với MySQL từ Debian lenny, vì nó vận chuyển với các tập lệnh init sẽ không chạy CHECK TABLE trên các bảng không phải MYISAM." - từ trang được liên kết
d -_- b

2

Khi sử dụng MySQL 5.6+, tôi khuyên bạn nên sử dụng mysql_config_editorlệnh để tạo mục nhập cho người dùng 'debian-sys-maint'@'localhost'bằng mật khẩu có liên quan, nghĩa là mật khẩu không cần phải được lưu trữ trong văn bản thuần túy trên máy chủ.

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

Theo đó, tệp cấu hình cụ thể của debian /etc/mysql/debian.cnfcó thể được thay đổi để chi tiết tên người dùng và mật khẩu không được lưu trong tệp.

Cuối cùng, thay đổi tệp logrotate cho MySQL để nó sử dụng các chi tiết đăng nhập được lưu trữ trong ~/.mylogin.cnftệp thay vì tệp cụ thể của debian bằng cách thay thế

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

với

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

Hi vọng điêu nay co ich :)

Dave


Nhưng, mục đích của debian-sys-maint người dùng sẽ được thực hiện bằng cách này? Các gói đó có thể sử dụng người dùng / mật khẩu này để bảo trì hệ thống với tư cách là rootngười dùng trong miền Linux (không phải rootngười dùng trong MySQL mà không cần quản trị viên nhập rootmật khẩu cho MySQL?
Anders

Nó thực hiện với tôi trong các thử nghiệm của tôi, nếu bạn thực hiện tất cả các thay đổi, chẳng hạn như thay đổi /etc/mysql/debian.cnfđể xóa mật khẩu và thay đổi tệp logrotate để tham chiếu để sử dụng các chi tiết được bảo mật. Tôi không chắc người dùng debian-sys-duy trì được sử dụng cho bất cứ điều gì khác, nhưng nếu có, điều này sẽ giúp cung cấp cho bạn một dấu hiệu về việc Debian sẽ sử dụng tài khoản người dùng này thay mặt bạn.
Dave Rix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.