Permitir SFTP, mas não permitir SSH?

94

Estou começando uma pequena empresa de hospedagem para alguns amigos e pequenos clientes, nada grande.

Eu quero dar aos meus "clientes" o direito de gerenciar seus arquivos no servidor. Eu odeio FTP, pois não é seguro e, na minha opinião, é obsoleto.

Então, eu gostaria de permitir que meus usuários se conectassem através do SFTP, mas não de SSH. (Eu sei, eu sei, o SFTP está usando SSH). Mas eu só estava pensando, é possível?

Portanto, eu não precisaria instalar um serviço FTP no servidor e tudo seria incrível!

Tommy B.
fonte

Respostas:

121

A partir da versão 4.9 OpenSSH (não disponível no centos 5.x, mas o recurso ChrootDirectory foi suportado por porta traseira) possui um internal-sftpsubsistema:

Subsystem sftp internal-sftp

E depois bloqueie outros usos:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Adicione seus usuários ao sftponlygrupo. Você deve alterar o diretório doméstico do usuário para /por causa do chroot e /home/userdeve pertencer a ele root. Eu também definiria /bin/falsecomo o shell do usuário.

Rob Wouters
fonte
Uau! Super incrível! Vou testar isso e voltar aqui para validar. Muito obrigado!
Tommy B.
+1 para a coisa ChrootDirectory!
Kyle Hodgson
1
Depois de fazer isso, meu usuário sftponly não pode acessar pelo ssh e pode se conectar pelo sftp. No entanto, ele não pode ver nenhum arquivo! Apesar disso, esses arquivos têm permissão para esse usuário. :-(
Emilio Nicolás
3
Caso você queira fazer isso e encontre uma entrada no seu sshd_config com "/ usr / lib / openssh / sftp-server" já existente, verifique aqui: serverfault.com/questions/660160/… - internal-sftp é "mais recente , melhor e mais fácil "
Xosofox 16/07/2015
19

Existe uma concha esponja que faz isso. Também pode chroot .

Pedra
fonte
Isso seria ótimo se você precisar de usuários SFTP e SSH. Você acabou de substituir o shell em / etc / passwd por aqueles restritos apenas ao SFTP.
Dragos 23/02
4

Rssh do Google Checkout, que é um shell falso que permite sftp, mas nega ssh

Mais sobre o RSSH

http://www.pizzashack.org/rssh/

RPMs

http://pkgs.repoforge.org/rssh/

Você pode configurar o rssh para permitir / negar comportamentos diferentes, como sft, scp etc.

Chris
fonte
Agradável. Esta é a maneira mais fácil de configurar sem tocar em sshd_config. Basta alterar o shell no arquivo passwd e pronto.
Tomofumi 22/08/18
2

Você pode modificar o arquivo / etc / passwd e fornecer a esse usuário um shell falso, para que ele não possa usar o ssh.

jcisio
fonte
11
Você testou isso?
splattne
8
Quando eu tente definir o shell para /bin/falsenem ssh ou SFTP obras
Brad Mace
2
/ bin / false é proibir qualquer tipo de login, que não é a abordagem correta aqui. A resposta aceita por Rob Wouters 'é como você deve limitar os usuários apenas ao SFTP, não alterando o shell. Se você quisesse alterar o shell @ Stone's asnwer, seria uma boa ideia.
precisa saber é o seguinte
1
então QUE shell deve ser usado assumindo que / bin / bash não é aceitável e / bin / false ou / sbin / nologin negam acesso?
Putnik
1

Eu uso o método de especificar o shell do usuário como / bin / false, conforme mencionado. No entanto, você deve garantir que / bin / shell esteja em / etc / shells. Então funciona ssh = no ftp = ok.

Também uso o vsftpd e adiciono este
chroot_local_user = YES ao /etc/vsftpd/vsftpd.conf, para que os ftp-ers não possam ver outra data além da sua.

A vantagem dessas mudanças simples não é uma configuração irritante para a configuração do ssh para cada usuário.

denpick
fonte
1

Não se esqueça de encontrar a linha UsePAM yese comentar:

#UsePAM yes

Sem desabilitar isso, seu servidor SSH travaria ao recarregar / reiniciar. Como você não precisa de funções sofisticadas do PAM, isso é bom.

Hudson Santos
fonte
0

Configurar o ssh para ativar apenas o sftp para alguns usuários selecionados é uma boa ideia e funciona corretamente, desde que você instale scponlyou rssh.

rsshfunciona bem, a menos que você precise configurar a prisão, neste caso, tente seguir as instruções fornecidas pelos manuais do CHROOT é uma loucura, levando a "copiar" grandes partes dos executáveis ​​do sistema e da biblioteca logo abaixo de "cada prisão do usuário", incluindo o rsshpróprio shell. É um método de desperdiçar espaço.

scponly precisa de um entendimento profundo da configuração, levando a um problema sempre presente de rejeição de login em caso de instalação na prisão.

A maneira direta de permitir funcionalidades "ftp" com a prisão funcionando corretamente, o suporte a SSL / TLS para transações seguras e o logon é usar um VSFTPD "antigo mas funcional", que é instalado de forma rápida e limpa e oferece toda a configurabilidade necessária e, por último mas não menos importante: funciona!

Maurizio.

Maurizio
fonte
0

Infelizmente, todas as respostas são extremamente enganosas: faça o seguinte:

  1. Primeiro, crie sftp de usuário e grupo sftp

  2. Crie um diretório separado como raiz para os arquivos SFTP: sudo mkdir -p /home/sftpdir

  3. Tenha um arquivo sshd_config testado que permita SSH pela porta 22, mas também SFTP na porta aleatória por motivos de segurança
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Reinicie e verifique o status do serviço sshd

    reinicialização sshd do serviço sudo

    status de serviço sshd

  2. Crie um arquivo Shell. Adicionar execução para ecoar uma mensagem de notificação

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Esta conta está limitada apenas ao acesso SFTP."' | sudo tee -a / bin / sftponly

  3. Conceder permissões de execução e anexar ao arquivo shells

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. finalmente teste e você não deve conseguir se conectar.

  5. Um modelo para usar o cliente SFTP com uma chave SSH e verbosidade básica:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Andres Leon Rangel
fonte