Permissão SFTP negada, mas o SSH funciona bem

1

Eu continuo recebendo erros de Permissão negada ao tentar fazer upload de alterações em um arquivo via SFTP, mas ele funciona bem ao usar o SSH diretamente como o mesmo usuário.

O arquivo que estou tentando enviar é /srv/www/website/current/app/AppKernel.php (no entanto, o erro atualmente se aplica a qualquer arquivo no meu projeto, nós vamos ficar com o arquivo único para manter as coisas simples).

Meu primeiro porto de escala foi para o SSH no servidor COMO O MESMO USUÁRIO e confirmo se as permissões estão funcionando.

Após o SSHing, eu verifico quem sou

$ whoami
cp5w

Um ls -l revela as seguintes permissões (recortadas na linha relevante)

$ ls -l
-rwxrwxr-x 1 deploy nginx   1523 Nov 11 12:51 AppKernel.php

Você pode ver aqui que o proprietário do arquivo é deploy e o grupo é nginx . Posso confirmar que o usuário cp5w está no grupo nginx :

$ groups
opsworks nginx

Então, em teoria, eu deveria ser capaz de escrever para AppKernel.php yes? Vamos tentar isso:

$ tail -n 3 AppKernel.php
        $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
    }
}

$ echo "# add line to end of file" >> AppKernel.php
$ tail -n 3 AppKernel.php
    }
}
# add line to end of file

Sim, isso funciona bem. Sem erros. Eu não estou ficando bravo.

Algumas possíveis soluções sugerem a verificação de que o grupo é executável em o diretório pai que eu verifiquei da seguinte forma (novamente recortado para a linha relevante):

$ ls -l ..
drwxrwxr-x  6 deploy nginx  4096 Nov 11 15:31 app

Também verifiquei problemas de com diretórios de propriedade do sistema no entanto, eu já estou trabalhando em um diretório filho website que também compartilha o mesmo padrão de permissão que o resto do projeto:

  • de propriedade de deploy
  • o grupo é nginx
  • O grupo
  • pode ler, escrever e percorrer diretórios

Agora vou tentar carregar (aka modificar) o arquivo usando o SFTP da minha estação de trabalho. Mesmo usuário. Mesma chave SSH. Mesma estação de trabalho. Mesmo servidor. Segmentando o mesmo arquivo. Apenas SFTP agora, não SSH.

psftp> open myserver
login as: cp5w
psftp> cd /srv/www/website/current/app
Remote directory is now /srv/www/website/releases/20151111145342/app
psftp> lcd C:\Users\chris\Source\website\app
New local directory is C:\Users\chris\Source\website\app
psftp> put AppKernel.php
/srv/www/website/releases/20151111145342/app/AppKernel.php: open for write: permission denied

O que dá? !!

Mais alguma comida para pensar:

  • Isso costumava funcionar via SFTP há alguns dias e eu não fiz nenhuma alteração na configuração do servidor recentemente que eu possa lembrar
  • O problema está acontecendo porque estou tentando escrever por meio de um link simbólico?
  • A única coisa que eu mudei recentemente é a minha estação de trabalho, que agora é o Windows e não o Linux. Essa é minha punição? Piada barata. Sério, o SO da estação de trabalho afetaria isso?

TODO:

  • Teste de um sistema operacional de estação de trabalho diferente

EDITAR

Eu verifiquei os logs do SSH para ver se algo significativo poderia ser adicionado, e esta é a saída causada pela tentativa de upload (obscureceu alguns dados com% de espaços reservados):

$ tail -f /var/log/secure
Nov 11 17:46:58 %server% sshd[22455]: Accepted publickey for cp5w from %ip% port %port% ssh2: RSA %fingerprint%
Nov 11 17:46:58 %server% sshd[22455]: pam_unix(sshd:session): session opened for user cp5w by (uid=0)
Nov 11 17:46:58 %server% sshd[22455]: pam_unix(sshd:session): session closed for user cp5w

Também ativei os registros SFTP modificando meu sshd_config e adicionando -l INFO da seguinte forma:

Subsystem sftp  internal-sftp -l INFO

Seguiu /var/log/messages com o seguinte:

$ tail -f /var/log/messages
Nov 11 18:06:57 %server% internal-sftp[23002]: session opened for local user cp5w from [%ip%]
Nov 11 18:06:57 %server% internal-sftp[23002]: opendir "/srv/www/."
Nov 11 18:06:57 %server% internal-sftp[23002]: closedir "/srv/www/."
Nov 11 18:06:57 %server% internal-sftp[23002]: open "/srv/www/website/current/app/AppKernel.php" flags WRITE,CREATE,TRUNCATE mode 0666
Nov 11 18:06:57 %server% internal-sftp[23002]: sent status Permission denied
Nov 11 18:06:57 %server% internal-sftp[23002]: session closed for local user cp5w from [%ip%]
    
por teaforchris 11.11.2015 / 18:38

2 respostas

1

Gostaria de saber se você está executando o selinux e isso pode ter algo a ver com o seu problema. O que getenforce ou sestatus mostra se alguma coisa? Se você está executando o cumprimento, o que acontece se você mudar para permissivo?

Se não, você pode testar e provar qual conta de usuário o sftp está usando para gravar arquivos em seu nome? Em princípio, deveria ser cp5w, mas é esse o caso na realidade?

Finalmente, você pode descobrir que chroot não está jogando bola. Funciona sem chroot?

Boa sorte, sr. Willmott.

    
por 12.11.2015 / 22:25
1

O problema principal é que seu servidor SFTP requer autenticação de chave SSH para permitir conexões corretamente. Você mencionou com o FileZilla, então escrevi essa resposta como tal.

No caso, você pode usar isso para chaves SSH não protegidas por senha:

  1. Abra o cliente FileZilla.
  2. Na parte superior da tela inicial, clique em Editar e selecione Configurações.
  3. No lado esquerdo do menu, expanda a seção Conexão e destaque SFTP.
  4. Clique no botão [Adicionar arquivo de chave ...] e navegue pela máquina local. diretórios e selecione seu arquivo de chave privada.
  5. Então, novamente a partir da tela inicial do FileZilla, clique em Arquivo e selecione Gerenciador de sites.
  6. Finalmente, no lado esquerdo do Gerenciador do Site, clique no Novo Site botão e digite um nome exclusivo em Meus Sites que permitirá que você identifique facilmente este servidor remoto específico no futuro.
  7. Agora, na guia Geral, preencha o Host (com um IP endereço ou FQDN) e os campos Porta (o padrão é 22).
  8. No menu suspenso Protocolo, selecione SFTP - Transferência de arquivos SSH Protocolo.
por 24.05.2018 / 11:52