no centos 7, criei um site wordpress com propriedade de diretório raiznome do site: grupo de sitese permissões de diretório755, permissões de arquivo644definido por padrão
quando o desenvolvedor faz login no painel do wordpress e tenta fazer upload de algo para a mídia ou instalar plug-ins, o wp diz que não há permissão de gravação,
então eu tive que dar permissões g + w para o diretório raiz do wp, então ele pôde instalar o plugin ou fazer upload de mídia.
depois de enviar a mídia, a permissão do plugin/mídia enviada muda paraapache:apachedenome do site: grupo de sites
como evitar?
- Eu dando permissões g + x ao diretório raiz wp para permitir que o desenvolvedor instale plug-ins/upload de mídia
- e a propriedade de qualquer upload do wp dashboar não deve ser alterada para apache:apache
o que eu tentei
Atualmente não encontrei nenhuma alternativa para impedir isso, sempre que tive que dar permissões g + w e revertê-las após o trabalho do desenvolvedor
Responder1
O servidor web (ou o processo PHP, dependendo da sua configuração) precisa de acesso de gravação ao diretório. A única maneira viável é executar esse processo como usuário websitename
.
Principalmente outra opção seria conceder ao usuário apache
permissões de gravação via ACL ou adicioná-lo ao websitegroup
grupo, mas isso também resultaria na propriedade dos arquivos enviados por apache
. Se você deseja que todos os arquivos e pastas sejam de propriedade de websitename
você, você precisa executar o servidor da web como esse usuário.
Responder2
Sua descrição de como isso é provisionado não é útil. Vamos começar do zero.
Usuários:
- apache - o uid que seu tempo de execução do PHP executa como
- dev1, dev2, dev2 - desenvolvedores
- backup - para criar backups do site
- support[n] - para investigar problemas
Devido à forma como o Wordpress foi projetado, é muito difícil operar, a menos que o "apache" tenha acesso total de leitura/gravação ao site.
Se todo o gerenciamento for feito através da interface web, os desenvolvedores precisamqualqueracesso aos arquivos na raiz do documento. No entanto, tenho visto sites onde os desenvolvedores usam rotineiramente o acesso CLI para arquivos atualizados. Então, vamos supor que eles precisem de acesso de leitura/gravação.
Os uids de backup precisam de acesso somente leitura aos arquivos.
O suporte precisa de acesso somente leitura aos arquivos.
Isso só deixa o usuário do site. Esta é a sua construção. Na ausência de informações adicionais sobre como você está usando isso, parece totalmente redundante.
Portanto, as únicas classes de acesso são leitura+gravação e somente leitura. Mas só por diversão, diremos que existe uma classe adicional sem acesso - e chamaremos esse usuário de "alienígena".
A propriedade do usuário é sempre determinada pelo uid que cria um arquivo - e tem valor único por usuário. Portanto, não podemos usar isso como mecanismo para permitir acesso.
No entanto, os usuários podem pertencer a vários grupos e cada grupo pode ter vários usuários. Assim podemos associar o privilégio de leitura e gravação a um grupo específico. Chame isso de atualização da web.
Isso deixa o acesso somente leitura (backup e suporte) - que pode ser fornecido por meio dos "outros" bits de permissão.
Mas como então excluir “alienígena”? Ao colocar o site em um diretório ao qual o estrangeiro não tem acesso - isso significa que precisamos de outro grupo que identifique as pessoas que têmalgunsacesso. Chame isso de acesso web.
Portanto, a associação ao grupo:
- atualização da web: apache, dev1, dev2...devn
- acesso web: apache, dev1, dev2...devn, backup, suporte[n]
então temos os diretórios, permissões e propriedade:
drwxr-x--- root:webaccess /var/www/SITENAME
drwxrwxr-x ????:webupdate /var/www/SITENAME/html (document root)
Tudo muito bem, mas quando alguém em "webupdate" cria um novo arquivo ou diretório na raiz do documento, a propriedade do grupo será o grupo PADRÃO - não o webupdate. Você pode alterar esse comportamento com o bit setgid nos diretórios:
drwxrwSr-x ????:webupdate /var/www/SITENAME/html
A última parte do quebra-cabeça é garantir que o umask esteja definido como 00x para membros do webupdate para que novos arquivos e diretórios adquiram as permissões corretas). Não se esqueça de definir isso em seu sshd_config para o servidor sftp, bem como para shells interativos.
Portanto, depois de definir os grupos, você pode executar:
chown -R apache:webupdate /var/www/SITENAME/html
chmod -r g+s /var/www/SITENAME/html
E é isso - você nunca mais precisará corrigir as permissões.