debian-sys-maint MySQLユーザー(およびその他)とは何ですか?


71

Ubuntuリポジトリからインストールされた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のプレーンテキストです
ブレント

回答:


57

debian-sys-maintは何に使用されますか?

使用される主なことの1つは、ログをロールするようにサーバーに指示することです。少なくともリロードおよびシャットダウン特権が必要です。

/etc/logrotate.d/mysql-serverファイルを参照してください

これは/etc/init.d/mysql、サーバーのステータスを取得するためにスクリプトによって使用されます。サーバーを正常にシャットダウン/リロードするために使用されます。

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.

紛失した後に復元する最も簡単な方法は何ですか?

最善の計画は、単にそれを失わないことです。パスワードを本当に紛失した場合は、別のアカウントを使用してリセットしてください。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の他の場所およびこのサイトの他の質問に詳しく記載されています。
ゾレダチェ

22

debian-SYS-のmaintユーザーは、デフォルトであるルートと同等。Debianシステムの特定のメンテナンススクリプトで使用され、副作用として、ボックスのルートアクセス権を持つユーザーが/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
再(良いか悪いか)-誰かがrootになっても、正しいオプションでサーバーを再起動するだけで特権システムを完全にバイパスできます。攻撃者がrootになった場合、おそらくその構成ファイルよりも大きな問題があります。
ゾレダチェ09年

2
また、re:良いか悪いか-debian-sys-maintアクセスに依存して、MySQLルートアカウントのパスワードを忘れたときに再設定する必要がありました。このフォールバックオプションがあると便利でした。
ブレント

1
@Brent:mysqlのルートパスワードをリセットする方法については、dev.mysql.com / doc / refman / 5.0 / en / resetting-permissions.htmlを参照してください。Debianの多くのmysqlインストールでこのユーザーを無効にしました。これは、大きなテーブルである場合、テーブルのチェックで起動時に大混乱を引き起こす可能性があるためです。
ネイサン

1
ネイサン、そのリンクをありがとう。それは私にとって新しい情報です。debian-sys-maintアカウントを完全に無効にする手順がある場合は、別の回答としてここに含めてください。それは素晴らしいことです!
ブレント

3
より良い許可は、シャットダウン/起動特権を与えることです。
jmtd

19

次のこともできます。

sudo dpkg-reconfigure mysql-server-5.0

debian-sys-maintユーザーを再作成するオプションが提供されます。既存のユーザーとデータベースは安全です。


これはmysql-server-5.5でも機能しました。
serverSentinel

これは、mysql-serverのインストールが破損していない場合にのみ機能します-debian-sys-maintユーザーが見つからない場合に発生する可能性があります。
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.cnffile を読み取れるのはLinux rootユーザーだけです。そして、誰かがそのファイルを読むことができるとき、彼らはすでにrootマシンにアクセスでき、MySQLサーバーを停止し、自分のシステム管理者を追加できます。また、MySQLおよびその他のパッケージを起動するスクリプトは、セキュリティメンテナンスおよびその他のメンテナンスを実行できません。そのため、これは必要な限り安全です。また、安全でないモードで再起動する必要なく、MySQL管理パスワードを失って回復する場合に役立ちます。;-)
アンデルス

それが編集の目的です。
ロビンJ

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。また、それが魅力のように機能することを確認できます。乾杯!
ジェリー

2
それは本当にセキュリティホールですか?誰かが既に/etc/mysql/debian.cnfを読むことができる場合、おそらくルートアクセス権があり、とにかく--skip-grant-tablesでmysqlを再起動できます。
mc0e 14

ありがとう。ただし、2回フラッシュする必要はありません。MySQLはGRANTコマンドが何をするかをすでに知っています。参照してくださいdev.mysql.com/doc/refman/5.6/en/privilege-changes.html
ygoe

1
また、debian-sys-maintユーザーはサーバーのシャットダウンにも使用されるため、これは機能しません。また、mysqlサーバーの起動時にrootユーザーを確認します。したがって、少なくともmysql。*の選択特権とシャットダウン特権を付与する必要があります。
アンデルス

1
いいえ、いいえ、この回答のアドバイスに従わない-「debian-sys-maintに必要なアクセス許可」というタイトルの別の回答で概説されている理由で、すべての特権を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特権(付与オプションを含む)を減らさないでください。

