Como desabilitar o acesso do sftp ao usuário com o ssh já desabilitado (user shell = / bin / false, mas a conexão ainda funciona com o sftp)

2

Em sshd_config , por padrão, o login é permitido para todos os grupos e usuários. As diretivas de permissão / negação são processadas na seguinte ordem: DenyUsers, AllowUsers, DenyGroups e finalmente AllowGroups. (encontrado na página man).

Então, eu tenho que configurar o servidor em uma "forma de lista negra" (todos são permitidos, então eu defino explicitamente a quem o acesso pode ser negado).

Existe uma maneira de fazer o oposto? Eu quero que, se um usuário não conseguir se conectar ao ssh, a conexão do sftp será recusada, exceto se ele corresponder a uma regra.

Eu configurei o shell padrão para /bin/false (a conexão ssh clássica está desativada).

Bloquear o usuário ( usermod -L usersftp1 ) obviamente impede que o usuário use sftp e ssh (o que é bom para mim).

Eu tentei usar a diretiva DenyGroups !sftp para não permitir a correspondência de usuários que não seja o sftp, mas o usersftp1 (que não pertence ao grupo sftp (primário nem suplementar), mas não funcionou.

Eu configurei meu servidor para gerenciar algum acesso sftp (começando com Subsystem sftp internal-sftp )

Em / etc / passwd, a linha usersftp1:x:5001:5001::/home/sftp/usersftp1:/bin/false

A conexão ssh não funciona (que é o que eu quero), mas eu posso conectar através do sftp (ao lado do fato de eu não ter permitido esse usuário ainda).

Eu quero que o comportamento padrão seja "conexão não permitida" se o usuário tiver o /bin/false shell.

EDIT: mais detalhes de configuração:

file /etc/passwd:
    usersftp1:x:50001:5001::/home/sftp/usersftp1:/bin/false
file /etc/group:
    usersftp1:x:5001

file /etc/ssh/sshd_config:
    …
    Subsystem sftp internal-sftp -l INFO
    # This is commented, so no rules will be set for user "usersftp1"
    #   Match user usersftp1
    #   X11Forwarding no
    #   ChrootDirectory %h
    #   AllowTcpForwarding no
    #   ForceCommand internal-sftp  

      # This config works as expected
      Match user usersftp2
      X11Forwarding no
      ChrootDirectory %h
      AllowTcpForwarding no
      ForceCommand internal-sftp  

em auth.log , posso ver que o usuário usa o sftp:

Starting session: subsystem 'sftp' for usersftp1 from xxx.xxx.xxx.xxx port 55552

Nessa configuração, após service ssh restart , os usuários usersftp1 e usersftp2 podem se conectar usando o sftp (além do primeiro comentário do primeiro)

    
por Asenar 08.02.2016 / 10:23

1 resposta

1

Eu não acho que o Match User esteja funcionando da maneira que você acredita.

Match
Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file. If a keyword appears in multiple Match blocks that are satisfied, only the first instance of the keyword is applied.

Assim, no seu caso particular, o Usuário de correspondência usersftp2 só se aplica e substitui a configuração para usersftp2.

Quando o seu usersftp1 se conecta, o programa sftp é executado para eles pelo sshd e nenhuma configuração específica do usuário é aplicada.

Se eu entendi sua pergunta corretamente, você deve ser capaz de fazer o que quiser com um grupo.

crie um grupo, por exemplo sftpusers (groupadd ...) e depois adicionar os usuários que você deseja permitir (usermod -G ...)

Em seguida, configure o sshd para permitir apenas o sftp para usuários desse grupo

Match Group sftpusers
  # Force the connection to use SFTP
  ForceCommand internal-sftp
  # Disable tunneling, authentication agent, TCP and X11 forwarding.
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no
    
por 08.02.2016 / 11:39

Tags