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

129

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

Tentei modificar as permissões executando chmod 755 script.sh, o que não relata uma falha ou algo assim - 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, ele permanece inalterado.

Nathan Osman
fonte
Uma solução melhor pode ser encontrada aqui. Essas duas perguntas devem estar vinculadas!

Respostas:

79

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

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

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
htorque
fonte
Ok, isso explicaria algumas outras coisas também.
Nathan Osman
5
O que devo colocar no lugar do /dev/whatevere /mnt/whateverse eu tiver que alterar a permissão de minha partição HDD chamado/media/Prtn
pranphy
3
A montagem dessa maneira preserva as configurações originais do disco? Ou seja, é seguro montar uma unidade do Windows?
22614 Jonathan
1
Defino o usuário como 'andrew', que é meu principal usuário. Por ls for ntfs, a partição mostra que todos os arquivos / diretórios são de propriedade raiz.
deathangel908
A verdadeira solução é ntfs-3g.usermap. Veja abaixo ...
Eduardo Cuomo
86

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 a permissionsopção ao montar (quando não é necessária compatibilidade com o Windows). Isso mapeia os usuários linux em seu sistema com os IDs de usuário como NTFS / Windows os usam internamente.

Veja a página de manual do ntfs-3g para algumas informações e alguns exemplos. Se 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, ele também pode armazenar nomes de arquivos válidos no linux / unix, mas não no Windows, suporta links simbólicos e hardlinks, etc.

JanC
fonte
4
aqui está uma boa documentação. em resumo: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSe entãosudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
ovelha voadora
1
Portanto, isso permitirá que você defina arbitrariamente permissões como chmod 655 /some/filena partição NTFS montada no Linux? Estou tentando descobrir como mesclar minha partição pessoal do linux para c: \ Users. O uso do usermap me permitirá manter todas as permissões? Eu estava pensando em montar o diretório c: \ Users em / home no linux.
trusktr
7
Deixe-me enfatizar novamente sua observação: "quando não for necessária compatibilidade com o Windows". ref: askubuntu.com/questions/92863/…
Visualização elíptica
1
ntfs-3g manpagelink quebrado
ctrl-alt-delor 29/09/16
Eduardo Cuomo escreveu um muito bom exemplo de todas as medidas necessárias para fazer um "usuário arquivo de mapeamento" aqui: askubuntu.com/a/887502/327339
Gabriel Staples
38

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

Primeiro desmonte a partição NTFS.

Identifique o UUID da sua partição com blkid

sudo blkid

Então edite /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

E 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, automontam automaticamente a partição quando você inicializa e userspermitem que os usuários montem e desmontem.

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

Pantera
fonte
2
Como essas permissões são armazenadas? Em ADS? Outros metadados?
ζ--
E o fat32? Eu tenho um cartão Micro SD protegido contra gravação e não consigo acessar, formate-o.
Waqas
@RanaMuhammadWaqas - essa é uma pergunta antiga, mas você também pode montá-la com opções diferentes. Difícil saber qual é o seu problema, talvez identifique seu hardware e faça uma pergunta separada.
Pantera
@ bodhi.zazen usersimplica noexec , nosuid e nodev . não é? Como os usuários podem montar / desmontar com noexeca configuração?
Khurshid Alam
1
@EduardoCuomo - É improvável que você poste um comentário em uma resposta afirmando que não está funcionando. Qual sistema de arquivos? Eu sugiro que você abra uma pergunta. Você precisa identificar o sistema de arquivos e postar sua entrada no fstab
Panther
20

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

Portanto, o exemplo seria:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
dbrews
fonte
14

Você sempre pode chamar explicitamente o interpretador de scripts, caso em que não são necessárias permissões de execução. Se o script usar bash , como pode ser verificado observando a primeira linha do script, basta executar

bash script.sh

Observe que o script chama outros scripts ou binários na mesma partição, isso não funcionará. Observe também que a estratégia não funciona com binários, em vez de arquivos de script de texto escritos em Bash Script, Perl, Python ou similares.

Loevborg
fonte
+1 - nunca pensei em invocá-lo dessa maneira.
Nathan Osman
8
Para executar binários, use /lib64/ld-linux-x86-64.so.2 ./program.binpara programas de 64 bits e programas /lib/ld-linux.so.2 ./program.binde 32 bits.
Lekensteyn
8

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


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


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

Parte 1

A seção Mapeamento do Usuário da documentação do NTFS-3G especifica duas versões para configurar o mapeamento do usuário entre Windows e Linux, uma versão do Windows e uma versão do Linux. Minha experiência foi que a versão Linux acabou com uma falha . A conta do Linux não foi mapeada para a 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 na sua conta do Windows se tornam inacessíveis. Mas mesmo se você sarna, ainda éum mapeamento errado. Isso significa que, mais tarde, 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 à raiz no Linux (se bem me lembro). Portanto, no Windows, você precisa retomar a propriedade e no Linux, mudar de propriedade. Não é isso que esperamos que seja. Após várias tentativas desesperadas de corrigir o problema, desisti e me virei para a versão do Windows. Aquele funcionou. A seguir, instruções detalhadas extraídas da seção relevante da documentação do NTFS-3G:

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

  2. Abra a linha de comando do Windows. Mude para o diretório extraído tools(por padrão) da usermapferramenta. 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, digamos 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 SIDdeve ser o SID do usuário e o segundo o SID do grupo. Você pode verificá-los respectivamente pelos comandos whoami /usere whoami /groups.

  3. Depois de verificar se os SIDs estão corretos, siga as instruções no comentário, ou seja, altere usera user::SIDlinha para o seu nome de usuário e groupa :group:SIDlinha para o nome do seu grupo principal no Linux. No Ubuntu, eles são os mesmos. Além disso, adicione o nome do seu grupo Linux também após os primeiros dois pontos da user::SIDlinha. Portanto, a linha deve ser algo parecido user:group:SID. Parece que, se não o fizer, os arquivos criados no Windows serão atribuídos user:rootno 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 inicialize no Linux. sudoedite o arquivo /etc/fstab. Adicione ou modifique a linha da partição NTFS compartilhada para algo como o seguinte:

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

