MySQL Shell Script 비밀번호 노출 경고 해결하기 (Warning :Using a password on the command line interface can be insecure)

MySQL Shell Script나 Cron 작업으로 MySQL 명령 실행 시 비밀번호를 입력할 경우 발생하는 에러 해결 방법입니다. [Warning] Using a password on the command line interface can be insecure.
인프라코디
MySQL Shell Script 비밀번호 노출 경고 해결하기 (Warning :Using a password on the command line interface can be insecure)

리눅스에서 bash shell script나 cron 작업으로 MySQL 작업 시 비밀번호를 자동으로 입력하도록 -p, --password 옵션으로 자동 로그인을 사용하고 있었으나, MySQL 5.7 업그레이드 작업 이후 셸 스크립트에서 평문으로 비밀번호를 입력한 mysql -u 유저 -p비밀번호, mysqldump -u 유저 -p비밀번호 명령 실행 시 Warning: Using a password on the command line interface can be insecure 오류가 발생합니다.

MySQL 백업 스크립트는 정상적으로 실행되어 진행되지만, root 계정으로 경고 메일을 보내며 해당 내용은 /var/spool/mail/root파일에서 확인할 수 있습니다.

환경 정보

  • 운영 체제 : CentOS 7.9
  • 실행 계정 : root
  • SSH 접속 및 외부 인터넷이 가능한 네트워크 구성
  • MySQL 버전 : mysql-community-server-5.7.38-1.el7.x86_64

문제 확인

cron 작업으로 실행하는 bash shell script에서 MySQL 명령문이 -p 옵션과 함깨 평문으로 패스워드를 입력하여 되어 있으면 shell에서 You have new mail in /var/spool/mail/root 메시지를 받게되며, 해당 파일에 다음과 같은 경고 메시지를 확인할 수 있습니다.

mysql: [Warning] Using a password on the command line interface can be insecure. mysqldump: [Warning] Using a password on the command line interface can be insecure.

bash shell에서 MySQL 명령줄에서 -p 옵션으로 로그인하는 경우에도 다음과 같은 경고 메시지를 확인할 수 있습니다.

mysql -u root -p비밀번호
[root@infracody.com ~]# mysql -u root -p비밀번호 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4909 Server version: 5.7.38-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

해결 방법 2가지

MYSQL_PWD 환경 변수 사용하기

평문으로 비밀번호를 사용하여 자동 로그인하는 방법은 동일하지만 -p, --password 옵션을 사용하지 않고 mysql, mysqldump 명령 실행 시 MYSQL_PWD 환경 변수를 사용하여 보안 경고를 피할 수 있습니다.

MYSQL_PWD 환경 변수는 MySQL의 향후 버전에서 제거될 수 있습니다.

MYSQL_PWD="비밀번호" mysql -u root
[root@infracody.com ~]# MYSQL_PWD="비밀번호" mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4909 Server version: 5.7.38-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

mysql_config_editor 유틸리티 사용하기

mysql_config_editor 유틸리티를 사용하면 로그인 경로 파일에 난독화된 인증 자격 증명을 저장할 수 있습니다.로그인 정보를 저장하는 mylogin.cnf. 파일 위치는 Windows의 경우 %APPDATA%\MySQL디렉터리이고 현재 테스트하고 있는 CentOS 7의 경우 현재 사용자의 홈 디렉터리에 저장됩니다. MySQL 명령어 실행 시 이 파일을 읽어와서 MySQL 서버에 연결하기 위한 인증 자격 증명을 얻을 수 있고, 패스워드 입력을 피할 수 있습니다.

mysql_config_editor set --login-path=root --host=localhost --user=root --password --port=3306
[root@infracody.com ~]# mysql_config_editor set --login-path=root --host=localhost --user=root --password --port=3306 Enter password : 비밀번호 입력
  • mysql_config_editor 옵션 정보
  • 옵션 설명
    --login-path 유저명과 비밀번호를 저장하고 있는 정보를 불러올 이름을 입력합니다.
    이 문서에서는 root로 했으나 dbuser1, dbuser2와 같은 임의의 이름으로도 저장할 수 있으며,
    --login-path 옵션으로 로그인 시 이 이름으로 실행해야 합니다.
    --host MySQL DB 서버의 IP 주소를 입력합니다. (ex. localhost, 127.0.0.1, 공인 IP 또는 도메인)
    --user MySQL 계정 이름을 입력합니다.
    --password 명령 실행 후 해당 계정의 비밀번호를 입력하는 설정입니다.
    --port 기본 3306 포트일 경우 생략할 수 있으며, 기본 서비스 포트가 아닌 경우 설정이 필요합니다.

    mysql_config_editor 인증 정보를 확인합니다.

    ls -al /root/.mylogin.cnf
    [root@infracody.com ~]# ls -al /root/.mylogin.cnf -rw-------. 1 root root 156 Jun 7 22:11 /root/.mylogin.cnf [root@infracody.com ~]# cat /root/.mylogin.cnf ▒▒▒c▒zkE▒׽▒g▒W▒▒▒ؐ▒▒ ▒▒▒S▒▒n▒▒S▒▒fBn۞*r▒L▒R▒▒l▒w▒S▒▒=+▒▒▒▒;▒▒▒▒cҕk▒mn▒▒1▒▒B0▒lq [root@infracody.com ~]# mysql_config_editor print --all [root] user = "root" password = ***** host = "localhost" port = 3306
    mysql_config_editor로 저장된 인증 정보 중 비밀번호가 마스킹 처리된 것을 확인할 수 있습니다.

    --login-path 옵션으로 로그인합니다.

    mysql --login-path=root
    [root@infracody.com ~]# mysql --login-path=root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4909 Server version: 5.7.38-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

    마무리

    MySQL Shell Script 비밀번호 노출 경고 메시지를 해결하는 방법에 대해 알아보았습니다. 해결 방법으로 2가지를 이야기했지만, MYSQL_PWD보다 보안상 안전한 mysql_config_editor 환경 변수 사용을 권장합니다.

    인프라코디
    서버, 네트워크, 보안 등 IT 인프라 관리를 하는 시스템 엔지니어로 일하고 있으며, IT 기술 정보 및 일상 정보를 기록하는 블로그를 운영하고 있습니다. 글을 복사하거나 공유 시 게시하신 글에 출처를 남겨주세요.

    - 블로그 : www.infracody.com

    이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.
    댓글