logar ou restringir o usuário de origem do login do ssh

1

É possível registrar e / ou restringir o usuário de origem de um login ssh?

Por exemplo:

user1@server1 registra em server2 como user2 .

também, user3@server1 registra em server2 como user2 .

Por "usuário-fonte", quero dizer user1 ou user3 acima.

Gostaria de saber qual sessão foi iniciada por user1@server1 e qual sessão foi iniciada por user3@server1 .

O objetivo para isso é que vários usuários podem estar usando a conta user2 para, por exemplo, gerenciar processos no servidor2. (Eu percebo que há implicações de segurança disso, mas parte dessa questão é avaliar a extensão delas).

Como mencionado na man page de sshd_config(5) , sshd é capaz de restringir o acesso a um usuário em particular usando a opção AllowUsers config em sshd_config .

AllowUsers

This keyword can be followed by a list of user name patterns, separated by spaces. If specified, login is allowed only for user names that match one of the patterns. Only user names are valid; a numerical user ID is not recognized. By default, login is allowed for all users. If the pattern takes the form USER@HOST then USER and HOST are separately checked, restricting logins to particular users from particular hosts. The allow/deny directives are processed in the following order: DenyUsers, AllowUsers, DenyGroup, and finally AllowGroups.

Mas o USER especificado na man page acima parece estar descrevendo o nome de usuário na máquina TARGET ( server2 no exemplo).

Eu testei isso configurando a opção AllowUsers como user2@server1 e descobri que ainda consegui fazer o login em user1@server1 - > %código%.

Além disso, o log não parece mostrar nenhum usuário de origem.

Este é o log user2@server2 no RHEL6, após o login de /var/log/secure - > user1@server1

Nov 17 16:14:59 server2 sshd[28349]: Set /proc/self/oom_score_adj to 0

Nov 17 16:14:59 server2 sshd[28349]: Connection from 10.1.2.3 port 36508

Nov 17 16:14:59 server2 sshd[28349]: Found matching RSA key: aa:bb:cc:dd:ee:ff:gg:..

Nov 17 16:14:59 server2 sshd[28350]: Postponed publickey for user2 from 10.1.2.3 port 36508 ssh2

Nov 17 16:14:59 server2 sshd[28349]: Found matching RSA key: aa:bb:cc:dd:ee:ff:gg:..

Nov 17 16:14:59 server2 sshd[28349]: Accepted publickey for user2 from 10.1.2.3 port 36508 ssh2

Nov 17 16:14:59 server2 sshd[28349]: pam_unix(sshd:session): session opened for user user2 by (uid=0)

Nov 17 16:14:59 server2 sshd[28349]: User child is on pid 28351

Então, existe alguma maneira de

(a) altera o registro ou comportamento de user2@server2 para que ele rastreie o usuário de origem que está fazendo a conexão ssh?

(b) restringe o sshd para restringir conexões com base no usuário de origem?

    
por hilcharge 17.11.2016 / 08:56

1 resposta

1

A resposta curta é não, o servidor aceitará qualquer login válido do ponto de vista do servidor.

Existem no entanto algumas soluções possíveis para alcançar o que você deseja. Teste e veja se os itens a seguir atendem às suas necessidades.

Observação de que isso pode ser suficiente para usuários "médios" e exige que você também controle os clientes. Usuários experientes encontrarão uma maneira de forjar a variável CLIENTUSER usada abaixo.

Ao usar a diretiva AcceptEnv em /etc/ssh/sshd_config , você pode aceitar, por exemplo, uma variável chamada CLIENTUSER:

AcceptEnv CLIENTUSER

O próximo passo é forçar o login do usuário a um shell de login como:

ForceCommand /bin/bash -l

Reinicie seu serviço sshd e inclua o seguinte em / etc / profile

if [ -z "$CLIENTUSER" ] || [ "$CLIENTUSER" != "user3" ] && [ ! -z "$SSH_CLIENT" ]
then
       echo 'Client logon not allowed'
       logout
fi

Os itens acima serão desconectados de todos os clientes que não enviarem a variável CLIENTUSER ou enviarem a variável CLIENTUSER com outro valor além de user3 .

Você pode testar isso usando a seguinte linha de comando do cliente:

$ ssh user2@host
Client logon not allowed

$ CLIENTUSER=user3 ssh -o "SendEnv CLIENTUSER" user2@host
user2@host $

Como você pode ver, o CLIENTUSER pode ser facilmente forjado a partir da linha de comando. Para evitar isso, você pode adicionar o seguinte ao cliente '/ etc / profile:

declare -r CLIENTUSER="$USER"

Quando o usuário tentar alterar o valor da variável CLIENTUSER , ele receberá o seguinte erro:

bash: CLIENTUSER: readonly variable
    
por 17.11.2016 / 12:58

Tags