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 : 비밀번호 입력
옵션 | 설명 |
---|---|
--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
--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
환경 변수 사용을 권장합니다.
- 블로그 : www.infracody.com
이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.