Posso portar permissões de usuário entre computadores para um disco rígido externo ext4?

16

Eu tenho uma unidade de disco externa USB 3 (capacidade de 2 TB) que provavelmente será movida de uma máquina para outra. O disco possui uma tabela de partição GUID e uma partição ext4. Não consigo gravar no disco, a menos que eleve o processo ( sudo).

A partir de agora, estou pensando em tentar um ou ambos dos itens a seguir e gostaria de saber os contras de cada um -

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

Se eu conceder permissão ao 777 e o usuário1 (UID: 1005) gravar nele, e posteriormente mover o disco para outro computador em que o usuário7 seja o UID: 1005, o que acontece? O usuário7 se torna o proprietário do arquivo nesse computador? Parece-me que periodicamente terei que executar chown -R nobody:nogroup /mnt/externalDriveno disco.

Alguma coisa que considero uma prática ruim óbvia? É provável que o disco contenha vídeos, músicas e imagens, nada disso precisa ser protegido como alguns dados financeiros.

Lorde Loh.
fonte
Eu não tenho certeza se eu te sigo. Você tentou definir as permissões na unidade externa?
Ramsh
11
Sim. Isso é uma coisa boa?
Senhor Loh.

Respostas:

19

Esse é o problema dos sistemas multiusuário, especialmente se você tiver mais de um deles. ;) Não há uma maneira muito legal de fazer o que você deseja. As abordagens que vêm à mente seriam

  • ter o mesmo UID da sua conta em todas as máquinas que você está usando sua unidade externa (na verdade, não é viável, pois provavelmente nem todas as máquinas estão sob seu controle)
  • usando um sistema de arquivos inconsciente do conceito de proprietário / grupo (FAT ou NTFS vem à mente, mas… aaah, não)

A abordagem mais eficaz seria voltar às práticas comuns. Na maioria (pelo menos) dos sistemas Linux, existem alguns grupos que geralmente têm GIDs comuns. Por exemplo seria users, que tem GID 100na maioria das distribuições Linux. Se você conseguir ter sua respectiva conta de usuário nesse grupo, poderá

  1. torne todos os arquivos e diretórios em sua unidade pertencentes a este grupo
  2. de alguma forma, gerenciar permissões de grupo apropriadas nesses arquivos e diretórios
  3. de alguma forma, conseguem criar novos arquivos com a respetiva propriedade de grupo apropriada. permissões.

O primeiro e o segundo ponto são fáceis de realizar ( chown, chmod). O terceiro ponto é um pouco mais complicado.

A parte "propriedade do grupo" é relativamente fácil: você pode definir o bit SGID em todos os diretórios da unidade. O bit SGID aplicado aos diretórios instrui o kernel a se comportar de uma maneira BSDish: O BSD faz com que cada arquivo / diretório criado em um grupo de diretórios específico seja de propriedade não do grupo principal do processo que cria o arquivo / diretório (como o Linux), mas pelo proprietário do diretório pai.

O bit de permissão é um pouco difícil. As permissões dos arquivos / diretórios recém-criados são (entre outros) influenciadas pelo umask, uma máscara de bits informando quais bits não devem ser definidos se não explicitamente declarados. Um umaskvalor comum, por exemplo 022, é o que significa que os bits de gravação para »group« e »others« não devem geralmente ser definidos. Você pode alterar umaskpara 002, dizendo que não deseja que as permissões de gravação sejam limpas para o grupo, mas a desvantagem é que você não pode definir esse valor com base em diretório e geralmente não deseja ter permissões de gravação para seu grupo principal definido para cada arquivo que você criar.

Isso pode ser resolvido usando ACLs: em uma ACL, você pode definir um maske um defaultconjunto de permissões, que se aplicam a todos os arquivos e diretórios criados dentro de um diretório com este conjunto de ACL. Portanto, uma possível solução do seu problema seria

  • certificando-se de que você é membro de um grupo comum em todos os sistemas em que deseja usar sua unidade externa.
  • torne todos os arquivos e diretórios em sua unidade pertencentes a este grupo e defina o bit SGID em todos os diretórios
  • altere a ACL de todos os diretórios para incluir uma máscara e permissões padrão que instruem o kernel a criar cada novo arquivo / diretório com permissões de gravação definidas para o grupo.

Veja setfacl(1)e acl(5)para mais detalhes.

Andreas Wiese
fonte
11
Havia uma mancha flutuante em torno de seu e mapeamento gid em ext4, spinics.net/lists/linux-fsdevel/msg57240.html , mas eu não acho que isso veio através de ...
Rmano
10

outra pergunta semelhante e o bindfs é sugerido aqui:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

Os usuários do OSX sugerem a noownersopção de montagem descrita desta forma:

Ignore o campo de propriedade para todo o volume. Isso faz com que todos os objetos apareçam como pertencentes ao ID do usuário 99 e ao ID do grupo 99. O ID do usuário 99 é interpretado como o atual ID do usuário efetivo, enquanto o ID do grupo 99 é usado diretamente e traduz como `` desconhecido ''.

Michael Shigorin
fonte
bindfs é bem lento. Provavelmente porque é um sistema de arquivos FUSE.
Navin
4

O proprietário e o grupo de um arquivo são armazenados como números. Portanto, o arquivo pertencerá a uid = 1005, independentemente de qual usuário (ou nenhum) que esteja no sistema ao qual está conectado.

Alterar o usuário / grupo para ninguém não solucionará seu problema. Somente o usuário de ninguém (ou membros do grupo de ninguém) teria permissão para acessar os arquivos.

Infelizmente, acho que não há uma maneira de desativar as verificações de permissão no ext4. Consulte, por exemplo, É possível desativar as permissões de arquivo em um sistema de arquivos ext3 ou ext4?

derobert
fonte
2

Andreas Wiese diz que, se você tiver um ID de grupo comum em todos os hosts, poderá resolver seu problema com setgidbit e ACL

Eu faço a pergunta IDs de grupo predefinidos nas distribuições Linux?

Depois que a própria pesquisa descobriu que esse grupo existe em todas as distros tocadas: sysID de compartilhamento de grupo 3no Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris.

Com isso:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

e sabor disso:

$ sudo adduser user sys

você userpoderá ler / gravar qualquer arquivo /dir.

A maioria dos trabalhos pode funcionar um setgidpouco, mas infelizmente você geralmente tem pouco controle umask. Portanto, o ACL é usado para fornecer uma solução completa.

Veja também:

gavenkoa
fonte