(Como) posso criar um tmpfs como um usuário regular (não-root)?

31

A distribuição é um servidor Ubuntu executando o kernel Linux 2.6.35-30.

Eu gostaria de ter um diretório que fica totalmente na memória. Isso é possível sem privilégios de root?

    
por bitmask 08.12.2011 / 23:23

4 respostas

39

O Linux fornece um dispositivo tmpfs que qualquer usuário pode usar, /dev/shm . Ele não é montado em um diretório específico por padrão, mas você ainda pode usá-lo como um.

Basta criar um diretório em /dev/shm e, em seguida, criar um link simbólico para onde você quiser. Você pode dar ao diretório criado qualquer permissão que você escolher, para que outros usuários não possam acessá-lo.

Este é um dispositivo suportado por RAM, então o que está lá está na memória por padrão. Você pode criar todos os diretórios necessários dentro de /dev/shm

Naturalmente, os arquivos colocados aqui não sobreviverão a uma reinicialização e, se a sua máquina iniciar a troca, /dev/shm não o ajudará.

O Solaris paralelo a /dev/shm é /tmp , que é uma partição do tipo "swap" e também baseada em memória. Assim como com /dev/shm , usuários arbitrários podem criar arquivos em /tmp no Solaris.

O OpenBSD também tem a capacidade de usar uma montagem baseada em memória, mas não possui uma disponível por padrão. O comando mount_mfs está disponível para o superusuário.

Não tenho certeza sobre outros * BSDs.

    
por 08.12.2011 / 23:31
9

Seu sistema pode ter um já disponível; sistemas Linux recentes baseados em Glibc sempre tem um tmpfs montado em /dev/shm .

Se o seu sistema não tem um ou é muito pequeno, então um sistema de arquivos não montado pelo root significa FUSE . No Ubuntu, você precisa estar no grupo fuse para usar o FUSE. Procurando por sistemas de arquivos FUSE disponíveis , vejo apenas Ramfuse , que infelizmente é abandonado pelo autor.

    
por 08.12.2011 / 23:40
4

O uso de / dev / shm é inseguro em sistemas com troca ativa . As chances são muito altas que seu computador tenha ativado.

Existe uma alternativa melhor e segura - ramfs . Você pode querer usar ramfs se você planeja usar espaço suportado por RAM para armazenar dados confidenciais, como chaves privadas, carteiras Bitcoin ou Ethereum e assim por diante.

ramfs é melhor que tmpfs quando a segurança é crucial, pois ramfs data nunca é trocado (salvo em um disco físico), enquanto tmpfs pode ser trocado. Terceiros, em seguida, podem inspecionar o espaço de troca e extrair dados confidenciais .

A solução:

Você pode preparar ramfs mount para que qualquer usuário não privilegiado possa montá-lo / desmontá-lo sob demanda. Para fazer isso, você precisará do privilégio de root uma vez. Peça ao seu administrador para configurar isso para você, se você não tiver privilégios de root.

Primeiramente, você precisa adicionar uma linha ao /etc/fstab . A linha no fstab pode ser assim:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfs é um ponto de montagem, onde o sistema de arquivos ramfs será montado. Diretório deve existir.
  • A opção noauto impede que isso seja montado automaticamente (por exemplo, na inicialização do sistema)
  • user torna isso montável por usuários comuns
  • size define esse tamanho de "ramdisk"
  • mode é muito importante, com o código octal 0770 only root e o usuário, que montou este sistema de arquivos, poderá ler e escrever nele, não os outros (você pode usar código diferente de sua escolha também, mas tenha certeza disso)

Quando isso for feito, qualquer usuário poderá montar isso sob demanda.

Quando um usuário monta isso, o novo sistema de arquivos de 1024 MB de ramfs é criado em /mnt/ramfs/ . Ele será de propriedade de root:user . Uma vez que ele / ela desmonta, ou o sistema é reinicializado, o sistema de arquivos desaparece com todos os seus dados.

Além disso, este sistema de arquivos pode ser montado por vários usuários independentemente, mas não ao mesmo tempo, ou seja, para estar pronto para montagem pelo próximo usuário, o usuário anterior deve desmontar este sistema de arquivos ramfs.

para montar:

mount /mnt/ramfs/

para desmontar:

umount /mnt/ramfs/

P.S. Se você estiver tentando rsync arquivos na raiz dos ramfs recém-montados / criados como um usuário não raiz, poderá enfrentar um erro rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1] . Isso ocorre porque seu usuário não possui a raiz do sistema de arquivos da RAM. A solução é simples, apenas crie um diretório lá, /mnt/ramfs/copied/ por exemplo e rsync para ele.

    
por 23.11.2016 / 13:34
3

Em geral, não, os sistemas de arquivos só podem ser montados pelo root. Se você permitir que um usuário coloque sistemas de arquivos arbitrariamente, isso é essencialmente dar a eles root. (Modo fácil: monte um sobre / etc, coloque seu próprio passwd e shadow lá, su com a nova senha root que você acabou de criar, desmonte)

Se você quer um tmpfs em um local específico, você poderia adicioná-lo a /etc/fstab , com os sinalizadores de noauto,user e, em seguida, um usuário seria capaz de montá-lo (mas não é particularmente claro por que você não apenas montá-lo automaticamente)

Se os usuários precisarem de tmpfs arbitrários, você tem algumas opções:

  • usa subdiretórios de um tmpfs. Provavelmente a melhor abordagem. Você provavelmente não precisa mais de um tmpfs.
  • crie um script que crie um diretório e monte um tmpfs sobre ele e, em seguida, imprima onde ele foi colocado. Use sudo para permitir que os usuários o executem. Certifique-se de que você não permite que o usuário escolha caminhos arbitrários.
por 08.12.2011 / 23:36