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.