
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 ( adduser
pelo 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 chsh
comando 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 bash
script, poderá usá-lo read
junto com uma case
declaração ou uma série de if
declaraçõ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 processes
e retornar a saída de ps -e
.
Se você quiser e for bom com C, poderá até mesmo modificar- bash
se 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.