Limitar quantidade de armazenamento destinado para cada usuário

Olá pessoal!
Já andei procurando aqui no fórum e pela internet também, mas até agora não encontrei nada que pudesse me ajudar.
Queria saber se é possível e se sim, como fazer, para limitar a quantidade de armazenamento para determinado usuário.
Suponhamos que uma máquina rodando linux é usada por quatro usuários: um com permissões especiais (sudo) e não teria limite de armazenamento. Mas digamos que eu quisesse limitar para que os outros usuários tivessem apenas 10GB destinados para a sua home.
Ps.: Partições individuais para cada um não seria muito viável. Queria saber se tem como fazer isso por outro meio.
E pra completar, se fosse possível, que outros possíveis limitações eu poderia determinar para estes usuários a fim de limitar seu uso ao sistema (considere-os como usuários dos mais básicos possível).

Agradeço! :v: :wink:

Sim, é possível estabelecer limites para uso do disco:

https://wiki.archlinux.org/index.php/Disk_quota

Uma limitação relativamente comum e fácil de ser feita, se o “/home” for separado, é desabilitar a execução de programas lá, minimizando a possibilidade de execução de programas fora das árvores administradas pelo usuário da raiz (principalmente “/usr”, mas possivelmente “/opt”). Basta utilizar a opção “noexec” para a partição ou volume do “/home” no arquivo “/etc/fstab”. A ArchWiki também tem informações sobre isso ao abordar uma série de outras medidas de segurança:

https://wiki.archlinux.org/index.php/security

Seria possível ainda estabelecer grupos para determinados programas, de forma que, se o usuário não pertence a um determinado grupo, ele não consegue abri-lo.

Finalmente, há ainda a opção de você configurar um gerenciador de janelas com pouca coisa liberada, se for o caso. Dependendo da sofisticação do gerenciador de janelas, você também poderia usar grupos ou técnicas de scripting para configurar determinados aspectos da experiência, conforme o tipo do usuário.

2 Curtidas

Já dei uma lida por alto nos links que você mando @knimer, vou procurar ler bem mais a fundo ainda. Mas pelo que vi no primeiro, teria que ter a home em uma partição separada. Se não me engano isso seria o “/home” e a home de cada usuário seria “/home/user1”, “/home/user2”, “/home/user3”… Desta forma a limitação não seria aplicada a todos os usuários, incluindo aquele que não deveria ter limitações?
Ou poderia criar um determinado cenário onde teria uma partição destinada para a home do usuário “privilegiado” e outra partição que poderia receber estas restrições destinada para as “homes” dos outros usuários?

Você pode colocar o usuário privilegiado em outra árvore, ele não precisa ficar no /home. Vai fugir do padrão apenas. Mas o “noexec” no fstab é apenas uma possibilidade.

Qual é a distribuição? É o Arch mesmo?

1 Curtida

Seria meio que uma ideia genéria. No arch sim, mas se possível, algo que eu pudesse aplicar no ubuntu ou até em outras distros.

Muitas das ideias são aplicáveis em outras distros e outros sistemas do mundo Unix. Evidentemente, podem existir variações no particionamento, na existência de camadas extras para controle de acesso (SELinux ou AppArmor) e por aí vai.

Quanto mais claro o cenário, mais fácil pra desenhar o sistema. Eu separo meu /home e ainda tenho volumes separados no /mnt para arquivos, máquinas virtuais, snapshots do Back In Time e mais outras coisas.

Eu perguntei sobre a distro porque eu acho que varia a forma de aplicar permissões e grupos conforme a distro, para que sejam aplicadas respeitando o empacotamento, de forma que uma atualização não quebre as permissões definidas.

1 Curtida

Beleza… Vamos simular então um cenário com o Ubuntu. Assim teste em uma VM os procedimentos.

Chama “quota” essa tecnologia é do filesystem.
Eu acho que o ext4 tem mais o Btrfs é certeza.
Eu não sei como faz para manipular a “quota”.

Pelo que lê agora em: Quota - Ext4
O Ext4 tem a tecnologia “quota” e para funcionar é preciso que essa tecnologia tenha sido habilitado no kernel durante a compilação.
Verifica também se precisa instalar algum programa extra para manipular a “quota” o link que o @knimer mandou diz que precisa do pacote " quota-tools".
Já o link que eu enviei do Ext4 diz “e2fsprogs 1.42” esse programa é o que gera o filesystem verificar se o filesystem foi feito com esse software com igual versão ou superior esse programa é do Ext4 não confunda com Btrfs.
Também diz que a "quota deve estar habilitado no “e2fsprogs” na compilação.
A versão mínima do kernel deve ser 3.6.
Eu não tenho conhecimento para ajudar além, espero que apareça alguém que sabe manipular quota para te ajudar mais.

Agora sobre o Btrfs.
Verifica qual filesystem você usa e proceda conforme cada um foi documentado Quota support - btrfs Wiki.

2 Curtidas

Definir cotas para usuários é algo que pode ser feito desde o ext2. O Ubuntu, pelo que me lembro, instala por padrão com ext4. Pelo que olhei em um artigo voltado para o Ubuntu, o nome não é “quota-tools” como no Arch, é apenas “quota” (aqui no openSUSE é apenas “quota” também).

Sobre a questão de definir quota por diretório, eu acredito que isso é possível no XFS, usando o comando xfs_quota num sistema-de-arquivos montado com a opção desejada, a saber:

  • quota: todo o sistema-de-arquivos
  • gquota: grupos específicos
  • prjquota: projetos específicos

Encontrei aqui alguns exemplos interessantes para o XFS.

Reforço a importância de ler a documentação (se possível, a oficial), principalmente as páginas de manuais. Nunca rodar nenhum comando sem antes conferir o que cada flag/parâmetro faz usando o comando man ou o comando info (se for o caso da documentação estar em Texinfo).

Se tem uma coisa legal de fazer no Linux, é aplicar restrições.

1 Curtida

Valeu mesmo galera… Irei olhar mais a fundo os links os senhores me enviaram! Mas com certeza, já me ajudaram, me deram o norte da coisa.
Fico muito grato pela ajuda de vocês @aguamole e @knimer!
Assim que tiver uma conclusão postarei aqui o cenário e os procedimentos usados nela.

Mas claro, ainda fica em aberto pra quem quiser dar mais alguma ajuda, afinal, conhecimento é sempre bem vindo!

Mais uma vez, muito obrigado a todos!

1 Curtida