GNU/Linux - Permissões em partição NTFS
4 de fev de 2018 - Paulo Dias
Nesse artigo quero escrever sobre como habilitar permissões em uma partição NTFS compartilhada entre o GNU/Linux e o Windows.
É bem comum encontrar o ambiente onde o GNU/Linux e o Windows estão instalados na mesma máquina, usando uma terceira partição para arquivos comuns que precisam ser acessados a partir dos dois sistemas.
Como o Windows não oferece suporte nativo aos sistemas de arquivos do mundo Unix-like, a partição de arquivos geralmente é formatada em NTFS. Assim, tanto o GNU/Linux quanto o Windows conseguem ter acesso aos arquivos. Nas distribuições GNU/Linux os sistemas de arquivos mais comuns são as versões/upgrades do EXT( Exemplo: EXT4 ), mas é possível utilizar o drive NTFS-3G para suportar o sistema de arquivos NTFS.
Visto que o foco desse artigo é apenas configurar o uso de permissões em uma partição NTFS, vou iniciar supondo que a partição já está criada. Estou utilizando o Windows 10 e o Ubuntu 16.04, mas tudo deve funcionar normalmente com o Windows 7/8 e com outras distribuições do GNU/Linux.
Quando a partição é criada e configurada da forma padrão é possível ler e escrever nela a partir de qualquer um dos dois sistemas. Porém, não é possível utilizar permissões de arquivos e pastas no GNU/Linux, ou seja, os comandos chmod e chown não funcionam... Por exemplo, veja o que acontece com o arquivo teste:
paulo@paulo-notebook:~$ sudo mount /dev/sda7 /mnt/d
paulo@paulo-notebook:~$ cd /mnt/d
paulo@paulo-notebook:/mnt/d$ > teste
paulo@paulo-notebook:/mnt/d$ ls -l teste
-rwxrwxrwx 1 root root 0 Fev  4 21:39 teste
paulo@paulo-notebook:/mnt/d$ chmod 750 teste
paulo@paulo-notebook:/mnt/d$ chown paulo:paulo teste
Perceba que mesmo usando os comandos chmod e chown nem as permissões, nem o dono e o grupo foram alterados. Isso acontece com qualquer arquivo dessa partição, por padrão todos arquivos serão do usuário root, com o grupo root e com todas as permissões ativadas( 777 ).
Para alterar esse comportamento é possível passar opções diferentes do defaults para montar a partição, por exemplo, o dono, o grupo e as permissões de montagem podem ser alteradas respectivamente pelas opções uid, gid e umask, assim:
paulo@paulo-notebook:~$ sudo umount /mnt/d
paulo@paulo-notebook:~$ sudo mount -o uid=paulo,gid=paulo,umask=022 /dev/sda7 /mnt/d
paulo@paulo-notebook:~$ ls -l /mnt/d/teste
-rwxr-xr-x 1 paulo paulo 0 Fev  4 21:39 /mnt/d/teste
Obs.: A opção umask é utilizada para arquivos e pastas, mas podem ser utilizadas as opções fmask e dmask para configurar valores de umask diferentes para arquivos e pastas.
Essas opções são interessantes, mas os comandos chmod e chown ainda não podem ser utilizados porquê as permissões continuam sendo fixas.
Para realmente habilitar o uso de permissões é utilizada a opção de montagem permissions, dessa maneira:
paulo@paulo-notebook:~$ sudo mount -o permissions /dev/sda7 /mnt/d
paulo@paulo-notebook:~$ sudo su -
root@paulo-notebook:~# ls -l /mnt/d/teste
-rwx------ 1 root root 0 Fev  4 21:39 /mnt/d/teste
root@paulo-notebook:~# chmod 755 /mnt/d/teste
-rwxr-xr-x 1 root root 0 Fev  4 21:39 /mnt/d/teste
root@paulo-notebook:~# umount /mnt/d
root@paulo-notebook:~# mount -o permissions /dev/sda7 /mnt/d
root@paulo-notebook:~# chown paulo:paulo /mnt/d/teste
A opção permissions permite utilizar os comandos chmod e chown de forma adequada. Além disso, a opção permissions também habilita a compatibilidade entre as permissões do GNU/Linux com as permissões do Windows.
Veja que após o comando mount foi exibida a mensagem "Using default user mapping", isso acontece porquê o arquivo responsável pelo mapeamento entre os usuários do GNU/Linux e do Windows não foi encontrado. Por padrão, o arquivo de mapeamento deve ficar na raiz da partição em .NTFS-3G/UserMapping com o conteúdo semelhante a esse:
# id_usuario_gnulinux:id_grupo_gnulinux:sid_usuario_windows
0:0:S-1-5-21-494949499-1616161616-1717171717-500
1000:1000:S-1-5-21-494949499-1616161616-1717171717-1001
Para criar o mapeamento pode ser o usado o comando ntfs-3g.usermap no GNU/Linux, dessa forma:
paulo@paulo-notebook:~$ sudo umount /dev/sda7
paulo@paulo-notebook:~$ sudo ntfs-3g.usermap /dev/sda7
paulo@paulo-notebook:~$ sudo mkdir /mnt/d/.NTFS-3G/
paulo@paulo-notebook:~$ sudo mv UserMapping /mnt/d/.NTFS-3G/
Também é possível criar o mapeamento coletando as informações dos usuário de forma manual, usando os comandos getent passwd no GNU/Linux e wmic useraccount get name,sid no Windows.
Com o mapeamento criado, quando a partição for montada novamente a mensagem "Using default user mapping" não deve ser exibida.
Assim, as permissões vão funcionar normalmente no GNU/Linux e serão adaptadas quando a partição for acessada pelo Windows. O contrário também vai acontecer, permissões configuradas no Windows serão adaptadas para as permissões do GNU/Linux.
Obs.: Como o sistema de permissões usado no Windows( ACL ) é mais especifico que o sistema padrão do GNU/Linux( POSIX ), algumas permissões podem ser generalizadas.