Como desativar o sftp para alguns usuários, mas manter o ssh ativado?


12

Meu projeto precisa que eu desative o sftp para alguns usuários, mas esses usuários ainda precisam se conectar pelo ssh. Alguém sabe como implementar isso?

Vi sugestões para alterar o arquivo em /etc/ssh/sshd_config, mas não sei ao certo o que alterar.


A única maneira que eu poderia imaginar fazer isso seria usar uma política de MLS no SELinux e restringir exatamente quais arquivos, diretórios e soquetes uma pessoa pode acessar, executar etc. Eu faria isso em combinação com uma política de tabelas de ip altamente restritiva que usa o módulo ownerpara acesso de saída. Isso pressupõe que você será testado com caneta por um time vermelho. Se todos os que acessam seu sistema sempre obedecem às regras e nunca têm más intenções, minha abordagem seria pesada e excessivamente complexa.
Aaron

Respostas:


7

Em geral, isso é uma má prática de segurança por motivos listados por outras pessoas. No entanto, acho que o objetivo da sua tarefa é ensinar que você pode ter seções de configuração condicional com base em vários critérios.

A maneira de fazer isso é usando um Matchbloco condicional *.

Match User bob
Subsystem   sftp  /bin/false

Consulte sshd_config(5)a Matchseção para obter mais informações e correspondência Group.

* Há mais de uma maneira de fazer isso.


7
Não está funcionando para mim. Erro: a diretiva 'subsistema' não é permitida em um bloco de correspondência
chrw

Resposta errada porque Subsistema não é permitido no bloco Jogo
Mikep

6

Isso não faz sentido, é segurança através da obscuridade inútil. Qualquer usuário que possa SSH poderá transferir qualquer arquivo que possa ler por meio da sessão SSH. Você também poderá escrever, se tiver permissões para fazê-lo.

Como exemplo, você pode fazer o download de / etc / passwd via ssh usando o seguinte método (nenhuma sessão scp / sftp é necessária): ssh foo@bar.com "cat / etc / passwd"> passwdcopy

Se você puder vê-lo na tela via SSH, poderá copiá-lo facilmente como um arquivo.

A única maneira de fazer sentido é se você tiver um shell restrito personalizado que imponha uma política de segurança.

No entanto, o inverso disso faz sentido (desabilitar o ssh shell, mas desabilitar o scp / sftp ativado) porque você não é capaz de executar comandos arbitrários via sftp / scp, como é possível através de um shell ssh.

PS: Estou assumindo que o shell SSH que você está concedendo é um shell padrão que permite execução arbitrária. Se esse não for o caso, consulte o seguinte: Como desativar o subsistema sftp para um usuário ou grupo específico? e dê uma olhada na opção de configuração Subsystem do sshd_config.


4
Match Group nosft
Subsystem   sftp  /bin/false

Eu prefiro usar um grupo para isso.

É útil em combinação com usuários que possuem shells restritos. Às vezes, concedo acesso ssh a um cliente para que ele possa acessar um sql-dump de seu banco de dados, definindo seu shell como um script que despeja seus dados. Cortá-los do scp também parece ser uma idéia inteligente. Eles não têm acesso à execução catpara transferir um arquivo pelo ssh.


3
Directive 'Subsystem' is not allowed within a Match block
quer

Resposta errada porque Subsistema não é permitido no bloco Jogo
Mikep

4

É possível ativar o SFTP globalmente e desativá-lo apenas para alguns usuários.

Isso não funciona se você deseja que seu usuário receba um prompt de shell regular. Também não faz sentido, pois você pode contornar a maioria das coisas se tiver acesso ao shell. Só funcionará se você quiser dar acesso a um programa específico.

Pessoalmente, preciso disso porque quero dar acesso a alguns repositórios git sobre SSH e gosto de desativar sistemas que não são necessários. Nesse caso, o SFTP não é necessário.

Coincidindo

Para corresponder a um conjunto de usuários, você pode configurar o SSH com a Matchpalavra - chave Do sshd_config(5)manual:

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

Alguns exemplos:

  • Match User eva corresponde ao usuário "eva"
  • Match User stephen,maria corresponde aos usuários "stephen" e "maria"
  • Match Group wheel,adams,simpsons corresponde aos grupos "roda", "adams", "simpsons"

Se você quiser obter mais informações, há muitas cargas no sshd_config(5)manual.

Comando forçado

Normalmente, você obtém o shell de login do usuário quando se conecta via SSH, mas o SSH pode ser configurado para forçar um determinado comando. O comando é forçado para qualquer conexão SSH, incluindo SFTP, e, portanto, você pode ter a opção de forçar o comando desejado.

O comando forçar pode ser configurado com a ForceCommandpalavra - chave. Do sshd_config(5)manual:

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

Assim, você pode forçar o comando restrito que deseja usar ForceCommand <your command>. Por exemplo:

Match User kim
        ForceCommand echo 'successful login man, congrats'

Exemplo

No meu caso em que desejo conceder acesso ao git, só preciso que o usuário tenha acesso git-shell. Esta é a seção que desativa o SFTP para meus usuários git, juntamente com algumas opções de segurança:

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no

1
Isso não responder à pergunta do OP, mas foi muito útil para mim para conseguir o que eu quero alcançar em meu próprio caso de uso
Kidburla

Eu não concordo A pergunta do OP é "Como desativar o sftp para alguns usuários, mas mantenha o ssh ativado?", E esta resposta explica uma maneira de fazer isso. Que bom que você achou útil de qualquer maneira!
aude

Por sua própria admissão, "não funciona se você deseja que seu usuário receba um prompt de shell regular". de modo que este não atende a exigência do OP de "keep ssh habilitado"
Kidburla

Este é um bom ponto. Acho que cheguei a um acordo com essa solução por causa de "Nem faz sentido, pois você pode contornar a maioria das coisas se tiver acesso ao shell". Mas eu não encontrei uma maneira de exatamente o que o OP pede, concordo agora.
aude 15/05

Aqui está uma versão mais completa desta resposta: serverfault.com/a/817482
aude

1
Match User bob
MaxSessions 0

Testado e trabalhando no CentOS 6.6. Observe que o subsistema não é permitido com o Match pelo menos nas versões mais recentes do CentOS. A página de manual para sshd_config lista as palavras-chave limitadas permitidas com a condição de Correspondência.


0

Você pode olhar o scponly para fazer o inverso, permitir apenas o scp / sftp, mas nenhum acesso ao shell.

Concordo com o Nathan acima, isso não faz muito sentido. Se você estiver definido, tente editar o arquivo / etc / ssh / sshd_config e remover / comentar a seguinte linha:

Subsistema sftp / usr / libexec / openssh / sftp-server


0

não dê nenhum diretório inicial para o usuário

usermod username -d /bin/false

Altere o subsistema sftp / usr / libexec / openssh / sftp-server no arquivo / etc / ssh / sshd_config para Subsistema sftp / dev / null / usr / libexec / openssh / sftp-server

Em seguida, reinicie o ssh

service ssh restart

funciona para mim, debian.


-2

No ~/authorized_keyconfigure a chave do usuário da seguinte maneira:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
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.