
Eu segui meia dúzia de tutoriais diferentes sobre como configurar o chroot para usuários SFTP, mas meus usuários presos ainda podem navegar nos diretórios pai. Suspeito que minhas permissões não estejam configuradas corretamente, pois essa é a parte que mais varia entre os tutoriais. Aqui está o que fiz até agora:
1) Estou usando o CentOS 5.6, onde o OpenSSH padrão é a versão 4.3, então instalei manualmente a versão 5.x mais recente. Executar sshd -v agora retorna OpenSSH_5.9p1, OpenSSL 0.9.8e-fips-rhel5.
2) Editei /etc/ssh/sshd_config para alterar o Subsistema sftp para internal-sftp e adicionei:
Match user guest
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
3) SSD reiniciado.
4) Criado um usuário "guest" com diretório inicial /var/www/uploads/guest.
5) /var/www/uploads pertence a root:root com modo 755.
6) /var/www/uploads/guest pertence a guest:root com modo 755.
Usando o cliente Transmit sftp no meu Mac, fiz login com o usuário convidado. Ele abre o diretório inicial do usuário por padrão, mas posso navegar pelos níveis de diretório e navegar por outros diretórios no servidor.
Alguns tutoriais dizem que /var/www/uploads deve ter o modo 700 ou 750; se eu fizer isso, ainda poderei fazer login como usuário convidado, mas vejo o diretório raiz do servidor por padrão e posso navegar em todos os outros diretórios.
Outros tutoriais dizem que devo alterar o shell do usuário convidado para /bin/false; se eu fizer isso, não consigo fazer login como usuário convidado. A transmissão diz "O nome de usuário ou senha não foi aceito pelo servidor" e o cliente sftp da linha de comando diz "Conexão fechada" depois que eu digito a senha.
Acho que tentei de tudo - alguém pode ver o que está faltando?
Responder1
Parece que ChrootDirectory deve apontar para um nível ACIMA do diretório inicial.
Então, como a casa dos hóspedes é/var/www/uploads/guest, então oDiretório Chrootdeveria apontar para/var/www/uploads
Isso é TALVEZ... outro pensamento me ocorreu:
Você instalou manualmente o openssh mais recente, removeu a versão antiga? Onde a nova versão foi instalada? às vezes, se você não tomar cuidado, coisas novas serão instaladas em/usr/local/em vez de/usr, o que significa que o servidor habilitado para sftp está lendo seus arquivos de configuração de/usr/local/etc/ssh/...em vez do esperado/etc/ssh/...
Algo para verificar pelo menos.
Responder2
Eu lutei exatamente com o mesmo problema, mas resolvi-o configurando o diretório chrootbem como todos os diretórios paiscom as seguintes permissões
1) Mudando o proprietário para root:
sudo chown root [directory]
2) Removendo todas as permissões de gravação do grupo:
sudo chmod 755 [directory]
Infelizmente, acho que isso significa que você não pode pular diretamente para uma pasta que não pertence ao root, mas ficarei feliz em saber se alguém puder me corrigir sobre isso!