mariadb에서 패스워드 없이 로그인할때
시작하는 말
기존에 작성했던 컨텐츠들 업데이트를 하면서 문서의 리팩토링(Refactoring)을 진행해보려고 합니다.
이번엔 MariaDB 소켓인증 기술편입니다.
MariaDB 버전 업그레이드 후 localhost에서 접속시 패스워드 없이 로그인이 가능했는데 왜 그런지 확인해보려고 합니다.
발생현상
-
패스워드없이 root 로그인
# mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 15 Server version: 10.4.7-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
DML / DDL 테스트
MariaDB [(none)]> create database test123; Query OK, 1 row affected (0.003 sec) MariaDB [test123]> create table wow( name int); Query OK, 0 rows affected (0.008 sec) MariaDB [test123]> insert into wow values(123); Query OK, 1 row affected (0.003 sec) MariaDB [test123]> select * from wow; +------+ | name | +------+ | 123 | +------+ 1 row in set (0.001 sec) -- MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.001 sec)
왜?
- unux_socket 기능 활성화로 자동인증된 상태여서 그렇다고 하네요.
Unix_Socket을 사용하는 이유는
- unix_socket을 사용하는 이유
- 보안성 강화 : OS계정을 기준으로 사용하기 때문에 별도의 계정으로 mysql root로그인은 할 수 없다고 합니다,
- login 패스워드가 없기 때문에 무차별 대입(brute force) 공격에 유용합니다. 부수적으로 mysql root패스워드가 노출될수가 없다고 합니다. (패스워드 값이 없으니....)
- 단점
- MariaDB에서도 기술한대로 여러사용자가 접속하는 경우에는 적합하진 않습니다.
"The unix_socket authentication plugin is not suited to multiple Unix users accessing a single MariaDB user account." - 패스워드가 노출된 사용자가 sudo 명령어를 이용해 root 권한이 획득된 경우 DB접근도 자동으로 허용할 수 있습니다.
- MariaDB에서도 기술한대로 여러사용자가 접속하는 경우에는 적합하진 않습니다.
unix_socket 비활성화 방법
-
local socket 차단설정
$> vi /etc/my.cnf [mariadb] ... unix_socket=OFF
-
root로 localhost 접근을 위한 DCL 적용
MYSQL> grants for *.* to root@localhost identified by '{{ root 패스워드 }}'; Query OK, 0 rows affected (0.011 sec) MYSQL> flush privileges; Query OK, 0 rows affected (0.001 sec)
-
Mariadb 서비스 재시작