Mudando de usuário no openssh usando o PAM

1

Estou tentando escrever um módulo PAM que, no login, irá comparar o nome de usuário fornecido com uma lista de nomes de usuário "virtuais". Se o nome de usuário fornecido for um "usuário virtual", ele concluirá a autenticação, alterará o nome de usuário para algum usuário local real e continuará com o processo de login.

Ao tentar fazer isso, percebi que não é possível (pelo menos não por padrão) alterar o nome de usuário no OpenSSH - você está preso àquele que você forneceu na primeira tentativa de autenticação e não pode use a funcionalidade de troca de nome de usuário do PAM para alterá-lo.

Existe uma maneira de permitir isso? (Modificar o código OpenSSH também é uma opção válida, mas certamente não é a preferida.)

    
por mseren 06.05.2012 / 00:02

3 respostas

2

Você não quer fazer isso.

Morda a bala, crie os usuários e conceda a eles acesso ao sudo.

    
por 06.05.2012 / 04:55
2

Você está tentando resolver um problema com um bisturi, mas o que você precisa é de uma pedra grande. Considere:

Os nomes de usuários Unix são mapeados para IDs de usuário numéricos.
Esse é um mapeamento de muitos para muitos sem restrições.
Portanto, nada o impede de criar um grupo de contas ( guest , external , random e mapear todas elas para o mesmo ID numérico, diretório pessoal, etc. - Basta editar seu arquivo de senha e adicionar vários usuários com o mesmo ID numérico de usuário (e grupo).

Você poderia até fazer isso por root (UID 0) se quisesse - Na verdade * os sistemas BSD normalmente vêm com uma conta toor com UID 0, que tem sua senha bloqueada e não consegue efetuar login

 (A maioria dos administradores remover esta conta, fora de um nível adequado de paranóia ...)

Esta é uma solução um pouco brutal, sem qualquer nível de estilo ou finesse, mas simples é geralmente melhor.

Advertências:

  1. Quando esses usuários executarem whoami , ou quando você olhar para eles em w / who output, normalmente verá o primeiro nome de usuário que aparece no arquivo de senha para um determinado UID numérico, mas você veja isso de qualquer maneira com as soluções que você descreveu acima.
  2. Se você usar chaves SSH ( authorized_keys file), ele será mapeado para o diretório inicial do usuário. Se todos os seus usuários compartilharem um diretório inicial, eles compartilharão um arquivo authorized_keys .
    Você pode designar os diretórios iniciais independentes dos usuários se isso for uma preocupação.
  3. Seus registros de login podem mostrar a autenticação do nome de usuário fornecido (em vez de mapear para o primeiro usuário, conforme observado em (1) acima), mas isso provavelmente é uma coisa boa, pois você pode ver quem está fazendo login em quais contas onde, pelo menos, pelo endereço IP.
  4. Seus usuários terão senhas independentes do Unix. Isto é provavelmente o que você quer, mas se não for você pode escrever alguns scripts para sincronizá-los sem muita dor e sofrimento.
por 07.05.2012 / 07:02
0

Já pensou em instalar um wrapper que faz o su (1) como o shell do usuário? Certifique-se de "su -" ....

Eu não estou afirmando que esta é uma solução totalmente segura, mas também não é um problema totalmente seguro.

    
por 06.05.2012 / 01:53

Tags