Como desabilitar as gravações de arquivos locais?

1

Eu mantenho um computador público compartilhado. Todo usuário tem seu próprio diretório em /home . Não gostamos de fazer /home uma montagem de rede porque leva muito tempo para que novos usuários façam login, mas gostaríamos de configurá-la para que os usuários não possam gravar em seus diretórios /home . Temos armazenamento de rede disponível para os usuários que eles devem usar, mas não temos como forçá-los a usá-lo.

Idealmente, eu quero impedir que eles gravem dados na máquina local, em vez disso, direcionando-os para gravar no servidor de armazenamento. Se isso não for possível, eu gostaria de limitar a cota de disco deles na máquina local para que eles não consumam todo o espaço. Como posso fazer isso?

    
por sciforgoodlife 26.07.2014 / 07:16

1 resposta

5

Você pode criar limites por diretório, montando arquivos de imagem do sistema de arquivos em subdiretórios em /home . Isso não desabilitará /home , mas resolverá seu problema na medida em que evitará que as pessoas escrevam mais do que um valor fixo.

Um arquivo de imagem do sistema de arquivos funciona assim:

  1. Crie um arquivo vazio de tamanho fixo, por exemplo 100 MB:

    dd if=/dev/zero of=/var/home/bob.img bs=1024 count=100000
    

    Você não precisa usar /var/home para estes; é um diretório que de outra forma não existiria. Esses arquivos devem ter o root e o modo de configuração 600 para que ninguém mais possa lê-los. Certifique-se, obviamente, de que você tem espaço para criar um arquivo de 100 MB para cada usuário, mas lembre-se de que você poderá eliminar tudo em /home ao mesmo tempo e liberar esse espaço.

  2. Crie um sistema de arquivos na imagem:

    mke2fs -m 0 /var/home/bob.img
    

    Isso avisará você que bob.img is not a block special device - continue assim mesmo.

    Na primeira vez que você fizer isso, presumivelmente você deseja copiar na casa existente do usuário, então você terá que montá-lo temporariamente:

    mount /var/home/bob.img /mnt/tmp
    mv /home/bob/* /mnt/tmp
    mv /home/bob/.* /mnt/tmp
    

O último perguntará se você deseja substituir . e .. . Não. É apenas para mover arquivos de ponto "ocultos" no nível superior, que o primeiro mv terá deixado para trás. Você também pode usar um filebrowser ou algum outro método para fazer a mudança. /home/bob agora deve estar vazio e você pode mover a imagem montada para lá:

    umount /mnt/tmp
    mount /var/home/bob.img /home/bob
Voila, tudo parece estar de volta do jeito que estava - exceto /home/bob agora é um sistema de arquivos independente, e o usuário bob não será capaz de colocar mais de 100 MB nele . Além disso, como é um arquivo de imagem existente, esse espaço será reservado para bob e não será ocupado com mais nada.

Você precisará de um serviço init para montar todos eles no momento da inicialização; poderia ser tão simples como:

#!/bin/bash

for img in /var/home/*.img; do
    name=$(basename $img .img)
    mount $img "/home/$name"
done

Eles devem ser desmontados automaticamente quando o sistema for desligado. Os dados são tão seguros quanto em qualquer outro lugar.

    
por 26.07.2014 / 10:56