permitindo que o php / apache exclua arquivos em um diretório ftp e em subpastas

1
Basicamente, eu estou tendo um problema com um script php sendo capaz de mover ou excluir arquivos, e eu sei que tem a ver com permissões desde que é o que o erro php de unlink() está me dizendo, mas eu não sou Certifique-se de como consertar isso. Então eu espero que, se eu explicar a situação, alguém possa me apontar na direção certa, pois eu sou um noob quando se trata de coisas CLI do linux ...

Ok, então eu tenho um local de dropbox no ftp, digamos que ele esteja localizado em

/var/ftp/client/dropbox/

E criei uma conta de ftp com pure-ftpd . Assim, quando um arquivo é carregado para esse diretório, seu proprietário é ftp-user e seu grupo é ftp-group , que é o que pure-ftpd executa como. O usuário / grupo deste diretório é definido como ftp-user e ftp-group , respectivamente.

Portanto, um script de terceiros é responsável pelo envio de relatórios (arquivos) para esse local da caixa de depósito. A conta ftp deve ter a capacidade de criar subdiretórios dentro desse diretório, para categorizar os arquivos.

Assim, por exemplo, a estrutura do arquivo pode ser assim:

/var/ftp/client/dropbox/invoices/
/var/ftp/client/dropbox/invoices/bal_2013-06-01_2013-06-30.pdf
/var/ftp/client/dropbox/reports/
/var/ftp/client/dropbox/reports/visits/
/var/ftp/client/dropbox/reports/visits/bal_2013-06-01_2013-06-30.xlsx

O diretório "home" /var/ftp/client/dropbox/ chmod é drwxrwxr-x

Quando um subdir (por exemplo, invoices/ ) é criado por ftp-user , ele está recebendo chmod de drwxr-xr-x

Quando um arquivo é carregado (por exemplo, invoices/bal_2013-06-01_2013-06-30.pdf ) por ftp-user , ele está recebendo chmod de -rw-r--r--

Enquanto isso ...

Eu tenho um script php localizado em dizer

/var/www/client/

O script deve abrir os arquivos e fazer coisas como atualizar o banco de dados com nomes de categoria (os nomes dos subdiretórios) e nomes de arquivos, etc. e até agora tudo bem. No entanto ....

Então, aqui está o problema ...

Em seguida, o script deve mover ou excluir os arquivos (mas não os subdiretórios), dependendo dos motivos. Mas usar File::delete() (Laravel 4) ou apenas unlink() direto no /path/to/file está retornando um erro "permissões negadas".

Então, parece que usando top quando meu script é executado, ele (apache) está sendo executado em www-user e www-group . Faz sentido que ele estaria sendo executado como um usuário / grupo diferente. Mas o que posso fazer para dar permissões ao apache / php para mover / apagar os arquivos?

Eu tentei colocar www-user no grupo ftp-group , mas ainda está me dando o erro "permissões negadas". De pesquisa, eu suspeito talvez tenha a ver com um sticky-bit ou algo assim, mas eu não tenho certeza, e, francamente, todo esse material de permissão dir / arquivo é um pouco sobre minha cabeça o momento ..

Soo ... algum conselho sobre o que fazer aqui?

editar

Um pensamento que eu tinha era, em vez de ter este script excluir / mover os arquivos, eu poderia inserir os arquivos / path / to / em um banco de dados, juntamente com a ação que precisa ser feita. E, em seguida, ter um script separado que executa a ação e, em seguida, colocar esse script em um cronjob como root (ou como ftp-user .. posso fazer isso? Eu não tenho certeza ..). Acho que isso deve funcionar, mas não tenho certeza se é uma boa ideia fazer isso, e parece que a melhor solução seria classificar as permissões.

    
por slinkhi 21.02.2014 / 17:01

1 resposta

1

Você está no caminho certo, adicionando o www-usuário ao grupo-ftp. Infelizmente, os arquivos que você está criando não têm o conjunto de permissões de gravação do grupo. Portanto, somente o proprietário (ftp-user) é capaz de escrevê-los / apagá-los. Você precisa ter esses arquivos criados com permissões de gravação para o grupo (ftp-group) também. (Isso seria rw-rw-r-- em vez de rw-r--r-- )

As permissões padrão para novos arquivos são controladas por meio de algo chamado umask . O Pure-FTP suporta uma diretiva umask dentro de seu arquivo de configuração. Essencialmente, você desejará inserir umask 113:003 no arquivo de configuração ou -U 113:003 na linha de comando para obter as permissões corretas.

    
por 21.02.2014 / 17:33