Como fazer um usuário restrito que só pode iniciar um shellscript?

1

Como posso criar um usuário local, que pode efetuar login via SSH para máquinas linux, ex .: SLES12 e só pode executar um shellscript, que aparece após o login SSH?

Portanto, ele não deve ser capaz de enganar e ler qualquer arquivo 777 de outros usuários ou emitir outros comandos.

O shellscript seria um pequeno material baseado em menu, que executa comandos via sudo, que eu posso manipular, só questão é a restrição para o usuário que ele realmente deveria encarar o script baseado em menu automaticamente quando logar e deveria pode ser capaz de emitir cmds via ex .: "usuário ssh @ linuxmachine" somecmd ""

    
por KollarA 14.08.2018 / 11:17

3 respostas

1

Você pode forçar isso com o sinalizador command= no arquivo authorized_keys no lado do servidor. De man sshd :

command="command"

Specifies that the command is executed whenever this key is used for authentication. The command supplied by the user (if any) is ignored. The command is run on a pty if the client requests a pty; otherwise it is run without a tty. If an 8-bit clean channel is required, one must not request a pty or should specify no-pty. A quote may be included in the command by quoting it with a backslash.

This option might be useful to restrict certain public keys to perform just a specific operation. An example might be a key that permits remote backups but nothing else. Note that the client may specify TCP and/or X11 forwarding unless they are explicitly prohibited, e.g. using the restrict key option.

The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment variable. Note that this option applies to shell, command or subsystem execution. Also note that this command may be superseded by a sshd_config(5) ForceCommand directive.

If a command is specified and a forced-command is embedded in a certificate used for authentication, then the certificate will be accepted only if the two commands are identical.

Você encontrará muitos exemplos para isso em tutoriais sobre configurações do git, bzr e friends, para acesso ssh, onde você quer que eles não façam nada além de acessar o controle de versão.

Note que também há uma sshd_config directive ForceCommand , que faz basicamente a mesma coisa ("Força a execução do comando especificado pelo ForceCommand, ignorando qualquer comando fornecido pelo cliente e ~ / .ssh / rc se presente. O comando é invocado usando o shell de login do usuário com a opção -c. "), Mas também funciona se você usar o login baseado em senha e pode ser restrito a determinados IPs de origem. Ele precisará entrar na configuração do servidor global, por isso, não dimensiona bem.

    
por 14.08.2018 / 12:29
0

O que você está procurando é shell restrito. Olhe para o rbash e os problemas de segurança que o acompanham. Se você configurá-lo corretamente, isso pode funcionar para você. As melhores opções são usar ambientes virtuais ou cadeias se o seu sistema operacional suportar isso.

    
por 14.08.2018 / 11:32
0

Qual é o nível de ameaça esperado? É suficiente que o sistema de menu possa suportar o uso incorreto acidental e a experimentação casual, ou está protegendo algo de valor real que pode atrair ataques sérios?

Para o final mais casual do espectro, esse truque antigo do Unix pode ser suficiente:

Verifique se o script de menu é executável sem nenhum parâmetro, adicione-o a /etc/shells e use chsh para definir o script de menu como o shell desse usuário.

Você precisa ter certeza de que o usuário não pode escapar do script de menu para um modo de comando, mas se o usuário simplesmente interromper o script de menu, a sessão restrita acaba de terminar.

Se o usuário tentar executar outros comandos (por exemplo, usando a sintaxe ssh <host> <command> ), a execução desses comandos será tentada usando o script de menu no lugar de um shell normal. Se o script de menu não receber nenhum parâmetro em nenhum caso, a tentativa falhará e o usuário terminará no menu de qualquer maneira.

Isto é para logins tradicionais baseados em senha; Se for possível aplicar exclusivamente o uso da autenticação de chave SSH, o sinalizador command= no arquivo authorized_keys , conforme sugerido por Ulrich Schwarz está praticamente no mesmo nível.

    
por 14.08.2018 / 15:28