Por que a montagem requer privilégios de root?

50

Por que o Linux exige que um usuário seja root / usando sudo / especificamente autorizado por montagem para montar algo? Parece que a decisão de permitir que um usuário monte algo deve basear-se em seus direitos de acesso ao volume de origem / compartilhamento de rede e ao ponto de montagem. Alguns usos para a montagem não raiz estão montando imagens do sistema de arquivos para uma direção de propriedade do usuário e montando um compartilhamento de rede em um diretório de propriedade do usuário. Parece que se o usuário tiver controle sobre os dois lados da equação de montagem, tudo deve ser legal.

Esclarecimento da restrição de acesso:

Eu sinto que deveria ser capaz de montar qualquer coisa que o usuário teria acesso a um ponto de montagem do qual o usuário é o proprietário.

Por exemplo, no meu computador / dev / sda1 é de propriedade do usuário root e do disco de grupo com permissões brw-rw---- . Portanto, usuários não-root não podem mexer em / dev / sda1 e montar claramente não devem permitir que eles montem. No entanto, se o usuário possuir / home / my_user / my_imagefile.img e ponto de montagem / home / my_user / my_image / por que eles não poderão montar esse arquivo de imagem nesse ponto de montagem com:

mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop

Como kormac apontou, há um problema suíno. Portanto, algumas restrições teriam que ser adicionadas para evitar que o suid seja um problema, bem como potencialmente alguns outros problemas. Talvez uma maneira de fazer isso seja fazer com que o sistema operacional trate todos os arquivos como pertencentes ao usuário que fez a montagem. No entanto, para leitura / gravação / execução simples, não vejo por que isso seria um problema.

Caso de uso:

Eu tenho uma conta em um laboratório onde meu espaço em casa é restrito a 8 GB. Isso é minúsculo e muito, muito chato. Eu gostaria de montar um volume nfs do meu servidor pessoal para aumentar essencialmente a quantidade de espaço que eu tenho. No entanto, como o Linux não permite tais coisas, eu fico com arquivos scp'ing para trás e para ficar abaixo do limite de 8GB.

    
por CrazyCasta 17.02.2013 / 01:04

7 respostas

33

É uma restrição histórica e de segurança.

Historicamente, a maioria das unidades não era removível. Por isso, fazia sentido restringir a montagem a pessoas com acesso físico legítimo e, provavelmente, teriam acesso à conta raiz. As entradas do fstab permitem que os administradores deleguem a montagem para outros usuários para unidades removíveis.

Do ponto de vista da segurança, há três grandes problemas em permitir que usuários arbitrários montem dispositivos de bloco arbitrários ou imagens do sistema de arquivos em locais arbitrários.

  • A montagem em um local que não pertence obscurece os arquivos nesse local. Por exemplo: monte um sistema de arquivos de sua escolha em /etc , com um /etc/shadow contendo uma senha root que você conhece. Isso é corrigido permitindo que um usuário monte um sistema de arquivos apenas em um diretório que ele possui.
  • Os drivers do sistema de arquivos muitas vezes não foram testados tão completamente com o sistema de arquivos malformado. Um driver de sistema de arquivos com bugs pode permitir que um usuário que forneça um sistema de arquivos malformado injete código no kernel.
  • Montar um sistema de arquivos pode permitir que o montador faça com que alguns arquivos apareçam que ele não teria permissão para criar. Os arquivos executáveis e de dispositivo do Setuid são os exemplos mais óbvios, e são corrigidos pelas opções nosuid e nodev , que estão implícitas por ter user in /etc/fstab .
    Até agora, aplicar user quando mount não é chamado pela raiz é suficiente. Mas, em geral, ser capaz de criar um arquivo pertencente a outro usuário é problemático: o conteúdo desse arquivo pode ser atribuído pelo proprietário em vez do montador. Uma cópia casual de preservação de atributos por raiz para um sistema de arquivos diferente produziria um arquivo pertencente ao proprietário declarado, mas não envolvido. Alguns programas verificam se uma solicitação para usar um arquivo é legítima, verificando se o arquivo pertence a um usuário específico, e isso não seria mais seguro (o programa também deve verificar se os diretórios no caminho de acesso pertencem a esse usuário; se a montagem arbitrária for permitida, eles também deverão verificar se nenhum desses diretórios é um ponto de montagem em que a montagem não foi criada nem pela raiz nem pelo usuário desejado).

Para fins práticos, é possível montar um sistema de arquivos sem ser root, através do FUSE . Os drivers FUSE são executados como usuário de montagem, portanto, não há risco de escalonamento de privilégios explorando um bug no código do kernel. Os sistemas de arquivos FUSE só podem expor arquivos que o usuário tenha permissão para criar, o que resolve o último problema acima.

    
por 17.02.2013 / 13:14
22

Se um usuário tiver acesso de gravação direta a um dispositivo de bloco, e podem montar esse dispositivo de bloco, eles poderão gravar um executável suid no dispositivo de bloco, montá-lo e executá-lo, e assim, obter acesso root ao sistema. É por isso que a montagem é normalmente restrita ao root.

