Como configurar um servidor SFTP restrito no Ubuntu?

81

Gostaria de saber como configurar contas de usuário raiz, sudo e somente sftp que não serão necessárias autenticação de chave pública no logon. Também gostaria de saber como configurar diretórios pessoais de usuários somente sftp onde eles não pode acessar outros diretórios de nível superior.

Yuya Kobayashi
fonte

Respostas:

91

O melhor recurso para ajudá-lo a começar a configurar um serviço ssh em uma máquina Host usando o Ubuntu é o OpenSSH Server . Isso permitirá que você use o SSH File Transfer Protocol (também SFTP) para acessar, transferir e gerenciar arquivos sobre SSH a partir de uma máquina cliente.

Visão geral da solução

  • No Ubuntu, você pode configurar uma OpenSSH servermáquina Host e, em seguida, o usuário pode usar sshpara se conectar do Cliente ao servidor Host usando apenas um nome de usuário e senha. Observe, no entanto, que a autenticação de chave pública é recomendada,

"Verifique se você possui uma senha forte antes de instalar um servidor SSH (convém desativar as senhas por completo )"

  • As contas de usuário administrativo criadas no host terão privilégios de sudo, as contas de usuário padrão criadas no host não.

Instale e configure seu servidor OpenSSH no host

Para instalar um servidor OpenSSH no host:

sudo apt-get install openssh-server

Dê ao seu host um endereço IP estático para que você possa se conectar com segurança a ele:

nm-connection-editor

Para configurar seu servidor OpenSSH , "primeiro, faça um backup do seu arquivo sshd_config, copiando-o para o diretório pessoal ou fazendo uma cópia somente leitura em / etc / ssh, executando:"

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

"Depois de fazer backup do seu sshd_configarquivo, você pode fazer alterações em qualquer editor de texto, por exemplo:"

sudo -H gedit /etc/ssh/sshd_config

Você deve reiniciar o serviço ssh no Host para que essas alterações entrem em vigor

sudo service ssh restart

Considere as seguintes medidas de segurança

  • Não habilite o encaminhamento de porta no seu roteador: quando alguém solicita que o roteador conecte o usuário externo à porta 22, etc., seu roteador não está em conformidade, a menos que você tenha ativado o encaminhamento de porta
  • Desativar login root: comentar fora PermitRootLogin without-password; adicionar PermitRootLogin noao host/etc/ssh/sshd_config
  • Escolha a porta SSH não padrão: comente Port 22; adicionar Port <new-port-number>ao host/etc/ssh/sshd_config
  • Permitir apenas conexões locais: adicionar ListenAddress 192.168.0.10
  • Permitir que certos usuários em determinadas portas: Adicione AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>ou AllowUsers <username>@111.222.333.*ao host/etc/ssh/sshd_config
  • Permitir apenas conexões de chave RSA (sem senha): Anexe o conteúdo de ~/.ssh/id_rsa.pubcada Cliente como uma nova linha de Host ~/.ssh/authorized_keys. Em seguida, adicione PasswordAuthentication noao host/etc/ssh/sshd_config
  • Lentas tentativas de invasão de invasores: use o ufw (firewall não complicado) no Host para classificar o limite de conexões de entrada para 10 / minuto: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Para obter mais idéias, consulte Mantendo o acesso SSH seguro

Se você achar que precisa, ative PasswordAuthenticationno seu sshd_configarquivo

Encontre a linha com a frase PasswordAuthenticatione leia:

PasswordAuthentication yes

Salve seu novo sshd_configarquivo e reinicie o sshserviço do Host :

sudo service ssh restart

Se você precisar acessar de qualquer lugar pela Internet, configure o Encaminhamento de porta no roteador local para direcionar o tráfego para o servidor OpenSSH

Observe que o sshserviço do host da porta escuta no sshd_configarquivo e configure seu roteador para encaminhar o tráfego TCP / UDP direcionado a essa porta para o endereço IP do servidor OpenSSH.

Conecte-se ao Host e faça o login via linha de comando ou terminal

  • Para abrir um terminal shell SFTP como <username>no Host, abra um Terminal no Cliente e digite o seguinte comando, substituindo 123.123.1.23pelo endereço IP do Host:

    sftp <username>@123.123.1.23
    
    • Se você alterou o número da porta que o servidor OpenSSH do Host escuta, faça:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Para abrir um terminal shell SSH como <username>no Host, abra um Terminal no Cliente e digite o seguinte comando, substituindo 123.123.1.23pelo endereço IP do Host:

    ssh <username>@123.123.1.23
    
    • Se você alterou o número da porta que o servidor OpenSSH do Host escuta, faça:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

