A maneira mais rápida de localizar arquivos / diretórios com ACLs diferentes do pai? (FreeBSD)

1

Como a pergunta diz.

Eu tenho um pool de dados com arquivos ~ 10M com acesso controlado por ACLs do NFSv4. É usável do CLI, Samba, às vezes por processos daemon ou rsync , e para alguns dirs por ftp / sftp, então muita coisa pode ficar confusa ao longo do tempo. Parece tudo bem, mas não consigo verificar o tamanho do pool a olho, e tive que corrigir ACLs no passado. Então, eu não tenho certeza se suas ACLs são como deveriam, depois de todo esse tempo, e gostaria de verificá-las ('auditoria' pode ser uma palavra melhor) para reafirmação e boas práticas.

Como eu poderia querer fazer isso novamente no futuro, e seria lento para script do arquivo de cada vez, eu estou esperando que haja algum utilitário ou pacote do FreeBSD especificamente para isso, ou pelo menos uma maneira mais rápida de abordá-lo !

A saída ideal seria uma lista de quaisquer arquivos / diretórios com diferentes ACLs que seus pais (incluindo a verificação da ordenação de ACL, idealmente, já que o Windows é muito exigente, mas isso é menos essencial). Alguns arquivos bem definidos devem ter ACLs diferentes, então estou procurando esses arquivos para aparecer nos resultados, para confirmar que está tudo bem.

Qual é a maneira mais eficiente de gerar essa lista?

Atualização - mais informações:

Como os comentários do @Claus_Anderson, o Q original não foi específico o suficiente como está escrito.

Minha principal preocupação é me checar duas vezes. Eu quero garantir que as ACLs que eu configurei estão funcionando como eu esperava, o que seria "tudo herda, exceto alguns poucos arquivos específicos". Eu estou sendo bastante restritivo, e o principal risco além de não verificar com cuidado o suficiente na configuração, é o risco de minhas próprias ações atrapalharem algo - eu acesso um arquivo ou diretório de um uid incorreto ou algo estúpido, ou defino um WSamba inherit param e esqueceu de removê-lo. Estúpido, mas pode acontecer. Verificando os próprios assuntos de trabalho, e eu gostaria de fazer isso:)

O pool usa ACLs do NFSv4 (Q atualizado para ser claro sobre isso). Eu posso facilmente escrever algo no shell, que corre em find , atravessa a árvore do sistema de arquivos, e para todos os arquivos "comuns" + dir obtém as ACLs desse objeto e suas ACLs de pai, verifica se são idênticas e libera um lista de exceções (caminhos de objetos para os quais eles não são os mesmos) em um arquivo de texto. Se houver muitos caminhos nesse arquivo, haverá algo claramente errado sistematicamente e eu posso consertar isso e verificar novamente; Se houver poucos, posso verificar a olho nu se são esperados ou não. Uma vez que está disponível para um punhado de exceções esperadas, posso executar o script semanalmente via cron e obter uma contagem por e-mail dos arquivos adicionados / removidos / total na lista.

Minha preocupação com isso é que é muito ineficiente. Um utilitário dedicado que poderia interagir diretamente com a API de permissões / sistema de arquivamento, pegar ACLs em massa para verificar como structs e não tem que atravessar em um script e para cada item gerar 2 chamadas de sistema de arquivos, converter em formato de texto , então compare o texto ... simplesmente ineficiente. A maneira Unix é ter uma ferramenta e fazer um trabalho dedicado (ou trabalhos relacionados) bem. Embora o script possa fazer isso, é horrível do ponto de vista da elegância / eficiência, a menos que o lado de manipulação do ACL seja feito melhor (para mim de qualquer modo!). Daí eu estou querendo saber se há uma maneira melhor - ou seja, algum utilitário padrão, setfacl/getfacl/otheracl opção ou pacote portado, o que tornará o processo mais eficiente?

A redefinição de permissões seria uma boa maneira de fazê-lo, mas gostaria de identificar se cometi erros, em vez de corrigi-los, mas ignorar isso. Ou, como todas, exceto algumas exceções conhecidas, devem ter apenas as permissões herdadas , percorrer e listar quaisquer arquivos + diretórios encontrados com ACLs explícitas também seria uma solução interessante, já que evita uma segunda pesquisa.

    
por Stilez 24.04.2018 / 16:45

1 resposta

0

Você faz muitas suposições em sua pergunta. Se eu apenas responder seu título, eu diria "um script". Não conheço ferramentas comuns porque não é algo que você faria normalmente.

Você tem o modelo de permissões padrão do Unix e o Listas de controle de acesso . O primeiro é gerenciado usando chmod e chflags - o outro usando setfacl e getfacl .

Eu não vejo problema em ver as ACLs, uma de cada vez, sendo um problema. Essa é a maneira Unix de fazer as coisas. Então você pode construir bons canais. Se você quiser apenas verificar se os arquivos têm diferentes ACLs que o pai, construa o pipeline de acordo.

Da sua pergunta você parece pensar que é óbvio como você quer monitorar as coisas e mantê-las no lugar. Mas você não dá nenhum exemplo específico . O que é óbvio para você não é óbvio para o resto de nós.

Então! Eu tenho um script acessível para resolver seu problema específico? Não. Mesmo se você colocar uma tag de 'awk' eu não pretendo escrever uma: -)

Mas eu tenho alguns padrões típicos:

1. Estar no controle

As ACLs podem ser extremamente poderosas e, configurando tudo com grande atenção aos detalhes, você pode garantir que as permissões permaneçam como você pretende. Isso naturalmente exige que você esteja no comando. Usando o acls adequado, você tem algo muito mais poderoso que o simples usuário / grupos. Se eu for o único responsável pela designação, dedicarei um enorme esforço para garantir que as coisas estão definidas como eu quero. Se este é o caso, então devemos discutir como evitar ser permissivo em um contexto específico. Se os usuários não tiverem a intenção de definir as permissões, devemos defini-las de acordo. A hereditariedade pode ser um desafio, mas pode ser resolvida.

2. Assuma o controle

Outra abordagem típica e simples seria simplesmente redefinir as permissões. Isso é útil se mais pessoas tiverem acesso administrativo. Então, ao invés de depender de que isso pareça correto, defina seus pontos de estrangulamento e redefina as permissões. Se você quiser que os arquivos tenham as mesmas permissões que os pais, passe pelos pais e redefina os filhos. Qualquer administrador desafortunado que tenha definido permissões ruins será "ajudado" pelo sistema. Se este for o caso, o script será uma lista trivial de chmod / chflags / setfacls / setuid.

3. Zelador

Se você tem um sistema verdadeiramente complexo com segurança descontraída e precisa atuar como zelador e limpar de maneira cuidadosa (em vez de simplesmente assumir o controle), então, em alguns casos, pode fazer sentido examinar Sistemas de Detecção de Intrusão ( IDS). Um desses sistemas bem conhecidos pode ser tripwire . Isso ajuda você a monitorar seu sistema e a notificá-lo caso ocorram mudanças inesperadas. Você deve, em particular, olhar para a política do twpolicy a> e a propriedade p - Permission & filemode bits

auditd também pode ter o seu interesse.

    
por 25.04.2018 / 14:07