Em um servidor Linux, preciso remover privilégios de root de um grupo de usuários. Mas esses usuários têm motivos legítimos para poder usar o utilitário "find" para procurar arquivos com base em nomes de arquivos, datas de modificação e outros metadados.
No servidor, os nomes dos arquivos não são sensíveis, mas o conteúdo do arquivo pode ser.
Eu gostaria de usar o sudo para permitir que os usuários pesquisem arquivos em qualquer lugar do servidor. O utilitário "find" é ótimo, mas permite todos os tipos de efeitos colaterais, como o uso de "-exec" para gerar comandos arbitrários.
Posso find
trabalhar com minhas restrições?
Respostas:
Que tal localizar ?
Ou talvez até incline :
fonte
locate
não precisasudo
; somente seuupdatedb
trabalho requer privilégios especiais. Seus usuários, portanto, nunca devem estar em execução ou poder executarsudo locate
.-d
sinalizador define apenas o caminho do banco de dados? Talvez eu tenha entendido mal você.De acordo com
man 7 capabilities
Isso funcionou para mim. (as linhas que começam com '#' são raiz e aquelas com '$' não são raiz). Nesse caso, o usuário não raiz está no
wheel
grupo.Dado o que a capacidade concede, ela se encaixa exatamente no que você deseja. Eu não verifiquei exaustivamente se
find
há um recurso que permite ler bytes dentro de arquivos, mas coisas óbvias comoLD_PRELOAD
ataques de calibração de bibliotecas não devem funcionar devido à natureza das verificações de setuid no Linux, e os bits de capacidade não são herdado pelos processos filhos (ao contrário do setuid bruto), então esse é outro bônus.Lembre-se de que o que você deseja fazer suscita possíveis preocupações com a privacidade em relação à criação ou acesso temporário a arquivos, e o programa pode ser usado como base para montar uma tentativa de escalação de condição / privilégio de corrida (contra programas que criam nomes de arquivos conhecidos mas não faça as verificações de segurança corretas).
Além disso, alguns aplicativos mal escritos podem contar com metadados de arquivo ou estrutura de árvore como uma maneira de transmitir significado ou ocultar dados. Isso pode causar a liberação de informações restritas ou revelar documentos privilegiados desconhecidos (segurança pela obscuridade, eu sei, mas isso é algo que os fornecedores de código fechado, em particular, gostam de fazer, infelizmente).
Portanto, tome cuidado e tenha cuidado ao fazê-lo e entenda que ainda há riscos associados a isso, mesmo que as coisas óbvias não funcionem.
Ah, e eu ficaria interessado em ver se alguém tem uma prova de ataque de conceito que usa esse mecanismo como base para a escalada de privilégios nos comentários!
fonte
find
a execução direta de algum código fornecido pelo usuário, semelhante ao queawk
pode ser feito.Eu daria aos usuários permissões adequadas.
Por padrão, se o umask for
022
, os diretórios serão criados para que todos possam listar e estatisticamente os arquivos neles. Caso contrário, você pode alterar manualmente a permissão do diretório para o bit a bit ou de suas permissões antigas e0555
:E se esses usuários não tiverem permissão de execução em todos os pais desse diretório (por exemplo, o diretório inicial de outro usuário), provavelmente significa que você deve colocar o primeiro diretório em outro lugar.
Se você deseja permitir que apenas alguns usuários leiam e executem esse diretório, é possível alterar seu modo para
0750
, colocar esses usuários em um grupo e alterar o proprietário do grupo para esse grupo:fonte