Arquivos somente leitura, evita a exclusão

1

Aqui está minha situação. Estou executando um site WordPress que usa o cache total do w3. Uma grande parte deste website é dinâmica e estática. Então, estou colocando essas páginas em cache como HTML estático em uma pasta, vamos chamá-lo de /home/test.com/wp-content/cache/page_enhanced/static/ . Assim, cada arquivo dessa pasta é uma representação em HTML do que alguém obteria se visitasse test.com/static ou test.com/static/foo ou test.com/static/foo/bar . Todos os arquivos nesta pasta não precisarão ser atualizados por mais ou menos 6 meses, mas haverá 40 KB + de arquivos nos diretórios.

Eu executei um script python (Optimus Cache Prime) para visitar todas as páginas em um sitemap.xml para gerar todos os arquivos que iriam nessa pasta. O Apache então recebe um pedido de test.com/static/foo , pula todo o processamento PHP e SQL e exibe um arquivo HTML (assim, uma solicitação para http://test.com/static/foo exibe o arquivo localizado em /home/test.com/wp-content/cache/page_enhanced/static/_index.html ).

Eu quero que esses arquivos existam no formulário atual até que eu entre na pasta como sudo e apague esses arquivos manualmente.

Nem todos os arquivos em /home/test.com/wp-content/cache/page_enhanced/ devem existir nesse formulário atual, apenas o diretório /static/ e seus subdiretórios.

Então, fui para /home/test.com/wp-content/cache/page_enhanced/static/ e executei find ./ -type f -exec chmod 444 {} \; . Para minha surpresa, a maioria dos arquivos foram deletados hoje (deve ter sido pelo script PHP, eu sou o único com acesso ssh).

Como posso evitar que isso aconteça? Servidor web Ubuntu dedicado. Parece fácil, mas eu sou um desenvolvedor web, eu só sei o suficiente para ser perigoso.

Editar: não desejo definir permissões na pasta, porque haverá algumas coisas que precisam ser armazenadas em cache e, em seguida, exibidas. Portanto, http://test.com/search/weird+search+term+foo+bar deve ser armazenado em cache dinamicamente como _index.html , uma vez que alguém pesquisar isso, então, da próxima vez que alguém o pesquisar, ele não precisará passar pelo processamento de PHP e SQL.

Então, problema secundário, eu preciso dizer que qualquer arquivo dentro do meu diretório deve ganhar automaticamente essas permissões, mas isso é uma preocupação menor agora.

    
por LOLapalooza 14.04.2014 / 15:49

2 respostas

1

Se o apache estiver sendo executado como a conta de 'usuário' que possui esses arquivos (talvez 'apache'), então, como o proprietário dos arquivos, ele poderá alterar as permissões, o que permitirá que ele seja excluído. Ou, se o apache estiver sendo executado como root, ele poderá fazer o que quiser.

Algumas opções que vêm à mente podem estar alterando a propriedade dos arquivos para uma conta que o apache não está executando, não executando o apache como root (se estiver) ou definindo alguns dos valores de permissão mais esotéricos que existem em certos sistemas de arquivos e sistemas operacionais. Alguns exemplos incluem a configuração de atributos do sistema de arquivos (man 'chattr' e check-out da opção -i "immutable"), listas de controle de acesso no nível do sistema de arquivos (man 'setfacl') ou sistemas de controle de acesso obrigatórios como o selinux.

    
por 14.04.2014 / 16:45
1

Basta criá-los em um local separado e usar uma montagem de ligação somente leitura para ele.

Por exemplo:

Você deseja que /home/test/x seja somente de leitura.

Crie tudo como /home/test/x.writable/* .

mount -o bind -o ro /home/test/x.writable /home/test/x

Outra solução seria ativar as ACLs em sua partição e usá-las para bloquear a gravação nesses arquivos.

    
por 14.04.2014 / 16:46