Conecte-se ao Host e efetue login através do gerenciador de arquivos da GUI (por exemplo, Nautilus) para obter mais acesso SFTP visual para permitir transferências de arquivos

  1. Abra o Nautilus no cliente
  2. Selecione Arquivo> Conectar ao Servidor
  3. Tipo: SSH
  4. Servidor: Digite o endereço IP do host
  5. Porta: número da porta especificado no sshd_configarquivo do host
  6. Nome de usuário: nome de usuário
  7. Senha: senha

insira a descrição da imagem aqui

Em 14.04:

  1. Abra o Nautilus no cliente
  2. Conecte-se ao servidor
  3. Digite: `ssh @ 123.123.1.23:

Crie contas de usuário padrão no host com permissões limitadas de arquivo fora de sua pasta pessoal

Permissões de arquivo adequadas no Host garantem que cada usuário padrão (sem privilégios sudo) criado no Host possua seu /home/new_userdiretório, mas tenha permissões limitadas com o restante da estrutura de diretórios.

  • Permissões limitadas não necessariamente significam que eles não podem exibir nomes de arquivos e estrutura de diretórios.

Espero que seja útil!

jtd
fonte
9
Parece-me que a resposta, embora pareça muito abrangente, na verdade não responde à parte mais difícil da pergunta dos OPs: "onde eles não podem acessar outros diretórios de nível superior". Se implementado como acima, o usuário poderá ler a grande maioria da estrutura de diretórios.
Ostergaard 14/05
2
Para expandir o comentário de @ ajostergaard, isso cria um usuário unix comum e permite acesso SSH e SFTP. Um usuário unix comum (não root) ainda pode acessar e visualizar um número muito grande de arquivos confidenciais, como configuração do servidor da web e muito mais. Isto é definitivamente não é segura e definitivamente não satisfaz a limitação solicitada pelo OP.
perfil completo de Simon Woodside
50

Etapa 1: Instale o pacote OpenSSH, se não estiver instalado

sudo apt-get install openssh-server

Etapa 2: Crie um grupo separado para usuários do SFTP.

sudo addgroup ftpaccess

Etapa 3: edite o /etc/ssh/sshd_configarquivo e faça as alterações abaixo. Encontre e comente abaixo da linha.

#Subsystem sftp /usr/lib/openssh/sftp-server

e adicione essas linhas ao final do arquivo.

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Etapa 4: reinicie o serviço sshd.

sudo service ssh restart

Etapa 5: adicione usuário com o grupo ftpaccess e crie uma senha.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

Etapa 6: Modifique a permissão do diretório inicial.

sudo chown root:root /home/paul

Etapa 7: Crie um diretório dentro da home para fazer upload e modificar a permissão com o grupo.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

É isso aí .

Consulte: Configurar SFTP no ubuntu

ytgmuabm
fonte
Esta parece ser a resposta correta. Não testei, mas pelo menos mencionava a principal dificuldade, restringindo o caminho de navegação.
Mohammed Noureldin 19/08/19
Eu testei e era permissivo demais, devido às permissões padrão na pasta inicial serem 755. Eu fiz sudo chmod 711na pasta inicial e isso permitiu que eu fizesse ftp somente na pasta www. Parece bom até agora, mas talvez outros podem gritei ...
moodboom
0

Denyhosts é outra ferramenta além das mencionadas por "jtd" que você pode querer examinar. Ele pode bloquear automaticamente tentativas repetidas de conexão com o servidor SSH. Está disponível para instalação nos repositórios do Ubuntu.

firefly2442
fonte
O denyhosts do Paket só está disponível para lúcido (10.04LTS) e preciso (12.04LTS). packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB
O Denyhosts não está mais disponível nos repositórios do Ubuntu, embora ainda possa ser instalado por um método diferente, mas não foi atualizado há muito tempo. Portanto, não é aconselhável usar Denyhosts.
Faizan Akram Dar
0

Limitar o acesso ao usuário

Aqui, permitiremos apenas ao usuário realizar a transferência de arquivos e desativaremos o acesso ao terminal.

Para isso, adicione os seguintes códigos na parte inferior do arquivo de configuração.

$ sudo nano /etc/ssh/sshd_config

Agora o arquivo abrirá e colará o código.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Substitua filemgpelo seu nome de usuário. Em seguida, salve e feche o arquivo.

É isso aí.

Referência: Como usar o SFTP no Ubuntu 16.04

Aimal
fonte