암호를 노출시키지 않고 cron 작업에서 mysql 덤프 실행


11

나는 달리고 싶다

mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql

크론 작업에서. 어떻게 안전하게 할 수 있습니까?

나는 그 명령을 바로 거기에 넣을 수 있다는 것을 알고 있지만, 머신에 액세스 할 수있는 사람은 누구나 crontab을 통해 바로 볼 수 있습니다. 더 좋은 방법이 있습니까?


1
예가 올바르지 않습니다. 공백이없는 -pP4SSw0rd 여야합니다.
Simon Woodside

답변:


14

명시된 바와 같이 man mysqldump: 6.1.2.1 참조 . MySQL 참조 매뉴얼의 비밀번호 보안대한 최종 사용자 지침 .

옵션 파일은 위 참조에 따라 가장 안전한 방법입니다. crontab에서 일반 텍스트로 제공하는 것은 좋지 않습니다. 특히 기본적으로 프로세스 명령 행이 ps다른 사용자에게 표시되기 때문 입니다. 참조에서 설명한대로 실제로 환경 변수에도 동일하게 적용됩니다.

MySQL 참조 매뉴얼의 관련 부분 :

옵션 파일에 비밀번호를 저장하십시오. 예를 들어, Unix에서는 홈 디렉토리 [client].my.cnf파일 섹션에 비밀번호를 나열 할 수 있습니다 .

[client]
password=your_pass

암호를 안전하게 유지하려면 본인 외에 다른 사람이 파일에 액세스 할 수 없어야합니다. 이를 확인하려면 파일 액세스 모드를 400또는로 설정하십시오 600. 예를 들면 다음과 같습니다.

shell> chmod 600 .my.cnf

명령 행에서 비밀번호를 포함하는 특정 옵션 파일의 이름을 지정하려면 옵션을 사용하십시오 --defaults-file=file_name. 여기서 file_name, 파일의 전체 경로 이름입니다. 예를 들면 다음과 같습니다.

shell> mysql --defaults-file=/home/francis/mysql-opts

4.2.3.3.“옵션 파일 사용” 에서는 옵션 파일에 대해 자세히 설명합니다.

/programming//q/10725209 도 참조 하십시오 .


ps 명령은 하나의 x로 암호를 난독 화하는 것으로 보입니다. ps : mysqldump -uroot -px xx mydb. 나는 그것이 좋은 보호라고 말하지 않습니다 (작업을 입력하면 암호가 일반 텍스트로 표시됩니다).

4

cronjob을 특정 사용자로 실행하고 간단한 Bash 로직을 사용하여 사용자 또는 그룹이 액세스 할 수있는 권한이있는 시스템 어딘가에 저장된 일반 텍스트 파일에서 비밀번호를 추출하십시오.

PASS=`cat /path/to/pwdfile`

 mysqldump -u aUser -p $PASS--all-databases > backup.sql

따라서 cronjob이 사용자 'example'로 실행되는 경우 파일의 소유권은 "example : example"이어야하고 0400이 허용되어야합니다.

사용자 수준 .my.cnf를 사용하여 유사한 기능을 수행 할 수도 있습니다 .


1
read PASS < /path/to/pwdfile같은 일을하는 관용적으로 깨끗합니다 (아마도 나는 superuser.com/q/323060/49184가 적용됩니다).
Daniel Andersson

* "관용적으로 깔끔한 방법입니다"... 편집에 빠졌습니다.
Daniel Andersson

Bash에 대한 가장 기본적인 이해조차도 그 고양이와 함께 무슨 일이 일어나고 있는지 볼 수 있어야합니다. :)
개럿

1
사실, 나는 그것을하는 가장 일반적인 방법이라고 말하고 싶지만 여전히 약간의 눈에 띄지 않습니다 :-). 하나 만드는 경우 UUOC을 파일보다 큰 경우에 습관은 물지 않습니다 ARGMAX이 같은 구조를 유혹 수도가 내장 된 쉘을 사용하는 별도의 과정을 대신한다, for i in `cat file`; do ...로 등 문제의 그러나 물론 자신의 배열 대부분의 일로 : 어떤 일이 일어나고 있는지 아는 사람은 자유롭게 선택할 수 있습니다. 나는 그것이 어떻게 나타날지에 관계없이 여기에 십자군에 있지 않습니다 :-D.
Daniel Andersson

0

컴퓨터에 접근 할 수있는 사람은 누구나에게 동일한 수준의 액세스가 /var/spool/cron/crontabs/에 관해서는 /var/lib/mysql당신이 그 (것)들을 가질 수 있도록합니다. 따라서 디렉토리에 대한 적절한 권한을 설정하고 완료하십시오. 루트 액세스 권한이있는 사용자는 데이터베이스 파일에 직접 액세스 할 수 있습니다. 기기에 대한 액세스 권한이 없다고 신뢰하는 사람은 기기에 전혀 액세스 할 수 없습니다.

일반적으로 사람들은를 통해 자신의 cronjobs 만 볼 수 있습니다 crontab -l.


0

백업 목적으로 mysql에서 읽기 전용 사용자를 갖는 것을 고려하십시오.

CREATE USER bUser IDENTIFIED BY 'p4ss';

GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;

mysqldump는이 단지가 필요 SELECT하고 LOCK TABLES그 일을 할 권한을.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.