OS X : 소프트 링크를 사용하여 암호화 된 FileVault 이미지에 MySQL 데이터를 안전하게 저장


0

FileVault로 보호되는 홈 디렉토리에 저장된 데이터 디렉토리를 사용하기 위해 macports가 설치된 MySQL을 얻으려고합니다.

내가 사용 sudo cp -a /opt/local/var/db/mysql5 ~/db/합니다 ( -a보장하기 위해 파일 권한은 그대로 유지) 다음 소프트 링크 원래 mysql5 디렉토리를 대체 :sudo ln -s ~/db/mysql5 /opt/local/var/db/mysql5

그러나 이제 MySQL을 시작하려고하면 실패합니다. 적어도 ~/db/mysql5dir의 일부 파일 , 특히 여기에 첨부되는 오류 로그를 수정하는 정도까지는 소프트 링크를 따릅니다 .

110108 15:33:08 mysqld_safe Starting mysqld daemon with databases from /opt/local/var/db/mysql5
110108 15:33:08 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
110108 15:33:08 [Warning] '--log_slow_queries' is deprecated and will be removed in a future release. Please use ''--slow_query_log'/'--slow_query_log_file'' instead.
110108 15:33:08 [Warning] '--default-character-set' is deprecated and will be removed in a future release. Please use '--character-set-server' instead.
110108 15:33:08 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
110108 15:33:08 [Note] Plugin 'FEDERATED' is disabled.
110108 15:33:08 [Note] Plugin 'ndbcluster' is disabled.
/opt/local/libexec/mysqld: Table 'mysql.plugin' doesn't exist
110108 15:33:08 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110108 15:33:09  InnoDB: Started; log sequence number 4 1596664332
110108 15:33:09 [ERROR] /opt/local/libexec/mysqld: Can't create/write to file '/opt/local/var/db/mysql5/mac.local.pid' (Errcode: 13)
110108 15:33:09 [ERROR] Can't start server: can't create PID file: Permission denied
110108 15:33:09 mysqld_safe mysqld from pid file /opt/local/var/db/mysql5/gPod.local.pid ended

MySQL의는 만들 수없는 이유는 볼 수 없습니다 pid수동으로 사용하여 만들기 때문에, 파일을 _mysql(사용자가 성공 sudo -u _mysql touch mac.local.pid내부에서 ~/db/mysql5)

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?


1
나는 mysql 사용자가 아니지만 /opt/local/var/db/mysql5하위 디렉토리가 있는 경우 "cp -a"는 "cp -R"이어야합니다 .
harrymc

잠시 동안 @harrymc -a는을 포함하지 않는 것으로 생각했지만 다음을 포함 한다고 생각했습니다 . 그러나 해리가 말하는 것은 암시 적이라고 생각 합니까? 실제로 문제가 될 수 있습니다. -R-a Same as -pPR-P-P If the -R option is specified, no symbolic links are followed.
Arjan

죄송합니다. "추종하지 않음"은 복사하는 동안 새 심볼릭 링크를 만들지 않는다는 의미는 아닙니다 . 나는 그것이 내용을 복제하지 않을 것을 암시한다고 생각합니다 ...? 사실이라면 cp -a결국 괜찮습니다.
Arjan

@Arjan : 아니요, "cp man page"를 검색 할 때 아주 오래된 페이지 만 얻었습니다. 그러나 나는 여전히 포스터가 cp 결과를 확인해야한다고 생각합니다.
harrymc

@GJ : 링크로 대체하기 전에 cp 대상이 모든 속성의 소스와 동일한 지 확인 했습니까? 왜 mv가 아닌 cp를 사용 했습니까? 교체 된 이전 디렉토리의 백업이 있습니까?
harrymc

답변:


2

MySQL 데이터를 암호화 된 상태저장 하는 더 좋은 방법이 있다고 생각하기 때문에 비슷한 질문 중 하나에 대해 언급했습니다 .


이것은 권한 문제처럼 들립니다. 홈 폴더에서 FileVault는 일반적인 폴더 rwx------의 기본값과 비교하여 권한을 설정합니다 (즉, 소유자는 읽고 쓸 수 있지만 그룹과 다른 사용자에게는 권한이 없습니다) rwxr-xr-x.

여기서 실행 요소는 실행 권한을 통해 사용자가 폴더를 검색 (일명 트래버스) 할 수 있다는 것 입니다. 따라서 _mysql사용자가 호출 mysqld하고 심볼릭 링크를 따라갈 때 홈 폴더를 탐색하려고 시도합니다. 그건 mysqld_safe그게 호출 한 사용자의 권한을 사용하여 로그에 오류 메시지를 기록 (경우에 아마 루트를 mysqld_safeMacPorts의 시작 스크립트 사용하여 시작 sudo /path/to/mysqld_safe또는 유사합니다.)

다음 명령을 순서대로 실행하여이 가설을 테스트 할 수 있습니다.

$ cd ~/db/mysql5/
$ sudo -u _mysql touch mac.local.pid

순회가 없기 때문에 성공해야합니다.

