Selinux는 mysqld에 대한 액세스를 거부합니다.

Selinux는 mysqld에 대한 액세스를 거부합니다.

mysql 데이터베이스를 덤프하는 스크립트가 있습니다. 그런 다음 파일을 압축하고 cron을 사용하여 내 홈 폴더에 저장합니다. 문제는 오류 메시지가 나타나는 것 같습니다.

mysqldump: "'auth_group'의 필드 표시"를 실행할 수 없습니다: '/tmp/#sql_151e_0.MYI' 파일을 생성/쓰기할 수 없습니다(오류 코드: 13) (1) c2duo_db-22072011.sql

이제 내 centos 서버 그래픽 측면에서 selinx가 mysqld에 대한 액세스를 거부했다고 표시됩니다. 물론 selinux를 비활성화하면 정상적으로 작동합니다.하지만 selinux를 활성화해야 합니다.이 문제를 해결할 방법이 있나요?

예약 된 일들

10 11 * * 5 /home/sh/mysqlbackup.sh

MySQL 백업.sh

  #!/bin/sh

    mysqldump -uroot -ppassword --opt c2duo_db > /home/sh/c2duo_db-`date +%d%m%Y`.sql

    cd /home/sh
    tar -zcvf c2duo_db.tgz *.sql

편집하다:이것이 내가 명령에서 얻은 것입니다 grep mysqld /var/log/audit/audit.log | tail | audit2why.

type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

또한 이 컴퓨터에는 mysql 서버가 이미 설치되어 있습니다. 그래서 나는 이것이 공식 저장소라고 생각합니다.

답변1

디렉터리의 파일 컨텍스트가 올바르지 않을 수 있습니다 /tmp. 우리에게 한 번 보세요 ls -ldZ /tmp.

내부의 임시 파일은 어떻게 fcontext를 /tmp가질 수 있습니까 httpd_sys_content_t?

type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

RHEL에서는 다음과 같습니다.

ls -ldZ /tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /tmp

물론 백업 파일의 경로와는 아무런 관련이 없습니다. 권한 문제인 경우 다음과 같은 메시지가 표시됩니다.

# su -s /bin/bash nobody -c 'mysqldump -uroot -p123456 --opt test > /root/test-`date +%d%m%Y`.sql'
bash: /root/test-13112013.sql: Permission denied

strace -f -ff -o /tmp/strace mysqldump -uroot -ppassword --opt c2duo_db이를 사용 하여 어떤 파일을 열려고 하는지 확인하고 사용할 수 있습니다 .

답변2

뭔가 잘못 표기된 것 같습니다. 달리기를 시도해 본 적이 있나요 restorecon -R /var/lib/mysql?

답변3

방금 다음 제안 명령을 실행했습니다 audit2why.

% echo "type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file" | audit2allow 

이 명령은 다음을 반환합니다.

#============= mysqld_t ==============
allow mysqld_t httpd_sys_content_t:file write;

이는 필요한 SeLinux 정책 허용 규칙일 수 있습니다.

하지만 이 규칙을 허용하는 것이 안전한지 모르겠습니다.

답변4

문제의 원인:

문제의 원인은 쉘 스크립트 파일을 "/home/sh/"에 두었기 때문입니다.

/home/ 폴더 아래에 있는 /sh/ 폴더는 시스템 생성 폴더(시스템 사용자 생성 시 생성된 폴더)가 아닌, 직접 생성한 폴더인 것 같습니다. 따라서 cron이 실행 중일 때 시스템은 쉘 스크립트 파일 내의 스크립트에 대한 액세스를 제한합니다.

노트:Linux에서는 액세스가 /home/ 디렉터리의 파일로 제한됩니다. 하지만 파일은 다음 위치에 있습니다./home/[시스템이 각 시스템 사용자를 위해 생성한 디렉토리]/무제한 액세스 가능

해결책:

Move the /sh/ folder along with the sh file inside a system generated folder under /home/ directory (or) create a system user named sh

관련 정보