본문 바로가기
방통대1/데이터베이스

mysql 설치 on rocky 9 linux

by book_lover 2024. 12. 26.

1. MySQL 설치 준비

1.1 SELinux 설정 (설치 전)

SELinux가 MySQL의 작업을 방해하지 않도록 설정합니다.

sudo semanage permissive -a mysqld_t
sudo restorecon -R /var/lib/mysql
  • semanage permissive -a mysqld_t: MySQL 데몬(mysqld)에 대해 SELinux를 Permissive 모드로 설정합니다.
  • restorecon -R /var/lib/mysql: MySQL 데이터 디렉토리의 SELinux 보안 컨텍스트를 복구합니다.

2. MySQL 설치

2.1 MySQL 리포지토리 추가

MySQL 설치를 위해 공식 리포지토리를 추가합니다.

sudo rpm -Uvh mysql80-community-release-el9-1.noarch.rpm

2.2 설치 가능한 MySQL 버전 확인

sudo yum --showduplicates list mysql-community-server
  • 설치 가능한 MySQL 버전을 확인하여 최신 버전을 선택합니다.

2.3 MySQL 서버 설치

sudo yum install mysql-community-server
  • 위 명령으로 MySQL 서버를 설치합니다.

3. MySQL 초기화 및 실행

3.1 데이터 디렉토리 권한 설정

MySQL 데이터 디렉토리(/var/lib/mysql)의 소유권과 권한을 설정합니다

sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql

3.2 데이터 디렉토리 초기화

MySQL이 처음 실행될 때 필요한 시스템 파일과 데이터를 생성합니다.

sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql​
  • 이 명령은 auto.cnf와 같은 초기 파일을 생성하고, root 계정의 임시 비밀번호를 로그에 기록합니다.

3.3 MySQL 서비스 시작 및 활성화

MySQL 서비스를 시작하고, 컴퓨터 부팅 시 자동으로 실행되도록 설정합니다.

sudo systemctl enable --now mysqld
  • enable은 부팅 시 자동 실행을 설정하고, --now는 즉시 서비스를 시작합니다.
  • 상태 확인:
sudo systemctl status mysqld

4. root 계정의 임시 비밀번호 확인

4.1 로그에서 임시 비밀번호 확인

MySQL 초기화 시 생성된 root 계정의 임시 비밀번호는 로그 파일에 저장됩니다.

sudo grep 'temporary password' /var/log/mysqld.log

출력 예시:

[Note] A temporary password is generated for root@localhost: Abc123!xyz
  • 위에서 확인된 임시 비밀번호(Abc123!xyz)를 메모해둡니다.

5. MySQL 로그인 및 비밀번호 변경

5.1 root 계정으로 로그인

임시 비밀번호를 사용하여 MySQL에 로그인합니다.

mysql -u root -p
  • -u root: root 사용자로 로그인.
  • -p: 비밀번호 입력을 요청.
  • 프롬프트가 뜨면 로그에서 확인한 임시 비밀번호를 입력하세요.

5.2 새로운 비밀번호로 변경

로그인 후, root 계정의 비밀번호를 새롭게 설정해야 합니다.

ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운비밀번호!';

6. (선택 사항) 인증 방식 변경

MySQL 8.0은 기본적으로 caching_sha2_password 인증 방식을 사용하지만, 일부 클라이언트와 호환되지 않을 수 있습니다. 이 경우 인증 방식을 mysql_native_password로 변경할 수 있습니다.

6.1 인증 방식 변경

로그인 후 아래 명령어를 실행하세요:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호!';

7. SELinux 복구 (보안 강화)

설치와 초기화가 완료되었으니 SELinux를 다시 Enforcing 모드로 복구합니다.

sudo semanage permissive -d mysqld_t

caching_sha2_password 인증 방식과 mysql_native_password와 차이점

caching_sha2_password 인증 방식

특징

  • SHA-256 기반 암호화: 비밀번호를 안전하게 저장하기 위해 SHA-256 해시 알고리즘을 사용하며, 기존 SHA-1 기반의 mysql_native_password보다 보안성이 뛰어납니다.
  • Salt 추가: 동일한 비밀번호라도 매번 다른 해시 값을 생성하도록 Salt(랜덤 데이터)를 사용하여 보안을 강화합니다.
  • 서버 측 캐싱: 서버 메모리에 인증 데이터를 캐싱하여 동일 클라이언트의 재인증 시 성능을 향상시킵니다.
  • 보안 연결 요구: 기본적으로 TLS/SSL과 같은 보안 연결을 통해 비밀번호를 전송하거나 RSA 키 교환 방식을 사용합니다.

