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%]