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!

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.


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 .


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


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.


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.


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.