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?