Shell Openssh personalizado

8

O ambiente é o Ubuntu Server 12.04

Eu gostaria de criar um usuário em um servidor que só pode ssh em um shell que executa tail -f em um arquivo de log e fecha a sessão assim que o programa termina (ctrl + c).

Existe uma maneira de conseguir isso?

Um azul
fonte

Respostas:

8

Para ser pedante, não será ctrl + c, mas SIGHUP(mais perto de ctrl + d) que mata o aplicativo.

Você pode colocar essencialmente o que quiser no shell do usuário /etc/passwd. Simplesmente substitua o padrão na linha de senha do usuário (provavelmente /bin/bash) por outro programa. Esse programa pode ser um script, como /usr/bin/tail_log_file, com este conteúdo, de propriedade de root: root, com umode 0755:

#!/bin/rbash
tail -f /path/to/logfile

Você pode usar outro intérprete que não seja o rbash, mas é recomendável usar um shell restrito nesses casos.

Para ser extremamente pedante, adicione o caminho do script /etc/shells, mas geralmente acho que funciona de qualquer maneira.

Lembre-se também de que o usuário pode colocar o script em segundo plano ou usar algumas opções ( ssh username@host bash) e ainda adquirir um shell. Se você deseja restringir o usuário dessa maneira, boas permissões do sistema de arquivos são a única solução real.

Falcon Momot
fonte
funciona muito bem, muito obrigado pela sua resposta rápida e precisa.
ablue
2
A única razão pela qual você deseja adicionar algo /etc/shellsé permitir que os usuários que possuem outra coisa como shell definam seu shell para isso; o superusuário ( root) sempre pode alterar o shell de qualquer pessoa para o que quiser.
Jonathan Callen
1
Para adicionar o que @ JonathanCallen disse: é realmente um vazamento de segurança adicionar esse script, /etc/shellspois isso permitiria ao usuário alterar seu shell (porque /usr/bin/tail_log_fileseria considerado um "shell irrestrito")!
Joachim Sauer
Ok, eu vou remover.
ablue
1
Isso é muito complicado; comandos forçados (veja a resposta em @tink) são a maneira de fazê-lo.
Reintegrar Monica - M. Schröder
10

Os comandos forçados do ssh vêm à mente se você estiver feliz em usar a autenticação baseada em par de chaves.

man authorized_keys
/command=
consertar
fonte
2

Você pode configurar o ssh para executar um comando de sua escolha ao fazer login usando a autenticação de chave pública. Para fazer isso, gere um par de chaves:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubcontém uma linha adequada para inserir no ~/.ssh/authorized_keysarquivo do usuário :

ssh-rsa AAAA...UDz47Nl djs@sardinia

mas você pode adicionar um comando a isso, e o ssh executará esse comando ao fazer login com a chave:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

Em seguida, o usuário pode usar o ssh na máquina ssh -i restricted-key.

Dan
fonte