web-dev-qa-db-ja.com

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

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のパスワードはすでにハッシュされていますか、それともプレーンテキストのパスワードですか?ユーザーを再作成するときに問題になりますが、私は最初の試行で正しく作成したようには見えません。

ありがとう

69
Joe Holloway

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/75036 )。

58
Zoredache

debian-sys-maintユーザーはデフォルトでa root相当です。 Debianシステムの特定のメンテナンススクリプトで使用され、副作用として、ボックスへのrootアクセス権を持つユーザーが/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 _ALL PRIVILEGESまたはGRANT OPTIONを付与する必要があります-これは不要です巨大なセキュリティホール。代わりに、このようにRELOAD特権を持つユーザーを追加することができます(rootとしてdbにアクセスしており、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に必要な権限

他の回答では、debian-sys-maintユーザーに必要な最低限の権限セットを除いて、すべてに十分に対処しています。ここでの答えの多くはその点で単に間違っており、実際には危険です。以下を読んで理解しない限り、debian-sys-maint特権(grantオプションを含む)を下げないでください:

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

  • shutdownおよびreload、/ 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によって呼び出されます)によって各スタートアップを実行します
  • selection on information_schema.tablesglobal select、クラッシュしたテーブルのチェックに必要です。/etc/mysql/debian-start(/etc/init.d/mysqlによって呼び出されます)による各起動を、ファイル/usr/share/mysql/debian-start.inc.shの関数check_for_crashed_tablesの実際のコードで実行します
  • グローバルなすべての権限、MySQLの新しいバージョンがアップデートまたはDebianアップグレードによってインストールされている場合に、テーブルをアップグレードするために必要です。/etc/mysql/debian-start(/etc/init.d/mysqlによって呼び出されます)による各スタートアップを、ファイル/usr/share/mysql/debian-start.inc.shの関数upgrade_system_tables_if_necessaryの実際のコードで実行します-実際にMySQLバイナリmysql_upgradeを呼び出します-関数名(upgrade_system_tables_if_necessary)に騙されないでください。これにより、すべてのテーブルにアクセスする可能性があります-以下を参照してください

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

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

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

[〜#〜] warning [〜#〜] debian-sys-maintが持つ特権を削減する場合は、将来のdebianセキュリティアップデートを手動で処理する準備ができていることを確認してください。 /または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

これに続いて、debian固有の設定ファイル/etc/mysql/debian.cnfを変更して、ユーザー名とパスワードの詳細をファイルに保存しないようにすることができます。

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

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

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

お役に立てれば :)

デイブ

2
Dave Rix

これへの付記として、debian固有のものを無効にしたい理由について このmysqlperformanceblog post を見てください。

2
Jon Topper