[MariaDB] 보안 취약점 점검 #5 root 계정 보안
root 계정 보안
일반 사용자 계정 생성에 앞서 root 계정에 대한 보안을 체크해 보겠습니다.
MariaDB 10.4 이상에서 DB를 설치 하면 OS의 super user 권한을 가질 때 비밀번호 없이 MariaDB에 접속할 수 있습니다.
$ sudo mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 37
Server version: 11.4.3-MariaDB-1 Ubuntu 24.10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Support MariaDB developers by giving a star at https://github.com/MariaDB/server
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB 10.4 부터는 unix_socket 방식으로 인증 하도록 되어있기 때문에 localhost 상에서 root 접속시 OS의 root 권한이 있는 경우 DB인증이 자동으로 되는 개념인 것 같습니다.
MariaDB [(none)]> show create user root@localhost;
+----------------------------------------------------------------------------------------------------+
| CREATE USER for root@localhost |
+----------------------------------------------------------------------------------------------------+
| CREATE USER `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
MariaDB [(none)]>
OS의 root 권한으로 접속 하더라도 비밀번호를 입력해야 접속하도록 변경하는게 좋습니다.
주의 : unix_socket 으로 연동 되는 경우 반드시 OS의 super user 권한을 획득해야 합니다.
unix_socket 를 해제하고 비밀번호 방식으로 변경하게 되면 일반 사용자이더라도 마리아DB의 root@localhost 계정의 비밀번호를 알고 있고 콘솔에 접근이 된 상태면 root 권한으로 DB 접속을 할 수 있습니다.
어느 것이 보안에 더 좋을지는 판단을 하는 것이 좋겠습니다.
root 계정의 인증 방식을 확인합니다.
MariaDB [(mysql)]> show create user root@localhost;
+----------------------------------------------------------------------------------------------------+
| CREATE USER for root@localhost |
+----------------------------------------------------------------------------------------------------+
| CREATE USER `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
MariaDB [mysql]> select host, user, password, plugin from user where user = 'root';
+-----------+-------------+----------+-----------------------+
| Host | User | Password | plugin |
+-----------+-------------+----------+-----------------------+
| localhost | root | invalid | mysql_native_password |
+-----------+-------------+----------+-----------------------+
1 rows in set (0.005 sec)
unix_socket 방식은 인증을 OS에 위임하는 것 같습니다.
ed25519 비밀번호 방식으로 변경해 보겠습니다.
MariaDB [mysql]> alter user 'root'@'localhost' identified via ed25519 using password('비밀번호삭제');
Query OK, 0 rows affected (0.087 sec)
MariaDB [mysql]> show create user root@localhost;
+-----------------------------------------------------------------------------------------------------------+
| CREATE USER for root@localhost |
+-----------------------------------------------------------------------------------------------------------+
| CREATE USER `root`@`localhost` IDENTIFIED VIA ed25519 USING '비밀번호암호화된문자열' |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
MariaDB [mysql]> select user, host, password, plugin from user where user = 'root';
+------+-----------+----------+---------+
| User | Host | Password | plugin |
+------+-----------+----------+---------+
| root | localhost | | ed25519 |
+------+-----------+----------+---------+
1 row in set (0.004 sec)
MariaDB [mysql]>
새로 변경하는 비밀번호는 이전에 설치한 password validation 플러그인 영향을 받으므로 조건을 만족해야 합니다.
조건에 만족하지 않을 경우 에러가 발생합니다.
MariaDB [(none)]> alter user root@localhost identified via ed25519 using password('비밀번호삭제');
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
이제 새로 root 계정으로 접근하려고 하면 비밀번호 없이는 접속이 되지 않습니다.
변경후 root 계정으로 접근 하려면 반드시 비밀번호를 입력 해야 합니다.
$ sudo mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
$ sudo mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 11.4.3-MariaDB-1 Ubuntu 24.10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Support MariaDB developers by giving a star at https://github.com/MariaDB/server
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
지정한 비밀번호를 입력하여야 비로서 root 권한으로 MariaDB에 접속 할 수 있습니다.
하지만 sudo 권한이 없는 일반 계정으로도 MariaDB root 계정에 접속이 되는 것은 숙지 하셔야 합니다.
끝.