Agora o root pode permitir que usuários normais montem com restrições específicas, mas ele precisa se certificar de que, se o usuário tiver acesso de gravação ao dispositivo de bloco, que o mount desaprove suid e também devnodes, que possuem um problema semelhante o usuário pode criar um devnode que lhes dê acesso de gravação a um dispositivo importante ao qual eles não deveriam ter acesso de gravação).

    
por 17.02.2013 / 05:26
8

Nem sempre requer super privs. De man mount

   The non-superuser mounts.
          Normally,  only  the  superuser can mount filesystems.  However,
          when fstab contains the user option on a line, anybody can mount
          the corresponding system.

          Thus, given a line

                 /dev/cdrom  /cd  iso9660  ro,user,noauto,unhide

          any  user  can  mount  the iso9660 filesystem found on his CDROM
          using the command

                 mount /dev/cdrom

          or

                 mount /cd

          For more details, see fstab(5).  Only the user  that  mounted  a
          filesystem  can unmount it again.  If any user should be able to
          unmount, then use users instead of user in the fstab line.   The
          owner option is similar to the user option, with the restriction
          that the user must be the owner of the special file. This may be
          useful e.g. for /dev/fd if a login script makes the console user
          owner of this device.  The group option  is  similar,  with  the
          restriction  that  the  user  must be member of the group of the
          special file.
    
por 17.02.2013 / 01:33
5

Kormac e outros indicaram que esse não é o dilema que você apresenta; parece-me que isso se resume à filosofia de explicitamente conceder privilégios aos usuários vs. um sistema pelo qual todos os usuários teriam o direito imutável para montar um sistema de arquivos.

Gilles aborda alguns dos problemas de segurança associados à montagem de sistemas de arquivos. Evitarei retroativamente uma discussão prologada e tangencial sobre possíveis problemas técnicos relacionados a isso (veja os comentários), mas acho que é justo que usuários não confiáveis não tenham o direito imutável de montar discos rígidos.

O problema com relação aos sistemas de arquivos virtuais e remotos (ou sistemas de arquivos remotos via sistemas de arquivos virtuais, como o FUSE) é menos significativo, mas isso não resolve a questão de segurança (embora o FUSE possa resolver seu problema). Também é importante considerar que os dados em tais sistemas de arquivos quase sempre podem ser acessados sem a necessidade de montar um dispositivo, seja através de transferência de arquivos ou ferramentas que extraem imagens sem montagem, portanto um sistema que não permite montar algo não representa um problema insuperável no que diz respeito ao acesso a dados que você colocou de forma bizarra em um arquivo de imagem, ou (mais compreensivelmente) deseja obter de um sistema remoto. Se você tiver uma situação em que não é esse o caso, pode valer a pena perguntar:

  1. O que exatamente estou tentando fazer?

  2. Onde estou tentando fazer isso?

Se a administração do sistema for justa, então # 2 explica por que # 1 é impossível para você. Se a administração do sistema não é justa, isso é política . A solução para o problema, "Meu sistema de administração não é justo", não é redesenhar o sistema operacional para que os administradores de sistema em todos os lugares não possam restringir os usuários.

O sistema permite que o super usuário restrinja suas atividades, seja explicitamente ou por omissão ("Nós não fornecemos FUSE", etc). Privilégios são um mecanismo por meio do qual isso é realizado. Pode não ser bom ser dito: "Você não precisa fazer isso", mas se for verdade ... que sera ... você não precisa fazer isso. Use ftp, etc. Se não for verdade, você deve incomodar os responsáveis.

    
por 17.02.2013 / 02:16
5

FYI: Os kernels mais recentes têm suporte a "namespace". Usuários comuns podem criar um namespace e, dentro desse namespace, tornar-se root e fazer coisas divertidas como montar sistemas de arquivos.

No entanto, ele não concede permissões "reais" de superusuário. Você só pode fazer o que já tem permissão para fazer (ou seja, só é possível montar dispositivos que você já pode ler).

link Veja a seção 4.

    
por 17.02.2013 / 04:30
0

Como os dados no sistema de arquivos que eles pretendem montar podem comprometer a segurança do servidor ou até travá-lo (se ele foi intencionalmente construído dessa maneira).

    
por 17.02.2013 / 01:42
0

No GNOME, o gvfs não requer root para montar sistemas de arquivos remotos (ftp ou ssh) e o gnome-mount também não precisa de root para montar armazenamento externo (drive usb, CD / DVD, etc).

A maioria dos sistemas provavelmente não gostaria de ter todo o GNOME apenas para uma montagem remota, então você pode usar lufs , < href="http://fuse.sourceforge.net/sshfs.html"> sshfs ou ftpfs .

gvfs, lufs, sshfs e ftpfs usam o FUSE para permitir que usuários não-root montem o sistema de arquivos virtual; e, diferentemente do -o user do mount, o FUSE não exige que o sysadmin organize montagens específicas. Contanto que você tenha o privilégio para o diretório de montagem e para quaisquer recursos que sejam necessários para construir o sistema de arquivos, você pode criar a montagem do FUSE.

Why does mount require root privileges?

Porque mount é principalmente / originalmente destinado ao sistema de arquivos local, que quase sempre envolve um hardware.

    
por 17.02.2013 / 12:51