Restringir o acesso do usuário para apenas leitura de /proc

Restringir o acesso do usuário para apenas leitura de /proc

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

  • SSH
  • Bash
  • Somente leitura em/proc

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

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

Responder1

Em primeiro lugar, permissões. Quando você cria uma nova conta ( adduserpelo menos em sistemas baseados em Debian - outros podem ser um pouco 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. Este novo usuário terá permissões de leitura/gravação de usuário e grupo em seu diretório inicial. Eles também poderão acessar qualquer coisa designada como legível mundialmente e modificar qualquer coisa que seja gravável mundialmente.

Tanto quanto sei, não é possível especificar especificamenteexcluirum usuário ou grupo com permissões de leitura/gravação mundial usando o sistema de permissão POSIX tradicional. Vocêpodeno entanto, habilite as ACLs mais avançadas (como o NTFS do Windows, se você estiver familiarizado com isso), que permitem definir permissões de negação específicas.


Um método alternativo é configurar umshell de login personalizado, usando o chshcomando ou modificando /etc/passwd. Quando eles fizerem login, esse '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 definir esse 'shell' para serqualquerexecutá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 gera os dados desejados e não recebe nenhuma entrada. Ele apenas gera os dados e sai, fechando a sessão SSH. Esta é a forma 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 fazer isso depende de você - se você usar um bashscript, poderá usá-lo readjunto com uma casedeclaração ou uma série de ifdeclarações. Você precisa ter cuidado para não executar nenhum comando não higienizado diretamente do usuário - e há outros possíveis problemas de segurança ao receber entradas não confiáveis. Por exemplo, você pode pegar a entrada processese retornar a saída de ps -e.

Se você quiser e for bom com C, poderá até mesmo modificar- bashse para não poder acessar nenhum outro diretório - mas é muito mais seguro não receber informações ou filtrar apenas comandos específicos da lista de permissões, em vez de 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.

Responder2

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

informação relacionada