O essencial é definir o umask( dmaske fmasktambém pode funcionar, mas não testado). Escolha um valor para umaskvocê, embora eu tenha escolhido 077. Parece que sem essa configuração, as permissões totais serão concedidas aos oarquivos recém-criados.

Salve o arquivo. Agora sudo mountou remonte ( sudo umounte depois sudo mount) a partição NTFS compartilhada (no meu caso /data):

$ sudo mount /data

Parte 3

Agora (ainda no Linux) cdaté o ponto de montagem (no meu caso /data), ls -los arquivos lá. Verifique se a propriedade e as permissões correspondentes, respectivamente, que você especificou no UserMappingarquivo e as umaskque definiu /etc/fstab(a correspondência entre permissões e umaskrequer algum cálculo de complemento, consulte man (1) umask para obter mais informações). Se o fizerem, parabéns, metade da meta é alcançada. Caso contrário, pobre você. Pergunte ao Ubuntu ou Windows.

Em seguida, crie um novo diretório e um novo arquivo. ls -lpara verificar sua propriedade e 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 o 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 estiverem, parabéns, está tudo pronto. Caso contrário, azar. Pergunte ao Windows ou Ubuntu.

EOF

reflexão
fonte
6

Thread antigo, eu sei, mas ainda relevante e faltando uma dica de caso de uso 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 armazenar uma biblioteca Steam ...

Quando a partição NTFS está em uma unidade USB externa, por exemplo - o que significa que a partição é montada rapidamente durante a conexão -, você pode usar o método a seguir para fazer o udev montar partições NTFS com direitos de execução.

Abra uma janela do 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 (caso contrário, saia do nano e emita novamente o comando, mas inicie o nome do arquivo com um número maior, como 91 -...):

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

Salve e feche. Desconecte a unidade e faça no terminal:

$ sudo service udev restart

Em seguida, conecte a unidade novamente e aproveite :)

user17254
fonte
1
Excelente, esta deve ser a resposta aceita.
usar o seguinte código
4

Todas as etapas:

  1. Instalar ntfs-3g:

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

    sudo umount /mnt/windows
    
  3. Use ntfs-3g.usermappara gerar seu UserMappingarquivo:

    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 o UserMappingarquivo:

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

    sudo vim /etc/fstab
    

    Atualize a linha de montagem :

    1. Faça backup da sua linha de montagem atual! Duplique a linha e comente-a adicionando uma #no início.
    2. Alterar a seguir: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. A seguir: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Use ntfs-3ge somente defaultopção)

    Deve ser algo como isto:

    #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 o seu fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

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

AVISO COM O SO WINDOWS!

Verifico com o Windows 7+ e as permissões afetam o sistema operacional Windows! Altero as permissões do meu diretório inicial na partição do Windows e, quando usei o Windows novamente, pude ver que o usuário estava com defeito!

Eduardo Cuomo
fonte
1

Não há perguntas relacionadas a dispositivos USB. Esta resposta fornece um truque feio se você deseja montar todos os dispositivos USB automaticamente com permissões de execução.

lumbric
fonte
1

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

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

Assunção: o drive USB é visto como sdb1 , modificar para coincidir com a letra de unidade e número da partição no seu caso . A sintaxe geral é sdxn, onde xestá a letra da unidade e né o número da partição, como visto por exemplosudo 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ê desejar um novo ponto de montagem), por exemplo, com

    sudo mkdir -p /mnt/sd1
    
  • Verifique o uidnúmero do seu ID de usuário (geralmente é 1000, às vezes 1001 ou 1002 ...)

    grep ^"$USER" /etc/group
    

    e use esse número se desejar obter 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
  • Nesse caso, você pode executar o script this-scriptcom

    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-scriptcom

    /mnt/sd1/this-script
    

    e você também pode executar programas executáveis ​​a partir desse local (não recomendado).

Exemplo 3 (permissões completas para todos, o que é conveniente, mas não seguro, quando há 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
sudodus
fonte
/media$ sudo mkdir -p sdb1 /media$ sudo mount -o rw,users,umask=000,exec /dev/sdb1 ./sdb1/ mount: block device /dev/sdb1 is write-protected, mounting read-only
Alhelal 29/11
@alhelal, receio que o hardware da sua unidade USB tenha se tornado somente leitura ou 'bloqueado na grade'. Mas também pode haver algum problema com o sistema de arquivos e, se o sistema estiver corrompido, você poderá corrigi-lo reparando-o no Windows, com o método GUI ou com a linha de comando, de chkdsk /f X:acordo com este link ubuntuforums.org /… - Se ainda não tiver sorte, faça backup dos dados e tente de acordo com askubuntu.com/questions/144852/…
sudodus