2013-03-18 8 views
1

특정 이메일 주소에 대해 스크립트로 파이프하도록 Qmail을 설정했습니다. 그러나 스크립트의 일부가 작동하지 않는 파일을 만듭니다.PHP Qmail이 권한으로 인해 스크립트를 작동하지 않습니까?

쓰기를 시도하는 폴더의 그룹은 쓰기 권한 (775)을 가진 apache입니다. id popuser으로 확인한 아파치 그룹에 popuser을 추가했습니다. 이 정보는 아래 정보를 기반으로 불필요한 것일 수 있습니다.

get_current_uid() = [file/folder OWNER] (we'll call him Bob, he is a user not a group)

getmyuid() = Bob

: 나는 PHP 스크립트 내부 get_current_uid(), getmyuid(), getmygid(), exec("whoami")을 사용했습니다

(I 아파치 차/유효 그룹 둘을 시도하고, 차 한) getmygid() = Bob

exec("whoami") = [blank]

777에 쓰려는 디렉토리를 설정하면 모든 것이 잘 작동합니다. 즉, 사용 권한을 포함하는 것이 원인입니다. 이 경우 파일은 소유되며 그룹은 popuser입니다 (위의 uid/gid 비트의 결과는 아닙니다). 적어도 현재 사용자는 popuser이고 실제로는 Bob이 아님을 의미합니다.

결과적으로 chmod를 0644로 할 수 있지만 chown/chgrp (다른 그룹의 UI가 파일을 관리 할 수 ​​있도록 아파치가 필요합니다). 디렉토리 세계 쓰기를 필요가 없습니다 시도에서

, 나는 후 파일이 생성되기 전에에서 chmod('/path/to/dir', 0777);chmod('/path/to/dir', 0775); 붙어했지만, 실패로이 분명히 또한 popuser로 실행됩니다.

내가해야 할 일은, 간단히 말해서, Bob/apache (소유자/그룹)가 Bob로 실행하고 있다고 큐메일을 사용하여 쓰기 권한이 디렉토리에 파일을 생성하지만, 실제로 popuser로 실행됩니다.

바라건대 말이 되네.

+0

내 해결 방법은 현재 popuser가 그룹 인 Bob이 소유 한 별도의 디렉토리를 만드는 것입니다. 해당 디렉토리를 사용하여 파일을 만들고 file_get_contents를 사용하여 다른 httpd 프로세스를 호출 한 다음 파일을 읽은 다음 올바른 디렉토리에 쓰고 원본 스크립트에서 임시 파일을 삭제하십시오. 내 즐겨 찾기가 아닙니다. – Aeisor

답변

0

나는 당신이 말하는 것을 전적으로 잘 모릅니다. 그러나 들어오는 메일을 qmail로 파이프하여 모든 사용자의 디렉토리에서 실행중인 스크립트로 보내고 그 스크립트로 파일을 작성할 수 있습니다.

아직하지 않았다면/var/qmail/control/rcphosts에 줄을 추가하여 qmail이 도메인의 MX로 작동해야 함을 알리십시오. 에 domain.tld :

을 이름을의 .qmail-기본 파일을 만들 수 있도록이 도메인에 대한 메일을 라우팅에있는 사용자 계정 큐메일에게처럼/var/qmail/control/virtualdomains에에서

는 줄을 추가 메일을 라우팅 할 스크립트의 파이프가 들어있는 사용자 디렉토리에서 다음을 입력하십시오. |/path/to/script

큐메일 다시 시작.

스크립트의 모든 사용자에 대해 실행 권한을 부여해야합니다. 그런 다음 스크립트는 들어오는 전자 메일에 의해 트리거 될 때 새 파일을 만들 수 있어야합니다.