Como uso o 'chmod' em uma partição NTFS (ou FAT32)?

115

Eu tenho um script que preciso executar em uma partição NTFS. A permissão do script está definida para 600.

Eu tentei modificar as permissões executando chmod 755 script.sh , que não informa uma falha nem nada, mas também não altera as permissões no arquivo:

$ stat script.sh

  File: 'script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

$ chmod 755 script.sh
$ stat script.sh

  File: 'script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

Como você pode ver, permanece inalterado.

    
por Nathan Osman 07.11.2010 / 00:12
fonte

10 respostas

73

O modo é determinado pelas opções de montagem da partição (você não pode alterá-lo via chmod).

Para '755' nos arquivos e '777' nos diretórios você usaria algo como

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
    
por htorque 07.11.2010 / 00:35
fonte
75

Ao contrário do que a maioria das pessoas acredita, o NTFS é um sistema de arquivos compatível com POSIX, e é possível usar permissões no NTFS .

Para habilitar isso, você precisa de um "Arquivo de Mapeamento do Usuário" ou apenas dê a opção permissions ao montar (quando não for necessária compatibilidade com o Windows). Isso mapeia os usuários do Linux em seu sistema com os IDs do usuário, como NTFS / Windows, usando-os internamente.

Veja a página man do ntfs-3g para obter algumas informações e algumas exemplos. Se você precisar de mais informações, consulte a documentação avançada do ntfs-3g sobre propriedade e permissões .

(Observe que isso não funciona em sistemas de arquivos FAT).

¹ Sim, também pode armazenar nomes de arquivos que são válidos no linux / unix mas não no Windows, suporta links simbólicos & amp; hardlinks, etc.

    
por JanC 02.11.2011 / 17:57
fonte
33

Para partições NTFS, use a opção permissions no fstab.

Primeiro, desmonte a partição ntfs.

Identifique seu UUID de partição com blkid

sudo blkid

Em seguida, edite /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Adicione ou edite uma linha para a partição ntfs

# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0

Faça um ponto de montagem (se necessário)

sudo mkdir /media/windows

Agora monte a partição

mount /media/windows

As opções que eu lhe dei, auto , montarão automaticamente a partição quando você inicializar e users permitirá que os usuários montem e desmontem.

Você pode então usar chown e chmod na partição ntfs.

    
por Panther 28.12.2011 / 17:31
fonte
20

Além de definir o fmask e / ou dmask na resposta do htorque acima, se você quiser executar scripts na unidade, eu também tive que definir a opção de montagem "exec".

Então, o exemplo seria:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
    
por dbrews 14.12.2010 / 09:26
fonte
13

Você sempre pode invocar explicitamente o interpretador de script, caso em que as permissões de execução não são necessárias. Se o script usa bash , como pode ser verificado olhando a primeira linha do script, apenas execute

bash script.sh

Observe que o script chama outros scripts ou binários na mesma partição. Isso não funcionará. Note também que a estratégia não funciona com binários ao contrário dos arquivos de script textuais escritos em Bash Script, Perl, Python ou algo semelhante.

    
por loevborg 14.12.2010 / 11:00
fonte
8

De acordo com a seção Propriedade e permissões do NTFS-3G documentação, podemos usar opções de montagem para controlar o arquivo acesso e criação . As combinações são muito complicadas (veja as duas tabelas lá). Também não leio e obtenho todos eles. Por exemplo, não sei se as ACLs POSIX estão selecionadas em tempo de compilação ou não do pacote binário NTFS-3G. Mas o melhor que eu tenho feito é usar um arquivo Mapeamento de Usuários combinado com alguns arquivos de montagem opções para aproximar um mapeamento plausível de propriedade e permissões de arquivos entre o Windows e o Linux.

Aviso : Isso é apenas o que funciona melhor para o compartilhamento de uma partição de dados NTFS <(unidade D: no Windows) entre o Windows 8 e o Kubuntu 14.04. As instruções são registradas em retrospecção cuidadosa, mas não completamente testadas. É cansativo e tedioso demais repetir todo o procedimento novamente. Então siga por sua conta e risco. Mas se você fizer isso, compartilhe de volta sua experiência. Se você decidir seguir as instruções, leia-as por completo para ter uma imagem completa antes de realmente agir. Boa sorte!

Tudo bem, aqui vai você! As instruções detalhadas consistem em três partes. Parte 1 deve ser realizada no Windows enquanto a Parte 2 no Linux. A parte 3 é para teste.

Parte 1

