
Na empresa onde trabalho temos algumas contas compartilhadas que qualquer pessoa pode usar via SSH para realizar tarefas específicas. Neste ponto, temos muitos usuários e cada um deles tem suas próprias vantagens de usabilidade, como aliases de shell, etc.
O que estou tentando fazer é permitir que os usuários tenham diferentes configurações de shell, dependendo ~/.bash_profile
de quem realmente efetuou login. Por exemplo, quando Jonathan efetua login, quero que o shell execute adicionalmente ~/.Jonathan_profile
e, para Bob, quero que o shell seja o ~/.Bob
perfil de origem.
Não tenho certeza, entretanto, se existe uma maneira de informar o nome da conta na máquina remota de um usuário conectado usando SSH.
Qualquer sugestão é muito apreciada.
Responder1
Você não pode saber qual conta o cliente está usando, porque o cliente não lhe informa. Mas há essas coisas que vocêpodefazer:
Crie contas separadas e conceda aos usuários acesso à conta compartilhada usando sudo. Esta é a opção realmente preferida que oferece a melhor auditoria (é sempre registrado quem faz o quê) e os usuários podem colocar os utilitários que desejarem em suas contas. No entanto, também é muito trabalhoso.
Use apenas autenticação de chave pública e defina a variável de ambiente a partir daí usando a sintaxe:
environment="END_USER=whoever" ssh-rsa asdfasdfr...
em
.ssh/authorized_keys
. Do que você olha$END_USER
em.profile
. Obviamente você deve configurá-lo para cada chave pública usada para fazer login.Diga a todos para definirem a variável de ambiente do cliente usando a
SendEnv
opção (o servidor deve terAcceptEnv
o conjunto correspondente). Novamente você verifica a variável em.profile
.Obtenha o IP e a porta de origem da
SSH_CONNECTION
variável e use-oident
para obter o usuário de origem real; masidentd
teria que estar rodando nos clientes e isso raramente acontece hoje em dia, porque não é muito útil, mas é útil para um invasor em potencial obter algumas informações sobre o seu sistema.Para uma personalização mais complicada em uma única conta, é sempre possível escrever um wrapper de shell personalizado e usá-lo com o
command
atributo nas chaves autorizadas. Também dá bastante trabalho, mas pode ser usado para implementar quase todas as restrições e auditorias sem a necessidade de criar contas separadas.
Nota: eu certamente recomendaria apenas usar chaves públicas e desabilitar senha. Dessa forma, se você quiser cancelar o acesso de alguém, basta remover a chave.