PHP Imagick을 통한 PDF 제어가 안 될 때 (an operation not allowed by the security policy `PDF’)

AH01071: Got error 'PHP message: PHP Fatal error: Uncaught ImagickException: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408

위와 같은 에러가 발생하면서 PDF 1페이지를 이미지로 변경하는 로직이 작동하지 않았습니다. 알아 보니 ImageMagick이 보안 정책으로 PDF 파싱을 막아 놨기 때문이네요.

이 때는 정책을 변경해 주면 됩니다.

/etc/ImageMagick-6/policy.xml 파일에 정책이 선언돼 있습니다.

PDF와 관련된 선언은 아래와 같은 형태입니다. 보면 coder 영역에 대한 설정이고, 파일 패턴은 PDF다, 권한은 없다 하고 선언이 돼 있다는 것을 알 수 있을 겁니다.

<policy domain="coder" rights="none" pattern="PDF" />

패턴과 권한이야 익숙한데 도메인(영역)에서 코더는 무엇일까요?

인코더, 디코더를 말하는데요. 이미지매직이 PDF를 해석하고 다시 PDF 문서를 만들 때 사용하는 인코더, 디코더에게 PDF 관련해서는 아무것도 하지 말라고 보안 설정에 해둔 것이지요. 그러니까 PDF는 건드릴 수 없다고 에러를 뿜었던 것입니다.

자, 권한에 읽기와 쓰기를 주면 해결됩니다. 아래처럼 수정해 줍니다. 만약 PDF 관련 설정이 없다면 만들어 주면 됩니다.

<policy domain="coder" rights="read|write" pattern="PDF" />

중요. 웹서버에 적용하려면

고친 뒤 아파치 혹은 php-fpm을 재시작해 줘야 적용된다.

👇 카테고리 글 목록

대표글

댓글 남기기