주요 차이점 비교

특징 caching_sha2_password mysql_native_password
도입 시기 MySQL 8.0 MySQL 4.1
암호화 알고리즘 SHA-256 SHA-1
보안 수준 높음 낮음
Salt 사용 여부 사용 (동일 비밀번호라도 다른 해시) 미사용 (동일 비밀번호는 동일 해시)
서버 측 캐싱 지원 미지원
TLS/SSL 요구 여부 권장 (또는 RSA 키 교환) 필요 없음
클라이언트 호환성 최신 클라이언트만 지원 오래된 클라이언트와도 호환

sudo grep 'temporary password' /var/log/mysqld.log 로확인한 임시 비밀번호가 caching_sha2_password 방식인가?

MySQL에 로그인한 후, root 계정의 인증 플러그인을 확인할 수 있습니다:

SELECT user, host, plugin FROM mysql.user;

  1. 과거(특히 MySQL 5.6 이전)에는 root 계정의 초기 비밀번호가 없는 경우가 많았고, /var/log/mysqld.log 파일에 관련 정보가 기록되지 않았습니다.
  2. MySQL 5.7부터는 보안을 강화하기 위해 root 계정에 임시 비밀번호를 생성하고 이를 /var/log/mysqld.log에 기록하는 방식이 도입되었습니다.
  3. 현재(MySQL 8.0)도 동일한 방식으로 동작하며, 로그 파일에서 임시 비밀번호를 확인한 후 새로운 비밀번호로 변경해야 합니다.

특징MySQL 5.7 및 이전 (mysql_native_password)MySQL 8.0 (caching_sha2_password)

암호화 알고리즘 SHA-1 SHA-256
Salt 사용 여부 미사용 사용 (동일 비밀번호라도 다른 해시)
보안 수준 낮음 높음
서버 측 캐싱 미지원 지원
TLS/SSL 요구 여부 필요 없음 권장 (또는 RSA 키 교환)
로그에서 임시 비밀번호 확인 방식 동일 (/var/log/mysqld.log) 동일 (/v

실제 동작 차이

과거 (mysql_native_password):

  1. 비밀번호가 클라이언트에서 입력되면, 클라이언트는 이를 SHA-1 해시로 변환해 서버로 전송합니다.
  2. 서버는 저장된 해시값과 클라이언트에서 전송된 해시값을 비교하여 인증합니다.
  3. 동일한 비밀번호는 항상 동일한 해시값을 가지므로, 공격자가 해시값만으로도 비밀번호를 유추할 가능성이 있습니다.

현재 (caching_sha2_password):

  1. 비밀번호가 클라이언트에서 입력되면, 클라이언트는 이를 SHA-256 알고리즘과 Salt(랜덤 데이터)를 사용해 암호화합니다.
  2. 서버는 저장된 해시값과 클라이언트에서 전송된 값을 비교하여 인증합니다.
  3. Salt를 사용하기 때문에 동일한 비밀번호라도 매번 다른 해시값이 생성되며, 공격자가 사전 공격(Dictionary Attack)을 수행하기 어렵습니다.

왜 암호화 방식이 바뀌었나?

  1. SHA-1의 보안 취약점
    • SHA-1은 오래된 알고리즘으로, 현재 많은 보안 연구자들이 이를 더 이상 안전하지 않다고 평가합니다.
    • 예를 들어, Google과 CWI Amsterdam은 2017년에 SHA-1 충돌을 성공적으로 시연한 바 있습니다.
  2. SHA-256의 도입
    • SHA-256은 SHA-1보다 훨씬 강력하며, 현재 보안 표준에서 널리 사용됩니다.
    • MySQL 8.0은 이러한 최신 보안 표준을 따르기 위해 기본 인증 방식을 caching_sha2_password로 변경했습니다.
  3. Salt 적용
    • Salt는 랜덤 데이터를 추가하여 동일한 비밀번호라도 매번 다른 해시값을 생성하도록 합니다.
    • 이는 해시 충돌 공격이나 사전 공격(Dictionary Attack)을 방어하는 데 효과적입니다.
  4. 성능 향상
    • caching_sha2_password는 서버 메모리에 인증 데이터를 캐싱하여 클라이언트가 재인증할 때 성능을 향상시킵니다.

기본 인증 방식을 변경하는 방법

MySQL 서버 전체의 기본 인증 방식을 변경하려면 설정 파일(my.cnf)을 수정해야 합니다.

[mysqld]
default_authentication_plugin=mysql_native_password
sudo systemctl restart mysqld
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호!';

'방통대1 > 데이터베이스' 카테고리의 다른 글

SQL-1  (3) 2024.12.24