Arquivos SSHFS de um servidor para outro

6

Estou tentando encontrar a maneira mais segura de transferir arquivos de um servidor para outro.

Eu tenho a seguinte arquitetura:

Atualmente estou usando o usuário principal salamis para montar os diretórios.

Os arquivos no diretório original são criados através de um gerenciador de arquivos PHP elfinder .

Infelizmente, não consigo move , rename ou delete nenhum arquivo do diretório montado por meio do PHP. Eu recebo permissão negada.

1) É porque montei o sistema de arquivos usando salamis em vez de www-data ?

2) É seguro montar o sistema de arquivos em Server 2 as www-data ? Se sim, como posso conseguir isso? www-data não tem uma senha e não consigo fazer login usando su -m www-data . Eu recebo authentication failure .

3) Você consegue pensar em uma arquitetura melhor?

    
por glarkou 08.02.2012 / 20:49

2 respostas

2

O SSHFS é um sistema de arquivos FUSE . Eles são gerenciados por um processo de aterrissagem do usuário que é executado como o usuário que monta o sistema de arquivos: esse processo sshfs que você executa é o dobro do driver do sistema de arquivos. Por padrão, a maioria dos sistemas de arquivos FUSE só permite que o usuário de montagem acesse arquivos dentro dele.

Para poder acessar arquivos através do sshfs, você precisa de três coisas:

  1. O usuário autenticado por ssh no servidor1 deve poder acessar os arquivos.
  2. O usuário que tentar acessar o sistema de arquivos sshfs no servidor2 deve ter as permissões de acesso necessárias.
  3. O usuário que tentar acessar o sistema de arquivos sshfs no servidor2 deve ter permissão para acessar esse sistema de arquivos.

Como escrevi acima, apenas o usuário de montagem tem essa última permissão. Você pode relaxar isso adicionando -o allow_user à linha de comando sshfs , mas isso não resolverá os outros dois problemas. Observe que -o allow_user só entrará em vigor se /etc/fuse.conf contiver user_allow_user ou se você estiver executando sshfs como raiz.

Em server2 , você precisa executar sshfs como o usuário www-data (a quem você terá que dar acesso à chave privada SSH) ou ativar allow_user e organizar o local www-data para ter acesso aos arquivos necessários. Existem várias maneiras de fazer isso: através da opção uid , ou passando -o default_permissions , ou passando -o umask 770,gid=www-data . Se você ativar allow_user , certifique-se de não permitir que www-data acesse mais arquivos do que deveria, e que você não acabe permitindo que outros usuários vejam ou modifiquem o que não deveriam. Executar sshfs como www-data tem a vantagem da simplicidade, você tem uma chance muito maior de não ser acidentalmente muito permissivo.

Para o problema 1, você precisa ssh na conta www-data em server1 ou para permitir que a conta usada acesse esses arquivos. Há algum benefício em não permitir logins remotos para contas do sistema, como www-data , porque isso faz com que a auditoria seja ruim (você não pode saber quem realmente usou a conta). No entanto, não está fora de questão e é um pouco mais fácil de configurar. Se você não quiser permitir logins remotos na conta www-data , adicione salamis ¹ ao grupo www-data , certifique-se de que o sistema de arquivos em server1 esteja montado com a opção acl (adicione-o a a entrada relevante em /etc/fstab , se necessário) e adicione uma ACL aos arquivos www-data :

setfacl -d -m group:www-data:rwx -R /path/to/www-root
setfacl -m group:www-data:rwx -R /path/to/www-root

¹ Se essa é sua conta em server1 , não entendi sua pergunta se salamis era um usuário em server1 , em server2 ou ambos.

    
por Gilles 08.02.2012 / 23:58
0

1) Sim, assim como Gilles respondeu, o ID de login que você usa é o proprietário padrão dos arquivos criados. Isto é verdade para a maioria dos protocolls.

2) É correto que não haja senha para o usuário www-data. Você pode, no entanto, dar a www-data uma senha temporária e copiar o certificado do salamis para www-data com o comando ssh-copy. Quando isso é feito, o salame pode logar e montar como www-data sem entrada de qualquer senha. (Você precisa ter um certificado criado com o ssh-keygen.)

3) Outra solução possível é rsync os arquivos entre os dois servidores. O rsync usa a mesma infra-estrutura segura que o ssh / sftp / sshfs, você pode usar o ssh-copy exatamente como você fez em 2. Com o rsync, você pode permitir que o www-data obtenha os arquivos do salame. Usando ssh-copy dá-lhe a oportunidade de fazer o script da sincronização, um one-liner em /etc/cron.[dayly|hourly] é suficiente na maioria dos casos. Rsync são robustos, se houver algum problema com o servidor-salamis seu aplicativo ainda pode ser funcional com os últimos arquivos que você sincronizou, seu aplicativo não é retardado pela rede, mas você tem um atraso entre uma mudança em um arquivo em salames -diretório e no servidor. Você também pode considerar o uso de um VCS, por exemplo, bzr, e buscar seus arquivos de um repositório. Isso dá a você um bom controle de revisão de seus códigos-fonte.

    
por Anders Wallenquist 24.04.2012 / 14:51