Esse é o problema com sistemas multiusuários, especialmente se você tiver mais de um deles. ;) Não há nenhuma maneira realmente de fazer o que você quer. Abordagens que vêm à mente seriam
- ter o mesmo UID para sua conta em todas as máquinas que você estiver 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 sem saber do proprietário / conecpt do grupo (FAT ou NTFS vem à mente, mas… aaah, no)
A abordagem mais eficaz seria voltar às práticas comuns. Na maioria (pelo menos) dos sistemas Linux, existem alguns grupos que têm geralmente GIDs comuns. No exemplo, seria users
, que tem GID 100
na maioria das distros Linux. Se você conseguisse ter sua respectiva conta de usuário nesse grupo, poderia
- cria todos os arquivos e diretórios em sua unidade de propriedade desse grupo
- de alguma forma conseguem ter permissões de grupo apropriadas nesses arquivos e diretórios
- de alguma forma conseguem ter novos arquivos criados com resp. permissões.
Primeiro e 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 diz ao kernel para se comportar de uma maneira BSDish: O BSD faz com que todo arquivo / diretório criado sob um diretório específico pertencente ao grupo principal do processo crie o arquivo / diretório (como o Linux faz), mas pelo proprietário do diretório pai.
O bit de permissão é um pouco difícil. Permissões de arquivos / diretórios recém-criados são (entre outros) influenciados pelo umask
, uma máscara de bits informando quais bits não serão definidos se não forem explicitamente declarados. Um valor comum de umask
, por exemplo, é 022
, o que significa que os bits de gravação para »grupo« e »outros« normalmente não devem ser definidos. Você poderia alterar o seu umask
para 002
, dizendo que você não quer que as permissões de gravação sejam limpas para o grupo, mas a desvantagem é que você não pode definir este valor baseado em diretório e geralmente não quer ter permissões de gravação para o seu grupo primário definido para cada arquivo criado.
Isso pode ser resolvido usando ACLs: em uma ACL, é possível definir um conjunto de permissões mask
e default
, que se aplica a todos os arquivos e diretórios criados dentro de um diretório com esse conjunto de ACLs. Então, uma possível solução do seu problema seria
- certificando-se de que você é um membro de um grupo comum em todos os sistemas em que deseja usar sua unidade externa em
- cria todos os arquivos e diretórios em sua unidade de propriedade desse grupo e define 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 digam ao kernel para criar todos os novos arquivos / diretórios com permissões de gravação definidas para o grupo.
Veja setfacl(1)
e acl(5)
para mais detalhes.