웹 서버를 구축하고 고성능 어플리케이션을 구동할 때, 사용자의 회원 정보나 게시글 데이터 등을 안전하고 체계적으로 저장할 공간이 필요합니다. 이때 전 세계적으로 가장 널리 쓰이는 오픈소스 관계형 데이터베이스 관리시스템(RDBMS)이 바로 MySQL입니다. MySQL은 뛰어난 성능과 안정성, 그리고 방대한 커뮤니티를 보유하고 있어 리눅스 인프라 환경의 필수 요소로 꼽힙니다.
하지만 데이터베이스는 해커들의 가장 매력적인 표적이기 때문에, 단순히 설치하는 것만으로는 부족합니다. 설치 직후 외부의 위협으로부터 데이터베이스를 보호하기 위한 보안 설정과 강력한 루트(Root) 비밀번호 세팅이 필수적입니다. 본 가이드에서는 리눅스 Ubuntu 환경을 기준으로 MySQL을 안전하게 설치하고 초기 비밀번호를 설정하는 전 과정을 상세히 정리합니다.
1. Ubuntu 패키지 관리자를 통한 MySQL 설치
우분투 운영체제는 공식 패키지 저장소에 MySQL을 기본 포함하고 있으므로, 기본 내장된 APT 패키지 매니저를 통해 가장 안정적인 공인 버전을 쉽게 다운로드할 수 있습니다.
패키지 리스트 최신화
데이터베이스처럼 민감한 소프트웨어를 설치할 때는 기존 패키지 인덱스가 꼬이지 않도록 먼저 시스템을 업데이트해 주는 것이 정석입니다.
Bash
sudo apt update
MySQL 서버 패키지 설치
업데이트가 완료되면 아래 명령어를 입력하여 MySQL 서버를 설치합니다. -y 옵션을 붙여 설치 도중 나오는 확인 질문을 자동으로 통과합니다.
Bash
sudo apt install mysql-server -y
설치가 완료되면 시스템 백그라운드에서 MySQL 서비스가 자동으로 시작됩니다. 서버가 정상적으로 켜져서 구동 중인지 확인하려면 아래 명령어를 입력합니다.
Bash
sudo systemctl status mysql
화면에 active (running)이라는 초록색 문구가 표시된다면 데이터베이스 엔진이 성공적으로 리눅스 서버에 안착하여 작동하고 있는 상태입니다.
2. 데이터베이스 보안 강화 스크립트 실행 (mysql_secure_installation)
MySQL은 설치 직후 누구나 접근할 수 있는 테스트용 데이터베이스와 익명 사용자 계정이 활성화되어 있어 보안상 매우 취약합니다. 이를 해결하기 위해 MySQL 진영에서는 초기 보안 구멍을 자동으로 막아주는 아주 유용한 내장 스크립트를 제공합니다.
터미널에 아래 명령어를 입력하여 보안 설정을 시작합니다.
Bash
sudo mysql_secure_installation
명령어를 실행하면 대화형 질문이 차례대로 나타납니다. 보안을 위해 다음과 같이 선택하는 것을 권장합니다.
- VALIDATE PASSWORD COMPONENT (비밀번호 복잡도 검사 기능 익스텐션 설정): 비밀번호를 허술하게 지으면 경고를 띄우는 기능입니다. 활성화하려면
Y를 누르고, 복잡도 수준은 숫자2(가장 강력함: 숫자, 대소문자, 특수문자 조합 필수)를 선택합니다. - Remove anonymous users? (익명 사용자 제거): 보안을 위해 익명으로 로그인하는 계정은 무조건 지워야 하므로
Y를 입력합니다. - Disallow root login remotely? (원격 root 로그인 차단): 최고 관리자인 root 계정이 외부 IP에서 직접 접속하는 것은 대단히 위험합니다. 로컬(서버 내부)에서만 root 접속이 가능하도록
Y를 눌러 차단합니다. - Remove test database and access to it? (테스트 데이터베이스 제거): 누구나 접근할 수 있는 기본 샘플 데이터베이스를 제거하기 위해
Y를 입력합니다. - Reload privilege tables now? (권한 테이블 즉시 갱신): 방금 설정한 규칙들을 지금 바로 데이터베이스 시스템에 반영하기 위해
Y를 누릅니다.
이 스크립트를 완수하는 것만으로도 1차적인 외부 해킹 위협을 크게 줄일 수 있습니다.
3. MySQL Root 계정 초기 비밀번호 설정 및 인증 방식 변경
최신 Ubuntu 환경에 내장된 MySQL은 보안상의 이유로 처음 설치 시 root 계정에 비밀번호가 아닌, 리눅스 시스템 계정과 연동되는 auth_socket 인증 방식을 사용합니다. 즉, 리눅스 터미널에서 sudo mysql을 치면 비밀번호 없이 바로 들어가지만, 외부 프로그램(DBeaver, IntelliJ, Node.js 소스 코드 등)에서 비밀번호를 입력해 root로 접속하려고 하면 인증 오류가 발생합니다.
원활한 개발 협업과 어플리케이션 연동을 위해 root 계정에 고정 비밀번호를 부여하고 인증 방식을 변경해 주어야 합니다.
1단계: MySQL 관리자 모드 진입
우선 관리자 권한으로 비밀번호 없이 MySQL 내부 프롬프트로 들어갑니다.
Bash
sudo mysql
화면 프롬프트가 mysql> 형태로 바뀌면 성공적으로 데이터베이스 내부 명령 모드에 진입한 것입니다.
2단계: root 비밀번호 변경 SQL 명령어 실행
아래 SQL 문을 실행하여 root 계정의 인증 방식을 일반 비밀번호 방식(caching_sha2_password 또는 mysql_native_password)으로 전환하고, 원하는 강력한 패스워드를 지정합니다. 본인의_강력한_비밀번호 부분에 본인이 사용할 암호를 적어줍니다.
SQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '본인의_강력한_비밀번호';
만약 개발하는 백엔드 프레임워크나 라이브러리가 최신 SHA2 인증 방식을 지원하지 않는 구버전이라면, 구형 방식인 mysql_native_password로 매핑해 주어야 호환성 에러가 나지 않습니다.
SQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '본인의_강력한_비밀번호';
3단계: 권한 적용 및 탈출
수정한 회원 계정 정보를 메모리에 즉시 반영하고 MySQL 창을 빠져나옵니다. SQL 문 끝에는 항상 세미콜론(;)을 붙여야 함을 주의하세요.
SQL
FLUSH PRIVILEGES;
EXIT;
4. 변경된 비밀번호 설정 검증하기
인증 방식과 비밀번호가 올바르게 바뀌었는지 테스트해 볼 차례입니다. 이제 기존처럼 sudo mysql을 입력하면 접속이 거부되거나 에러가 발생할 것입니다.
앞으로는 데이터베이스에 접속할 때 사용자(-u)와 비밀번호 입력([사용할 비밀번호] 기입 아님, 명시적 파라미터 -p 입력) 옵션을 명확히 주어야 합니다.
Bash
mysql -u root -p
명령어를 입력하면 Enter password:라는 안내가 뜹니다. 이때 아까 3단계에서 설정한 비밀번호를 차분히 타이핑하고 엔터를 누르면 정상적으로 복귀되는 것을 볼 수 있습니다. (타이핑 시 보안을 위해 화면에 글자나 * 표시가 전혀 뜨지 않는 것이 정상이니 당황하지 말고 입력하시면 됩니다.)
결론: 안전한 데이터 관리의 초석
데이터베이스는 서비스의 심장과 같아서 초기 세팅 단계에서 보안의 기본기를 제대로 다져놓지 않으면, 서비스 오픈 후 랜섬웨어나 데이터 유출 같은 치명적인 인프라 사고를 겪게 됩니다.
오늘 가이드해 드린 우분투 MySQL 설치법과 비밀번호 인증 체계 변경, 그리고 보안 스크립트 실행 과정을 차근차근 완수하셨다면 최소한의 안전장치는 완벽히 확보한 셈입니다. 다음 단계로는 root 계정을 그대로 서비스에 쓰지 말고, 내가 개발할 어플리케이션 전용의 일반 데이터베이스 사용자(User)와 스키마(Schema)를 추가로 생성하여 권한을 분리해 운영하는 구조를 설계해 보시기 바랍니다.