A seção Mapeamento de usuários da documentação do NTFS-3G especifica duas versões para configurar o mapeamento de usuários entre o Windows e o Linux, uma versão do Windows e uma versão do Linux. Minha experiência foi que a versão do Linux acabou com um miss . A conta do Linux não foi mapeada para minha conta do Windows, mas uma conta desconhecida apareceu em um SID . O resultado foi uma bagunça, pois essa conta desconhecida se apropria de todos os arquivos da minha conta do Windows. Nessa situação, a menos que você tenha um privilégio administrativo para recuperar sua propriedade, os arquivos da sua conta do Windows ficam inacessíveis. Mas mesmo se você gerenciar, ainda é um mapeamento errado. Isso significa que, posteriormente, quaisquer arquivos que você criar no Linux serão atribuídos a essa conta desconhecida no Windows e aqueles no Windows serão atribuídos a root no Linux (se bem me lembro). Portanto, no Windows, você precisa assumir a propriedade novamente e no Linux alterar a propriedade. Não é isso que esperamos que seja. Depois de várias tentativas desesperadas de corrigir o problema, desisti e mudei para a versão do Windows. Aquele trabalhou. Instruções detalhadas extraídas da seção relevante da documentação do NTFS-3G seguem:

  1. Faça o download da ferramenta usermap , extraia-a em algum lugar (no meu caso, unidade C: ), melhor fora da partição NTFS (no meu caso, D: ) a ser compartilhada.

  2. Abra a linha de comando do Windows. Altere para o diretório extraído tools (por padrão) da ferramenta usermap . Em seguida, execute o seguinte comando:

    C:\tools> mapuser > UserMapping
    

    Isso gera um modelo e o redireciona para um arquivo chamado UserMapping . Abra o arquivo com um editor de texto, diga Bloco de Notas, você deverá ver as seguintes linhas:

    # Generated by usermap for Windows, v 1.1.5
    # For Windows account "Account" in domain "Domain"
    # Replace "user" and "group" hereafter by matching Linux login
    user::SID
    :group:SID
    

    Presumivelmente, o primeiro SID deve ser seu usuário SID enquanto o segundo seu grupo SID. Você pode verificá-los respectivamente pelos comandos whoami /user e whoami /groups .

  3. Depois de verificar se os SIDs estão corretos, siga as instruções do comentário, ou seja, altere user na linha user::SID para seu nome de usuário e group na linha :group:SID para o nome do seu grupo principal no Linux. No Ubuntu, eles são os mesmos. Além disso, adicione seu nome de grupo do Linux também após os dois primeiros pontos da linha user::SID . Portanto, a linha deve ser algo como user:group:SID . Parece que, se isso não for feito, os arquivos criados no Windows serão atribuídos a user:root no Linux.

  4. Salve o arquivo. Mova-o para um diretório chamado .NTFS-3G (crie-o, se ainda não existir) na partição NTFS a ser compartilhada (no meu caso, D: ).

  5. Esta etapa é para teste na Parte 3. Na partição NTFS compartilhada, crie um novo diretório e um novo arquivo.

Parte 2

Agora inicie no Linux. sudo edite o arquivo /etc/fstab . Adicione ou modifique a linha da partição NTFS compartilhada a algo como o seguinte:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0

O essencial é definir o umask ( dmask e fmask também podem funcionar, mas não testados). Escolha um valor para umask que você gosta, embora eu tenha escolhido 077 . Parece que sem essa configuração, permissões completas serão concedidas a o thers para arquivos recém-criados.

Salve o arquivo.Agora sudo mount ou remount ( sudo umount e depois sudo mount ) a partição NTFS compartilhada (no meu caso /data ):

$ sudo mount /data

Parte 3

Agora (ainda no Linux) cd para o ponto de montagem (no meu caso, /data ), ls -l dos arquivos lá. Verifique se a propriedade e as permissões correspondem, respectivamente, ao especificado no arquivo UserMapping e o umask definido em /etc/fstab (a correspondência entre as permissões e umask exige algum cálculo do complemento, consulte man (1) umask para mais informações). Se o fizerem, parabéns, meia meta é alcançada. Caso contrário, você é pobre. Pergunte ao Ubuntu ou ao Windows.

Em seguida, crie um novo diretório e um novo arquivo. ls -l para verificar a propriedade e as permissões. A propriedade deve ser seu nome de usuário e grupo principal, como de costume. As permissões devem corresponder ao umask . Agora reinicie seu computador e inicialize no Windows. Localize na partição NTFS compartilhada o diretório e o arquivo que você acabou de criar no Linux. Verifique suas propriedades para ver se elas estão atribuídas à sua conta do Windows. Se forem, parabéns, tudo está feito. Caso contrário, má sorte. Pergunte ao Windows ou ao Ubuntu.