$ sudo -u _mysql touch ~/db/mysql5/mac.local.pid
$ sudo -u _mysql touch /Users/[username]/db/mysql5/mac.local.pid

둘 다 실패하지만

$ sudo -u _mysql touch ../mac.local.pid

아마도 ~/db/앞에서 언급 한 더 관대 한 기본 폴더 권한이 있기 때문에 아마도 성공할 것입니다 .

간단한 해결책은 홈 폴더의 그룹을로 설정하고 그룹에 홈 폴더 _mysql를 검색 할 수있는 권한을 부여하는 것입니다.

$ sudo chown :_mysql ~
$ chmod g=x ~

그러나 이것은 심각한 보안 영향을 미칩니다 . _mysql사용자 역할을하는 사람 (MySQL의 취약점을 통해 잠재적으로)은 기본적 rwxr-xr-x으로 폴더 및 rw-r--r--파일 의 권한에 따라 홈 폴더를 탐색하고 파일 및 폴더를 조작 할 수 있습니다. 앞에서 본 것처럼, 여기에는 ~/db/사용자가 만든 폴더 또는 파일을뿐만 아니라, ~/Public/하고 ~/Sites/. 공격자가 홈 폴더에 파일 목록을 직접 가져올 수는 없지만 읽을 수있는 공통 파일이 많으며 파일을 사용하여 다른 파일에 대한 데이터를 수집하는 여러 가지 방법이 있습니다. ( .bash_history봄이 떠오른다.)


1

Tait Lewis는 실행 권한으로 문제를 잘 설명했습니다. 그러나 실제 사용자 계정에이를 수행하는 것은 보안 상 위험하며 다른 staff그룹 구성원의 합법적 인 실행을 방해 할 수 있습니다 .

내가 같은 문제를 해결 한 방법은 다음과 같습니다.

  • dbFileVault를 사용하도록 설정 하여 새 표준 사용자 계정 (이 예제에서는 전화 )을 만듭니다. 최소한 기본 사용자의 비밀번호만큼 강력한 비밀번호를 사용하십시오.
  • 기본 사용자로 로그인 한 상태에서 다음 명령을 실행하십시오.
  • 파인더에서 찾아 볼 수있게하지 않고 db 사용자의 FileVault 이미지를 마운트하십시오.

sudo hdiutil attach /Users/db/db.sparsebundle -owners on -mountpoint /Users/db -nobrowse

  • _mysql사용자가 db 사용자의 홈 디렉토리를 실행할 수 있도록 권한을 수정하십시오 .

sudo chown :_mysql /Users/db; sudo chmod g=x /Users/db

  • MySQL 종료 :

sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop

  • MySQL 파일을 FileVault에 복사하십시오.

sudo cp -a /opt/local/var/db/mysql5 /Users/db/( /뒤에 추가하지 마십시오 mysql5)

  • 이제 삭제, 보안 삭제 또는 /opt/local/var/db/mysql5디렉토리 이름 바꾸기 만하면 됩니다.

  • 그런 다음 소프트 링크를 만듭니다.

sudo ln -s /Users/db/mysql5 /opt/local/var/db/mysql5

  • 마지막으로 MySQL을 다시 시작하십시오.

sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start

Mac을 재부팅 할 때마다 이미지를 마운트하기 전에 sudo hdiutil ...명령을 실행 하여 이미지를 마운트하고 MySQL을 수동으로 시작해야합니다.


0

먼저, 아직 수행하지 않은 경우 사용중인 MySQL 버전이 해당 테이블에 대한 심볼릭 링크를 지원하는지 확인하십시오. 이 2008 기사 에 따르면 심볼릭 링크는 당시 MyISAM 테이블에서만 지원되었으며 "다른 스토리지 엔진 용 테이블에서 사용하는 파일의 경우 심볼릭 링크를 사용하려고하면 이상한 문제가 발생할 수 있습니다."

MySQL 버전이 현재 수행중인 작업을 지원해야한다고 확신하면 시작하려는 사용자를 다시 확인 mysqld_safe하고에 대한 권한과 비교하십시오 /opt/local/var/db/mysql5/. 을 사용했기 때문에 cp -a_mysql 사용자가 디렉토리를 소유하고 쓸 수있을 가능성이 있기 때문에 (이것이 작동하는 이유입니다 sudo -u _mysql touch...) 일반 사용자 계정에서 MySQL을 시작하려고 할 때 실패합니다 (_mysql 및 따라서 디렉토리에 대한 쓰기 액세스 권한이 없습니다).


1
이 기사는 심볼릭 링크를 수동으로 생성하지 않는 방법을 보여줍니다. 내가 이해하는 한, 권한이 올 바르고 FileVault 시스템에 의해 부과되는 특별한 경고가없는 경우 심볼릭 링크는 MySQL에 대해 완전히 투명해야하므로 MySQL 호환성 문제가 아닙니다.
GJ.

0

이것은 많이 가져올 수 있지만 별도의 파티션에 소프트 링크하는 경우 항상 해당 링크를 소프트 링크 포인트에 마운트 한 다음 일반적으로 마운트 할 위치에 소프트 링크를 수행하십시오.

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