Debianメンテナは、ユーザーにすべての特権を気まぐれに与えたわけではありません。必要なもの、場所、理由は次のとおりです。これらの特権の一部は他の特権のスーパーセットですが、物事をカスタマイズしてそれらの要件を削除する場合に備えて、個別にリストします。

  • シャットダウンリロード、データベースをシャットダウンまたは実行するために、/ etc / init.d / mysqlによって十分な驚きが必要
  • データベースの起動時に行われる健全性チェックに必要なmysql.userを選択し、rootユーザーが存在することを確認します。ファイル/usr/share/mysql/debian-start.inc.sh内の関数check_root_accountsの実際のコードを使用して、/ etc / mysql / debian-start(/etc/init.d/mysqlによって呼び出されます)による各スタートアップを完了します
  • クラッシュしたテーブルのチェックに必要information_schema.tablesのselectグローバルselect。ファイル/usr/share/mysql/debian-start.inc.shの関数check_for_crashed_tables内の実際のコードを使用して、/ etc / mysql / debian-start(/etc/init.d/mysqlによって呼び出されます)による各スタートアップを完了します
  • MySQLの新しいバージョンが更新またはDebianアップグレードによってインストールされた場合、またはその場合にテーブルをアップグレードするために必要なグローバルなすべての特権。ファイル/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)にだまされないでください。これは潜在的にすべてのテーブルに触れる可能性があります-以下を参照してください

もちろん、最後の1つは特権の主要な要件です。mysql_upgradeのマニュアルページには次のように記載されています。

mysql_upgradeは、MySQL Serverの現在のバージョンとの非互換性について、すべてのデータベースのすべてのテーブルを調べます。mysql_upgradeはシステムテーブルもアップグレードするため、追加された可能性のある新しい特権または機能を利用できます。

mysql_upgradeがテーブルに非互換性の可能性があることを検出した場合、テーブルチェックを実行し、問題が見つかった場合はテーブルの修復を試みます。

警告 debian-sys-maintが持つ特権を削減することに決めた場合は、MySQLに関係する将来のdebianセキュリティ更新やアップグレードを手動で処理する準備ができていることを確認してください。減らされたdebian-sys-maint特権でMySQLパッケージの更新を実行し、その結果mysql_upgradeが完了できない場合、データベースが未定義(読み取り破損)状態のままになることがあります。特権を減らすことは、更新が行われるまで明白な日常的な問題を持たない可能性があります。そのため、安全だと考える根拠として有害な影響を与えずに特権を既に減らしているという事実を無視しないでください。


精巧な答えをありがとう。この質問は10年近く前のものだとは信じられません。
ジョーホロウェイ

これは、人々が最初に読むものの1つでなければなりません。
FKEinternet

2

これに関する補足事項として、debian固有のものを無効にする理由については、このmysqlperformanceblogの投稿ご覧ください。


1
「これは、Debian lennyのMySQLの問題ではないことに注意してください。これは、非MYISAMテーブルでCHECK TABLEを実行しないinit-scriptsと共に出荷されるためです。」-リンクされたページから
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ユーザー名とパスワードの詳細がファイルに保存されないように、debian固有の設定ファイルを変更できます。

最後に、MySQLのlogrotateファイルを変更して~/.mylogin.cnf、debian固有のファイルではなく、ファイルに保存されているログイン詳細を置き換えて使用するようにします

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

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

お役に立てれば :)

デイブ


しかし、debian-sys-maint ユーザーの目的はこれによって達成されますか?そのパッケージは、このユーザー/パスワードをroot使用して、Linuxドメインのrootユーザー(MySQLのユーザーではなく、MySQLのrootパスワードを入力する必要のある管理者なしのシステムメンテナンスを行うことができますか?
Anders

を変更し/etc/mysql/debian.cnfてパスワードを削除したり、logrotateファイルを変更してセキュリティで保護された詳細を使用するなど、すべての変更を実行すると、テストで機能します。debian-sys-maintユーザーが他に使用されているかどうかはわかりませんが、使用されている場合、Debianがユーザーに代わってこのユーザーアカウントを使用している場所を示すのに役立ちます。
デイブリックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.