VM에서 SELinux 보안 컨텍스트를 설정한 후에도 MySQL 권한 거부 오류가 발생했습니다.

VM에서 SELinux 보안 컨텍스트를 설정한 후에도 MySQL 권한 거부 오류가 발생했습니다.

CentOS에 MySQL을 설치했습니다(자세한 버전은 아래 참조). 내 OS는 물리적 머신이 아닌 가상 머신이고 디렉터리 /data/mysql는 로컬 디스크(가상)입니다. 가상화된 환경에서 몇 가지 추가 단계를 수행해야 할 수도 있습니다. 이것링크에는 SELinux 및 가상화에 대한 일부 정보가 있습니다.그러나 그것을 MySQL에 포함시키는 방법을 모릅니다.

MySQL은 데이터 디렉터리 아래에서는 잘 작동했지만, /var/lib/mysql다른 디스크의 다른 디렉터리로 옮기자 작동이 멈췄습니다. 동일한 디스크에 있는 다른 디렉터리도 유효합니다. SELinux를 비활성화하면 MySQL은 다른 디스크를 사용합니다. SELinux는 다양한 드라이버를 제한합니다. 다음 두 링크에 제공된 솔루션을 시도했습니다.

특히 다음 두 명령은 다음과 같습니다.

$ semanage fcontext --add --type mysqld_db_t '/data/mysql(/.*)?'
$ restorecon -r /data/mysql

내가 실행할 때 :

$ ls -dZ /data/mysql

다음 메시지가 나타납니다.

drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:SystemLow 

나는 아직도 계속해서 다음을 받고 있습니다 :

/usr/sbin/mysqld: 디렉터리를 '/data/mysql/'로 변경할 수 없습니다(오류 코드: 13 - 권한 거부됨)

제가 더 해야 할 일이 있나요?

  • MySQL: EditLine 래퍼를 사용하는 Linux(x86_64)용 mysql Ver 14.14 Distrib 5.6.14
  • 운영 체제: CentOS 버전 6.4(최종 버전)

답변1

SELinux 및 AppArmor가 없는 Debian 9 및 기타 시스템 기반 배포판에서 이 문제는 MySQL 데이터 디렉터리가 /home 아래의 임의의 위치로 이동될 때 발생할 수 있습니다.

그 이유는 systemd 서비스 파일(/lib/systemd/system/mariadb.service)에 다음 설정이 포함되어 있기 때문입니다. 보호홈페이지=true. 이 설정은 MySQL이 /home 아래의 폴더에 쓰는 것을 방지하므로 시작 시 ErrNo 13: Permission Denied 오류가 발생합니다.

해결 방법은 데이터 디렉터리를 /home 밖으로 이동하거나 systemd 서비스 파일에서 이 보안 기능을 끄는 것입니다.

1:sudo cp /lib/systemd/system/mariadb.service /etc/systemd/system/ # 로컬 재정의 서비스 파일

2: 편집/etc/systemd/system/mariadb.service그리고 변화집을 보호하다거짓입니다(보호홈페이지=false). 문서 저장

삼:sudo systemd 데몬 다시 로드# 오버레이 파일을 볼 수 있도록 systemd 서비스를 새로 고칩니다.

4:sudo systemctl mysql 시작#드디어 시작해야지

답변2

나는 실행중인 명령이나 /data/mysqlSELinux를 추가하는 방식에 직접적인 문제가 있다고 생각하지 않습니다.

모든 것이 제대로 작동하는지 확인하기 위해 존재하는지 확인하고/하거나 수동으로 이 줄을 /etc/selinux/targeted/contexts/files/file_contexts.local.

/data/mysql(/.*)?   system_u:object_r:mysqld_db_t:s0

위 단계를 반복하면 file_contexts.local예상대로 파일에 줄이 추가됩니다.

다음 Redhat 관련 문서에서 논의된 내용과 비교하여 귀하가 따르고 있는 단계를 다시 확인하겠습니다.10.4.1. MySQL 변경 데이터베이스 위치.

답변3

이 오류는 운영 체제 권한 문제로 인해 발생합니다. 다음 명령을 실행해 주세요.

semanage fcontext -a -e /var/lib/mysql /opt/mysql
restorecon -R -v /opt/mysql

관련 정보