it-swarm-vi.tech

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

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

Chỉnh sửa

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

69
Joe Holloway

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/mysql script để 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 mật khẩu, 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/75036 ).

58
Zoredache

Người dùng debian-sys-duy trì theo mặc định là một tương đương gốc. 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 trùng khớp trong /etc/mysql/debian.cnf

22
Brent

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-notify :

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 nhiều hơn hoang tưởng giải pháp an toàn.

19
d-_-b

Bạn cũng có thể:

Sudo dpkg-reconfigure mysql-server-5.0

Nó 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.

19
Spoom

Nếu bạn cần thêm debian-sys-maint người dùng chỉ cho logrotate.d mục đích, bạn nên không cấp ALL PRIVILEGES hoặc là 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 bằng đặc quyền RELOAD như thế này (giả sử bạn đang truy cập db của mình dưới dạng root và 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.

6
Mark Chackerian

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

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à siêu bộ 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:

  • shutdowntả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ần thiết để kiểm tra độ tỉnh đượ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ầ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 bộ đặc quyền, được yêu cầu để nâng cấp bảng nếu/khi phiên bản mới của MySQL được cài đặt thông qua bản cập nhật hoặc nâng cấp Debian. 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 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à mysql_upTHER nhị phân của MySQL - đừ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 tìm thấy sự cố, 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ì, thì hãy chắc chắn rằng bạn đã sẵn sàng để xử lý thủ công mọi cập nhật bảo mật của debian trong tương lai và/hoặc nâng cấp 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.

3
Kurt Fitzner

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
Sean

Khi sử dụng MySQL 5.6+, tôi khuyên bạn nên sử dụng mysql_config_editor lệnh để tạo một mục nhập cho người dùng 'debian-sys-maint'@'localhost' sử dụ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.cnf có 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.cnf tập tin thay vì tập tin cụ thể 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

2
Dave Rix

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

2
Jon Topper