PHP가 CentOS의 서버 루트 홈 폴더에서 파일을 안전하게 로드하도록 만드는 방법은 무엇입니까?

PHP가 CentOS의 서버 루트 홈 폴더에서 파일을 안전하게 로드하도록 만드는 방법은 무엇입니까?

그래서 저는 일부 CSV 텍스트 파일에서 데이터를 로드하고 고객을 위한 아름다운 Google 차트와 테이블을 생성하는 멋진 보고 페이지를 PHP로 만들었습니다. 그런 다음 텍스트 파일이 공유 Dropbox 폴더에 있으면 직원들이 코드를 해독하거나 데이터베이스를 다룰 필요 없이 텍스트 파일을 업데이트한 다음 온라인으로 해당 업데이트를 볼 수 있으면 좋겠다고 생각했습니다. 이 모든 것이 내 로컬 개발에서는 잘 작동하지만 프로덕션 서버에 코드를 업로드할 때 문제가 발생합니다. 내 생각에 이것은 Unix 권한 문제이고 PHP 오류입니다.

[Sun Apr 07 11:27:58 2013] [warn] [client 208.69.41.10] mod_fcgid: stderr: PHP Warning:  file(/root/Dropbox/Reports/client-report.csv): failed to open stream: Operation not permitted in /var/www/vhosts/mydomain.com/httpdocs/my-awesome-report-page.php on line 49, referer: http://www.mydomain.com/my-awesome-report-page.php

PHP가 CSV 파일을 가져올 수 있도록 하는 가장 좋은 방법은 무엇입니까 /root/Dropbox? 프로덕션에서는 CentOS 5.8을 실행하고 있습니다.

사이트의 httpdocs 폴더에 있는 파일은 mydomain:psacln에 속하는 것으로 보이지만 루트 ~에 있는 파일은 root:root입니다.

댓글에서 논의한 것처럼 안전한 해결책을 찾고 싶습니다. 보고서 페이지 HTML은 로그인 정보 뒤에 숨겨져 있습니다.

답변1

문서 루트에서 폴더로의 심볼릭 링크를 설정합니다.

ln -s /var/www/reports /root/Dropbox/Reports

파일을 읽을 수 있으면 Apache 및 PHP의 보안 설정을 변경하지 않고도 파일에 직접 액세스하는 데 도움이 됩니다.

답변2

귀하의 문제를 해결하기 위한 두 가지 아이디어가 있습니다.

  • crontab -e필요한 파일을 웹 서버가 읽을 수 있는 폴더에 복사하는 루트( )로 cronjob을 생성할 수 있습니다.
    1분마다 실행되도록 cronjob을 구성할 수 있으며, 이는 대부분의 상황에 충분합니다.
  • 보관용 계정에 대한 새 사용자를 만듭니다(꼭 필요하지 않은 경우 루트로 실행하는 것은 좋은 습관이 아닙니다). 또한 필요한 한 폴더에만 공유 액세스 권한이 있는 별도의 Dropbox 사용자를 만드는 것이 좋습니다. 그래야 실수로 원하는 것보다 더 많이 공유하는 일이 없습니다.

더 자세한 내용을 알고 싶으시면 언제든지 문의주세요 :)

관련 정보