Restrinja os comandos ssh

1

Como posso restringir um usuário ssh (com apenas uma chave) para permitir somente:

  • um conjunto de comandos, com tantos argumentos quanto eles querem
  • recursos de tunelamento (capacidade de abrir portas)

Eu encontrei alguns exemplos baseados em authorized_keys, ou sshd config, mas nenhum que realmente se encaixa na minha necessidade.

edit : Só para esclarecer, eu não preciso que o usuário possa usar o ssh na máquina e acessar um shell. O usuário deve executar um determinado conjunto de comandos, como 'ls' ou 'date', por exemplo. Eu não quero restringir o usuário nos parâmetros. Então, eu quero ser capaz de ter uma lista branca, ao invés de uma lista negra: eu preciso ter uma maneira de descrever um conjunto de comandos que o usuário pode executar, todos os outros sendo negados.

Exemplo de comandos que eu quero que o usuário possa executar:

  • data remoteserver do ssh
  • ssh remoteserver 'ls-la'
  • ssh -R 1234: localhost: 5678 remoteserver
por TimPoe 28.06.2016 / 13:37

1 resposta

0

Existem várias maneiras diferentes de conseguir isso. Vou listar uma das várias soluções possíveis.

Eu proporia usar várias camadas diferentes de proteção para impedir que os usuários executem os comandos que eles não deveriam ter permissão para acessar. Todas as instruções aqui assumem que os usuários têm seu próprio diretório /home/[username] , que seu shell é /bin/bash e você gostaria que eles usassem o shell bash ao efetuarem login no sistema.

1) Altere as permissões do diretório para que apenas o usuário possa editar o conteúdo do seu diretório pessoal

chmod 755 /home/[username]

2) Remova o arquivo .bashrc do usuário

rm /home/[username]/.bashrc Este site tem mais informações sobre o motivo de ser uma boa ideia para excluir o .bashrc nessa situação.

3) Crie um .bash_profile e adicione aliases "seguros" para todos os comandos que você gostaria de desativar

./exemplo de arquivo bash_profile

alias apt-get="printf ''"  
alias aptitude="printf ''"  
[...]  
alias vi="vi -Z" #this is vi's safe mode and shell commands won't be run from within vi
alias alias="printf ''"  

E, por favor, verifique a lista completa de comandos bash para mais informações. Você deve certificar-se de que o comando alias alias="printf ''" seja o último comando da lista, caso contrário, você perderá a capacidade de aliasar todos esses comandos.

4) Desabilite os comandos do shell no vi, alterando o comando vi para o modo restrito. A sintaxe é alias vi="vi -Z" , mas por favor veja este site para mais informações.

5) Altere a propriedade do usuário .bash_profile para root
chown root:root /home/[username]/.bash_profile

6) Remover permissões de gravação no usuário .bash_profile
chmod 755 /home/[username/.bash_profile]

7) Por fim, altere a festa dos usuários para o modo bash restrito para que eles não possam mudar de diretório (se você não tiver um modo bash restrito em seu sistema, este link ajudará e fornecerá mais informações) chsh -s /bin/rbash [username]

Agora, quando os usuários fizerem o login, eles não poderão alterar os diretórios, todos os comandos que você não quer que eles usem, produzirão as mesmas informações como se o usuário tivesse pressionado o ENTER chave sem comando especificado e suas funções /bin/bash permanecem intactas.

Dependendo de quais funções você escolher ou não usar como alias dessa maneira, os usuários ainda poderão contornar alguns dos controles implementados. No entanto, como implementamos alguns buffers de segurança, o usuário realmente precisa saber sobre os sistemas de computador para fazer algo perigoso.

Em uma nota relacionada e algo que você pode querer considerar, se você colocar esses aliases diretamente em cada usuário% ' .bash_profile , você terá dificuldade em manter quais funções devem e não devem ter um alias e se você precisa para alterar o pseudônimo em qualquer coisa você teria que mudar todos eles individualmente. Além disso, como os usuários podem usar vim ou vi para exibir arquivos, eles podem ver o conteúdo de seus .bash_profile e entender quais restrições eles têm e não têm.

Para contornar isso, eu sugeriria.

1) Colocando todos os aliases em um diretório não acessível pelos usuários (cole o conteúdo do .bash_profile aqui)

/[path_to_file]/startup_functions_for_beginners.sh

2) Fornecendo os alias em seus .bash_profile

exemplo de arquivo ./bash_profile aprimorado

if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
    . /[path_to_file]/startup_functions_for_beginners.sh
fi

Isso deve colocá-lo no seu caminho, mas lembre-se de que quase sempre existem maneiras de contornar as restrições.

Além disso, sinta-se à vontade para remixar as informações nesta resposta para atender às suas necessidades. Estes podem definitivamente ser combinados com outras restrições também.

P: Preciso que os usuários tenham acesso a fg e bg , mas não quero que eles consigam acessar aptitude ou bash

alias apt-get="printf ''"  #the user won't be able to run this  
alias aptitude="printf ''"  #the user won't be able to run this  
alias bash="printf ''"  #the user won't be able to run this  
#alias fg="printf ''" #this will run as a bash built-in  
#alias bg="printf ''" #you actually don't need to include these in your script  
    
por 28.06.2016 / 14:32