Configuração segura de permissões para o site do Drupal com vários mantenedores

2

Para vários sites do Drupal, um colega meu e eu (para fins de demonstração, alice e bob ) são responsáveis por manter essas instalações. Nós dois temos uma conta SSH para entrar no servidor (com o arquivo de ID, sem senha). No entanto, não somos administradores de servidores e não temos direitos ou permissões sudo.

No drupal.org há uma página detalhada sobre as permissões de arquivo e eu também leio esta pergunta no serverfault . Mas não consigo encontrar um sistema seguro para a nossa situação.

Configuração atual de usuários:

uid=16(alice)    gid=1001(webteam) groups=1001(webteam),32(www-data)
uid=17(bob)      gid=1001(webteam) groups=1001(webteam),32(www-data)
uid=32(www-data) gid=32(www-data)  groups=32(www-data)

Pelo que entendi, o usuário do Apache ( www-data ) não deve ter acesso de gravação aos arquivos que serão executados. Dependendo se Alice ou Bob instalaram o sistema, o proprietário do arquivo é diferente para os arquivos do sistema, mas o grupo está definido como webteam e as permissões são 664, então tanto o proprietário quanto o grupo podem gravar, o Apache só pode ler o arquivo:

-rw-rw-r--+   1 alice  webteam    529 Oct 15 16:36 index.php 
-rw-rw-r--+   1 bob    webteam   3847 Sep 28 12:03 update.php 

No Drupal (como provavelmente em outros CMS também), há uma pasta especial (por padrão em ./sites/default/files ) onde o Drupal salva arquivos de cache e uploads de usuários. Portanto, esta pasta deve ter rw para o Apache. Atualmente, é assim ( files é para arquivos públicos, permitido hotlinking; secure é para o sistema de arquivos privado no Drupal):

drwxrwsr-x+ 12 alice www-data  4096 Oct 29 11:43 files
drwxrwsr-x+  3 alice www-data 20480 Oct 24 15:27 secure

Neste caso, Alice criou o site e, portanto, é o proprietário dos diretórios. www-data tem permissão para fazer tudo lá, assim como é necessário (como mencionado anteriormente). Bob tem acesso a esses diretórios, assim como é membro de www-data .

Pergunta 1: Existe uma maneira melhor de distribuir permissões? Você vê alguma falha (de segurança) nessa configuração?

Ao usar a ferramenta drush para atualizar os módulos e / ou o núcleo do Drupal, outro problema surge. drush usa o usuário que executa drush e também define a permissão como recomendado pelo Drupal. Os primeiros arquivos (index / update.php) ficam assim depois que drush foi executado por Alice:

-rw-r--r--+   1 alice  webteam    529 Oct 15 16:36 index.php 
-rw-r--r--+   1 alice  webteam   3847 Sep 28 12:03 update.php

O problema é claro, Bob não pode mais escrever ou excluir esses arquivos. Além disso, ele não pode executar drush nessa instalação (ele falhará com problemas de permissões).

Pergunta 2: Qual é a melhor maneira de evitar isso ou endireitá-lo depois que drush foi executado?

A primeira opção que pensamos seria ter um único usuário (por exemplo, webteam ) que Alice e Bob usam para fazer login no servidor. Mas, pessoalmente, prefiro ter meu próprio diretório inicial e meu próprio arquivo .bash_rc com prompt personalizado e aliases. Segundo, como drush já foi executado por meio de um script de shell, poderíamos (re) definir as permissões de arquivo depois que drush fosse executado. Talvez haja um jeito ainda melhor?

    
por Paul 30.10.2014 / 14:26

1 resposta

1

O que fazemos é verificar o código em um diretório fora do DocumentRoot do servidor. Então nós instalamos e atualizamos os scripts que chmod os arquivos / diretórios e os rsync para o DocumentRoot do servidor web. Nós também - excluímos certos arquivos / diretórios que não queremos em nossos servidores de produção (por exemplo, xmlrpc.php, sites / all / modules / simpletest) enquanto fazemos o rsync.

Essencialmente, todos os arquivos são 440 e todos os diretórios são 550, com exceção dos diretórios ../sites/$SITE/files, que são 770, todos apache: apache para owner: group.

Nós concedemos o sudo aos nossos administradores e quando usamos o drush, executamos da seguinte forma:

sudo -u apache drush ...

Espero que isso ajude.

P.S.

Você pode querer enviar mensagens para drupal.stackexchange.com, se ainda não o fez.

    
por 30.10.2014 / 15:26