web-dev-qa-db-ja.com

'/var/lib/mysql/mysql.sock'(13 "Permission denied")非mysqlユーザーとしてソケットにアクセスする場合

開発に使用するローカルのmysqlサーバーに接続しようとしています

サーバーは正常に起動しますが、非rootユーザーとしてサーバーに接続できません。

[root@somepc ]# mysql -u [someuser] -p[somepass]
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13 "Permission denied")

Rootとして、これは期待どおりに機能します。そのため、そのユーザーはmysqlにアクセスする権限を持っています。

mysql -u [user] -p[password]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.30-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ユーザー権限を確認したところ

stat /var/lib/mysql/mysql.sock
stat: cannot stat '/var/lib/mysql/mysql.sock': Permission denied

これらの権限は非rootユーザーに対してどのようにする必要がありますか?

1
nelaaro

問題は、ソケットファイルの権限に関するエラーに関連していました

namei -l /var/lib/mysql/mysql.sock                                                                                                                                               Wed 07 Feb 2018 12:53:54 SAST
f: /var/lib/mysql/mysql.sock
drwxr-xr-x root  root  /
drwxr-xr-x root  root  var
drwxr-xr-x root  root  lib
drwx------ mysql mysql mysql
                       mysql.sock - No such file or directory

Rootとして、ソケットファイルの権限が

 ll /var/lib/mysql/mysql.sock
 srwxrwxrwx 1 mysql mysql 0 07.02.2018 12:42 /var/lib/mysql/mysql.sock=

したがって、問題は上記のようにmysqlのディレクトリです。

drwx------ mysql mysql mysql

全員にアクセス権を与えることでこれを修正しました。これは、開発に使用する私のローカルマシンであるためです。

Sudo chmod go+rx /var/lib/mysql/

本番マシンでは、mysqlグループの正しいユーザーを検討します。

Sudo chmod g+rx /var/lib/mysql/

grep mysql /etc/group
mysql:x:89:[someusers]

常識を使用して、[]上記

これは期待どおりに機能します

mysql -u [user] -p[password]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.30-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
1
nelaaro

この問題の別の解決策は、接続時にソケットを使用しないことでした。

mysql -u [aaron] -p[aarw] -h 127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.30-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ユーザーがサーバーに接続するには、適切な権限が必要です。これらのどちらでも機能します。

-- Grants for '[username]'@'localhost'
GRANT ALL PRIVILEGES ON *.* TO '[username]'@'localhost' IDENTIFIED BY PASSWORD '*somehash' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `%`.* TO '[username]'@'localhost' WITH GRANT OPTION;

それを実行する前に、それが何をするかによるセキュリティへの影響を理解する必要があります。すべてのホストが接続できるようにし、インターネット上の任意の場所を含めます。

-- Grants for '[username]'@'%'
GRANT ALL PRIVILEGES ON *.* TO '[username]'@'%' IDENTIFIED BY PASSWORD '*somehash' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `%`.* TO '[username]'@'%' WITH GRANT OPTION;
0
nelaaro