Restringir o acesso do usuário a somente leitura de / proc

1

Como um método para configurar alguns sistemas de monitoramento, eu tenho um script configurado para SSH e execute alguns comandos básicos do shell, lendo alguns arquivos em /proc . Gostaria de criar uma conta de usuário específica para essa tarefa e ela deve ter o seguinte acesso:

  • SSH
  • Bash
  • Somente leitura em /proc

Outras postagens mencionaram o rssh ou o Chroot, mas esses são os melhores métodos? Parece-me que deve haver uma maneira de criar um usuário sem permissões e apenas adicionar o que é necessário, impondo minhas restrições no nível do sistema de arquivos em vez de no SSH. Isso é possível?

Todos os sistemas que eu quero monitorar agora estão rodando o Ubuntu, mas eu gostaria de não me prender a qualquer distribuição paticular.

    
por Brad 01.12.2013 / 04:23

2 respostas

1

Primeiramente, permissões. Quando você cria uma nova conta (com adduser em sistemas baseados no Debian, de qualquer forma - outros podem ser ligeiramente diferentes), você obtém um novo usuário e um novo grupo com o mesmo nome. Você também obtém um diretório inicial para o usuário. Esse novo usuário terá permissões de leitura / gravação de usuário e grupo em seu diretório pessoal. Eles também poderão acessar qualquer coisa designada como legível para o mundo e modificar qualquer coisa que possa ser gravada no mundo.

Até onde eu sei, não é possível especificamente excluir um usuário ou grupo de permissões de leitura / gravação usando o tradicional sistema de permissões POSIX. Você pode no entanto, habilitar as ACLs mais avançadas (muito parecido com o Windows NTFS, se você estiver familiarizado com isso), o que permite que você defina permissões de negação específicas.

Um método alternativo é configurar um shell de login personalizado , usando o comando chsh ou modificando /etc/passwd . Quando eles se conectam, este 'shell' será executado com a entrada do usuário redirecionada como sua entrada padrão, e sua saída / erro padrão redirecionada para a saída do terminal. Você pode configurar este 'shell' para ser qualquer executável no sistema, incluindo (mas não limitado a) seu próprio programa C, script bash / python / perl, etc.

Existem algumas maneiras de fazer isso. Você pode definir o shell de login como um script que simplesmente exibe todos os dados desejados e não recebe entrada. Ele apenas exibe os dados e sai, fechando a sessão SSH. Essa é a maneira mais segura, embora não tão flexível.

Como alternativa, você pode fazer com que um script receba alguma entrada e use essa entrada para determinar o que imprimir. Como você faz isso é com você - se você usar um script bash , poderá usar read juntamente com uma instrução case ou uma série de instruções if . Você precisa ter cuidado para não executar nenhum comando não-anulado do usuário diretamente - e há outros possíveis problemas de segurança ao fazer uma entrada não confiável. Por exemplo, você pode pegar a entrada processes e retornar a saída de ps -e .

Se você quiser, e é bom com C, você pode até modificar o próprio bash para não conseguir acessar nenhum outro diretório - mas é muito mais seguro não aceitar a entrada ou filtrar somente comandos whitelisted específicos, do que tentar restringir quais diretórios você pode acessar. Também é mais fácil escrever um script de shell rápido do que modificar um programa C complexo.

    
por 01.12.2013 / 07:26
1

Para aplicar somente leitura em / proc, você pode acessar um clone sshfs somente leitura de / proc.

    
por 03.12.2013 / 15:28