EOF

    
por reflectionalist 23.08.2014 / 00:35
fonte
5

Discussão antiga, eu sei, mas ainda relevante e sem uma dica de caso específica, composta de sugestões diferentes em vários outros fóruns / threads e testada no Ubuntu GNOME 13.04 onde eu queria uma unidade externa para manter uma biblioteca Steam ...

Quando a partição NTFS está em uma unidade USB externa, por exemplo - o que significa que a partição é montada na hora da conexão - você pode usar o seguinte método para fazer partições ntfs do udev com direitos de execução.

Abra uma janela de terminal e faça:

$ sudo nano /etc/udev/rules.d/90-usb-disks.rules

Em seguida, cole esta linha no que deve ser um arquivo em branco / novo (se não, saia do nano e emita novamente o comando, mas iniciando o nome do arquivo com um número maior como 91 -...):

ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"

Em seguida, salve e feche. Desligue a unidade e faça no terminal:

$ sudo service udev restart

Em seguida, conecte a unidade de volta e aproveite:)

    
por user17254 15.09.2013 / 01:51
fonte
2

Todos os passos:

  1. Instale ntfs-3g :

    sudo apt-get install -y ntfs-3g
    
  2. Desmonte a partição NTFS :

    sudo umount /mnt/windows
    
  3. Use ntfs-3g.usermap para gerar seu arquivo UserMapping :

    sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
    

    ou

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Remonte a partição NTFS para adicionar UserMapping file:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Atualize seu arquivo fstab :

    sudo vim /etc/fstab
    

    Atualize a linha mount :

    1. Faça o backup da sua linha de montagem atual! Duplique a linha e comente adicionando um # no começo.
    2. Alterar em seguida: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Próximo: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Use ntfs-3g e apenas default opção)

    Deve ser algo assim:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0 UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. Por fim, remonte usando seu fstab :

    sudo umount /mnt/windows
    sudo mount -a
    

Faça isso uma vez para cada partição NTFS que você tem!

AVISO COM O SO DO WINDOWS!

Eu verifico com Windows 7 + e as permissões afetam o sistema operacional Windows! Eu mudo as permissões do meu Home Directory na partição Windows, e quando usei o Windows novamente pude ver que o usuário estava quebrado!

    
por Eduardo Cuomo 26.02.2017 / 15:49
fonte
1

Não há uma questão relacionada com dispositivos USB. Esta resposta fornece um hack feio se você quiser montar todos os dispositivos USB automaticamente com permissões de execução.

    
por lumbric 28.12.2011 / 16:06
fonte
1

Monte a partição NTFS em uma unidade USB com permissões personalizadas e proprietário

No Linux, o modo de NTFS (e FAT32) é determinado pelas opções de montagem da partição. Você não pode mudá-lo via chmod.

Suposição: a unidade USB é vista como sdb1 , modificação para corresponder à letra da unidade e ao número da partição no seu caso . A sintaxe geral é sdxn , em que x é a letra da unidade e n é o número da partição, como por exemplo sudo lsblk -f

Preparando

  • Desmonte a partição NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Crie um ponto de montagem personalizado (somente se você quiser um novo ponto de montagem), por exemplo, com

    sudo mkdir -p /mnt/sd1
    
  • Verifique o número uid do seu userID (geralmente é 1000, às vezes 1001 ou 1002 ...)

    grep ^"$USER" /etc/group
    

    e use esse número se quiser pegar a propriedade (o padrão é root ).

Monte a partição NTFS

Exemplo 1 (sem permissões de execução para arquivos, sem acesso para 'outros'),

sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb1 /mnt/sd1  # modify to match your case
  • neste caso, você pode executar o script this-script com

    bash /mnt/sd1/this-script
    

Exemplo 2 (com permissões de execução para arquivos, sem acesso para 'outros'),

sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdb1 /mnt/sd1  # modify to match your case
  • Nesse caso, você pode executar o script this-script com

    /mnt/sd1/this-script
    

    e você também pode executar programas executáveis a partir deste local (não que isso seja recomendado).

Exemplo 3 (permissões completas para todos, o que é conveniente mas não seguro, quando existem vários usuários),

sudo mount -o rw,users,umask=000,exec /dev/sdxn /mnt/sd1  # general
sudo mount -o rw,users,umask=000,exec /dev/sdb1 /mnt/sd1  # modify to match your case
    
por sudodus 15.09.2017 / 13:02
fonte