Como abordar o planejamento de uma hierarquia de arquivos voltada para fora do servidor de arquivos BSD

3

Estou migrando dados em um servidor doméstico informal para um novo servidor de arquivos baseado no FreeNAS (FreeBSD 10) rodando samba, e estou preso em tentar planejar como lançar os dados, para dar acesso correto a diferentes usuários. . Acho que preciso de um pouco de apoio para entender como abordar isso no mundo do BSD (em oposição ao mundo do Windows ao qual estou acostumado), já que não estou suficientemente familiarizado com o modo como um administrador de sistema mais experiente combinaria o uso de permissões unix, ACLs, dirs iniciais Unix, links simbólicos suaves / físicos, usuários / grupos e samba incluem / excluem parâmetros para alcançar o resultado desejado.

Existem muitos dirs de dados e cerca de 8 usuários, mas para torná-lo mais genérico para outras pessoas com uma consulta semelhante, eu o abstracionei bastante:

A estrutura de dados lógicos é algo assim (não necessariamente como é apresentado no disco):

media
  --- movies
  --- tv
  --- music
  --- books
software 
  --- drivers
  --- installers
disk image backups
development
  --- tools
  --- projects
user non-public data
  --- user1's non-public data
  --- user2's non-public data
ESXi VM store

Os diretórios de nível superior acima são divididos fisicamente em diferentes pontos de montagem / sistemas de arquivos, porque estou usando o ZFS e colocando dados em diferentes conjuntos de dados para que eu possa ajustar melhor as propriedades do samba do ZFS +. Por exemplo, todos os arquivos de vídeo + áudio são mantidos em um conjunto de dados porque são muito grandes no total, mas provavelmente não serão bem despendidos (eles simplesmente desperdiçam RAM); drivers, software e imagens de disco estão em um conjunto de dados separado, porque os testes mostram que eles têm uma taxa de desduplicação muito alta e os benefícios de economia de espaço são muito valiosos; separar dados privados e não privados em conjuntos de dados diferentes pode simplificar a segurança (?); e alguns diretórios pequenos precisam de várias cópias extras ou configurações diferentes de instantâneos.

Dito isso, quero que cada usuário veja uma estrutura lógica unificada (conforme apropriado para eles) em vez da estrutura física, o que significa que eles veem media e software como dois diretivos de nível superior no mesmo compartilhamento de raiz. não dois compartilhamentos separados, embora eles residam fisicamente em diferentes sistemas de arquivos. Assim, o compartilhamento de raiz que um usuário acessa quase certamente conterá links simbólicos suaves ou similares (nullfs?) Para fazer isso.

Eu não preciso pensar muito sobre diretórios de nível inferior, uma vez que os diretórios de nível superior estão configurados. O único controle que planejo está nos diretórios de nível superior e, em alguns casos, dirs de segundo nível (por exemplo, para subdiretórios de dados particulares de usuários individuais). Abaixo desse nível, são sempre herdadas as permissões "same as parent", com os dados no mesmo volume, de forma que podem ser quase ignorados.

As permissões, uma vez configuradas, devem ser simples: em princípio, configurarei manualmente quaisquer permissões permanentes no punhado de dirs de nível superior (e links simbólicos para diretivas de nível superior) quando configuro o sistema de arquivos / usuários / grupos gerais e Em seguida, quaisquer subdiretórios e conteúdos herdarão à força essas permissões, para que os usuários não tenham nenhum conhecimento ou capacidade de definir permissões ainda mais. A maioria dos usuários não terá acesso ao shell, portanto, seu único acesso além dos compartilhamentos SMB será um backup rsync pré-configurado sobre o ssh usando authorized_keys para definir um comando de backup predefinido. Todos os dirs de dados são configurados para usar ACLs no estilo do Windows.

Com efeito, a lista de usuários é curta o suficiente para selecionar e escolher, para cada usuário, o que eles podem ver e modificar, e é prático fazê-lo individualmente. Tenho total liberdade para configurar links simbólicos ou relações de usuário / grupo, permissões unix e ACLs e links simbólicos. Mas fazê-lo elegantemente fará a diferença entre um sistema que é fácil de gerenciar e não precisa de mim muito contra um que cause dores de cabeça o tempo todo.

Eu sei quais pastas eu quero que os usuários vejam, e quais devem ter acesso readwrite ou read-only ou acesso transversal / não-traverse. O que eu quero fazer é, na verdade, implementar o que for necessário para cada usuário, para configurar quais pastas nos sistemas de arquivos de dados eles podem ver, e quais, que são leitura-gravação e quais são somente leitura, e o resto. Há muitas maneiras de fazer isso (configurar vários usuários e grupos? Perms + ACLs? Samba veto dirs? Symlinks? Mount union ou mount_nullfs se o samba e esses links simbólicos não funcionarem bem?); Eu não tenho experiência em como planejar isso no mundo unix, e estou preso.

Entre tentar planejar um sistema de arquivos que nunca usei antes e tentar descobrir o que é necessário para garantir que o acesso seja controlado (para que os usuários não possam "escapar" de seus diretórios permitidos usando "../" ou semelhante ), Agora estou preso.

Existem toneladas de recursos sobre como as permissões e os sistemas de arquivos funcionam funcionalmente , mas nada que eu possa encontrar sobre como planejar e configurar um servidor de arquivos básico multiusuário layout de dados e as conseqüências das "maneiras diferentes de alcançar o mesmo / resultado similar" ao fazê-lo.

Como um administrador de sistemas experiente o abordaria?

    
por Stilez 11.03.2017 / 20:07

0 respostas