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

11

Meu projeto precisa de mim para desativar o sftp para alguns usuários, mas esses usuários ainda precisam se conectar através do ssh. Alguém sabe como implementar isso?

Eu já vi sugestões para alterar o arquivo em /etc/ssh/sshd_config , mas não sei o que mudar.

    
por Shaobo Wang 15.07.2011 / 12:59

8 respostas

7

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

A maneira de fazer isso é usar um bloco condicional Match *.

Match User bob
Subsystem   sftp  /bin/false

Consulte sshd_config(5) na seção Match para obter mais informações e correspondência em Group .

* Há mais de uma maneira de fazer isso.

    
por 16.07.2011 / 02:05
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 através da sessão SSH. Você também poderá escrever, se tiver permissões para isso.

Como exemplo, você pode fazer o download de / etc / passwd via ssh usando o seguinte método (não é necessária sessão scp / sftp): ssh [email protected] "cat / etc / passwd" > passwdcopy

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

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

No entanto, o inverso disso faz sentido (desabilitar o shell ssh mas leeaving scp / sftp enabled) porque você não é capaz de executar comandos arbitrários via sftp / scp que você pode através de um shell ssh.

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

    
por 15.07.2011 / 22:43
4
Match Group nosft
Subsystem   sftp  /bin/false

Eu prefiro usar um grupo para isso.

É útil em combinação com usuários que têm shells restritos. Eu às vezes dou acesso ssh a um cliente para que eles possam acessar um sql-dump de seu banco de dados definindo seu shell para um script que despeja seus dados. Cortá-las do scp também parece ser uma ideia inteligente. Eles não têm acesso à execução de cat para transferir um arquivo por ssh.

    
por 07.05.2013 / 17:18
2

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

Isso não funciona se você quiser que seu usuário receba um prompt de shell regular. Nor isso faz sentido, já que você pode contornar a maioria das coisas se tiver acesso ao shell. Ele só funcionará se você quiser apenas dar acesso a um programa específico.

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

Correspondente

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

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 à "roda", "adams", "simpsons" grupos

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

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 SSH conexão, incluindo SFTP e, portanto, você pode ter a opção de forçar o comando que você quer.

O comando forçar pode ser configurado com a palavra-chave ForceCommand . De 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 desejado usando ForceCommand <your command> . Por exemplo:

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

Exemplo

No meu caso, onde eu quero dar acesso ao git, eu só preciso que o usuário tenha acesso codificar%. Esta é a seção que desabilita o SFTP para meus usuários do git, junto 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
    
por 28.11.2016 / 16:12
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 man do sshd_config lista as palavras-chave limitadas que são permitidas com a condição Match.

    
por 25.06.2015 / 19:22
0

Você pode olhar para scponly para fazer o contrário, permitir somente scp / sftp mas sem acesso ao shell .

Concordo com @Nathan acima, isso não faz muito sentido. Se você está morto, tente editar o seu arquivo / etc / ssh / sshd_config e removendo / comentando a seguinte linha:

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

    
por 15.07.2011 / 23:13
0

não fornece 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.

    
por 18.09.2013 / 17:52
-2

No ~/authorized_key configure a chave do usuário da seguinte forma:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
    
por 21.06.2015 / 11:46

Tags