Alterar usuário em .bashrc quebra SFTP

2

Na minha faixa de aprendizado para o Amazon EC2, achei que seria uma ótima ideia apenas tornar-se o usuário root enquanto ainda fazia o login. Eu adicionei esta linha ao meu .bashrc

/usr/bin/sudo /bin/bash

Dessa forma, eu não precisaria ter SSH como usuário root, mas seria automaticamente alternado quando eu logar. No entanto, quando estava no .bashrc, ele quebrou qualquer cliente SFTP que tentasse se conectar. Os erros variavam dependendo do cliente usado, mas geralmente todos terminavam com um tempo limite, mesmo que eles se conectassem com sucesso ao host remoto. O WinSCP sugeriu que um servidor SFTP pode não estar em execução no host.

Agora estou ciente de que adicionar essa linha foi uma má jogada, mas não sei por que isso quebra o SFTP. Estou logando como ec2-user, mas me tornando root (acho), mas não consigo entender por que isso causa um problema.

    
por qsorted 18.08.2016 / 20:55

2 respostas

2

No mundo bash, os arquivos init de perfil geralmente chamam arquivos init do rc, conforme explicado em este post StackOverflow . Portanto, os arquivos init do rc não estão vinculados a shells somente interativos.

No meu conhecimento, o protocolo SFTP é um uso não interativo do shell SSH para executar um programa sftp-server que interage com o responsável pela chamada por meio de seus fluxos stdin e stdout . Sobre o seu problema, acho que uma das duas coisas indesejadas acontece:

    O comando
  • sudo solicita uma senha, que é inesperada pelo cliente sftp, que espera uma interação binária com seu colega sftp-server

  • O usuário root não tem acesso ao binário chamado pela camada sftp (por causa das configurações de permissão - mas eu acho que esse é o caso do sudo)

Você deve ter duas maneiras de solucionar isso:

  • restrinja o seu auto-switch de raiz para shells interativos apenas como Martin sugere, por exemplo usando tty comando:

    if tty --silent
    then
        /usr/bin/sudo /bin/bash
    fi
  • ou crie / modifique seu perfil .bashprofile privado para não chamar seu arquivo rc dele (ainda definindo seu PATH pelo menos).

por 18.08.2016 / 23:49
2

Normalmente, o .bashrc é originado e depois um shell ou um servidor SFTP é iniciado.

Mas seu .bashrc nunca termina, pois ele inicia um shell sozinho. Portanto, o servidor SFTP nunca é iniciado.

Consequentemente, o cliente SFTP expira durante um handshake do protocolo SFTP; ou falha ao tentar decodificar alguma saída aleatória do shell como um pacote SFTP.

Uma solução possível seria usar sudo apenas para sessões interativas (ou seja, não para as sessões SFTP não interativas).

Embora normalmente o .bashrc deva ser originado apenas para sessões interativas. Por isso, não deve intervir com SFTP. Seu servidor parece estar mal configurado de alguma forma.

    
por 18.08.2016 / 22:14

Tags