Wie verwende ich 'chmod' auf einer NTFS- (oder FAT32-) Partition?

129

Ich habe ein Skript, das ich auf einer NTFS-Partition ausführen muss. Die Berechtigung des Skripts ist auf 600 festgelegt.

Ich habe versucht, die Berechtigungen durch Ausführen zu ändern. Dabei chmod 755 script.shwird kein Fehler gemeldet. Die Berechtigungen für die Datei werden jedoch ebenfalls nicht geändert:

$ 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

Wie Sie sehen, bleibt es unverändert.

Nathan Osman
quelle
Eine bessere Lösung finden Sie hier Diese beiden Fragen sollten verknüpft werden!

Antworten:

79

Der Modus wird durch die Mount-Optionen der Partition bestimmt (Sie können ihn nicht über chmod ändern).

Für '755' für Dateien und '777' für Verzeichnisse würden Sie so etwas verwenden

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
Drehmoment
quelle
Okay, das würde auch ein paar andere Dinge erklären.
Nathan Osman
5
Was soll ich anstelle von setzen /dev/whateverund /mnt/whateverwenn ich die Erlaubnis meiner HDD-Partition mit dem Namen /media/Prtn
ändern muss
3
Erhält das Mounten auf diese Weise die ursprünglichen Einstellungen der Festplatte? Dh es ist sicher ein Windows Laufwerk zu mounten?
Jonathan
1
Ich habe user auf 'andrew' gesetzt, was mein Hauptbenutzer ist. Mit ls für ntfs wird angezeigt, dass alle Dateien / Verzeichnisse in der Partition Eigentum von root sind.
Deathangel908
Die wirkliche Lösung ist ntfs-3g.usermap. Siehe unten ...
Eduardo Cuomo
86

Im Gegensatz zu dem, was die meisten Leute glauben, ist NTFS ein POSIX-kompatibles Dateisystem, und es ist möglich, Berechtigungen für NTFS zu verwenden .

Um dies zu ermöglichen, benötigen Sie eine "Benutzerzuordnungsdatei" oder geben Sie permissionsbeim Mounten einfach die Option an (wenn keine Kompatibilität mit Windows erforderlich ist). Dies ordnet Linux-Benutzer auf Ihrem System den Benutzer-IDs zu, die von NTFS / Windows intern verwendet werden.

Weitere Informationen und Beispiele finden Sie auf der Hilfeseite zu ntfs-3g . Weitere Informationen finden Sie in der erweiterten Dokumentation zu ntfs-3g zu Eigentumsrechten und Berechtigungen .

(Beachten Sie, dass dies auf FAT-Dateisystemen nicht funktioniert.)

¹ Ja, es können auch Dateinamen gespeichert werden, die unter Linux / Unix gültig sind, jedoch nicht unter Windows. Unterstützt Symlinks und Hardlinks usw.

JanC
quelle
4
Hier ist eine gute Dokumentation. kurz: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSund dannsudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
fliegende Schafe
1
Damit können Sie also willkürlich Berechtigungen wie chmod 655 /some/filefür die unter Linux gemountete NTFS-Partition festlegen ? Ich versuche herauszufinden, wie ich meine Home-Partition von Linux in c: \ Users zusammenführen kann. Erlaubt mir die Verwendung von usermap, alle Berechtigungen beizubehalten? Ich hatte vor, das Verzeichnis c: \ Users in / home unter Linux zu mounten.
Trusktr
7
Lassen Sie mich Ihre Bemerkung noch einmal betonen: "Wenn keine Kompatibilität mit Windows erforderlich ist". ref: askubuntu.com/questions/92863/…
Elliptische Ansicht
1
ntfs-3g manpageVerbindung unterbrochen
Strg-Alt-Delor
Eduardo Cuomo hat hier ein ziemlich gutes Beispiel für alle Schritte geschrieben, die zum Erstellen
Gabriel Staples
38

Verwenden Sie für NTFS-Partitionen die permissionsOption in fstab.

Hängen Sie zuerst die ntfs-Partition aus.

Identifizieren Sie Ihre Partitions-UUID mit blkid

sudo blkid

Dann editieren /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Fügen Sie eine Zeile für die ntfs-Partition hinzu oder bearbeiten Sie sie

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

Erstellen Sie einen Einhängepunkt (falls erforderlich)

sudo mkdir /media/windows

Hängen Sie nun die Partition ein

mount /media/windows

Mit den Optionen, die ich Ihnen gegeben habe, autowird die Partition beim Booten automatisch gemountet, und usersBenutzer können das Mounten und Ummounten durchführen.

Sie können dann chown und chmod auf der ntfs-Partition verwenden.

Panther
quelle
2
Wie werden diese Berechtigungen gespeichert? In ADS? Andere Metadaten?
ζ--
Was ist mit fat32? Ich habe eine Micro-SD-Karte, die schreibgeschützt ist und auf die ich nicht zugreifen kann. Formatieren Sie sie.
Waqas
@RanaMuhammadWaqas - Dies ist eine alte Frage, aber Sie können es auch mit verschiedenen Optionen mounten. Schwer zu wissen, was Ihr Problem ist, identifizieren Sie möglicherweise Ihre Hardware und stellen Sie eine separate Frage.
Panther
@ bodhi.zazen usersimpliziert noexec , nosuid und nodev . ist nicht? Wie können Benutzer mounten / umounten, noexecwenn sie festgelegt sind?
Khurshid Alam
1
@EduardoCuomo - Es ist unwahrscheinlich, dass Sie Hilfe benötigen, wenn Sie in einer Antwort einen Kommentar schreiben, der besagt, dass er nicht funktioniert. Welches Dateisystem? Ich schlage vor, Sie öffnen eine Frage. Sie müssen das Dateisystem identifizieren und Ihren fstab-Eintrag veröffentlichen
Panther
20

Zusätzlich zum Festlegen der fmask und / oder dmask in der obigen Antwort von htorque musste ich auch die Mount-Option "exec" festlegen, wenn Sie Skripts auf dem Laufwerk ausführen möchten.

Das Beispiel wäre also:

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

Sie können den Skriptinterpreter jederzeit explizit aufrufen. In diesem Fall sind keine Ausführungsberechtigungen erforderlich. Wenn das Skript bash verwendet , wie anhand der ersten Zeile des Skripts überprüft werden kann, führen Sie es einfach aus

bash script.sh

Beachten Sie, dass das Skript andere Skripte oder Binärdateien auf derselben Partition aufruft. Dies funktioniert nicht. Beachten Sie auch, dass die Strategie nicht mit Binärdateien funktioniert, sondern mit Text-Skriptdateien, die in Bash-Skript, Perl, Python oder dergleichen geschrieben wurden.

Loevborg
quelle
+1 - Ich hätte nie gedacht, es so aufzurufen.
Nathan Osman
8
Verwenden Sie /lib64/ld-linux-x86-64.so.2 ./program.binzum Ausführen von Binärdateien 64-Bit- und /lib/ld-linux.so.2 ./program.bin32-Bit -Programme .
Lekensteyn
8

Nach Angaben des Eigentümer und Berechtigungen Abschnitt der NTFS-3G - Dokumentation können wir Mount - Optionen verwenden , um Datei zu steuern den Zugriff und Schöpfung . Die Kombinationen sind sehr kompliziert (siehe dort die beiden Tabellen). Auch ich lese nicht und bekomme sie alle. Zum Beispiel weiß ich nicht, ob POSIX-ACLs zur Kompilierungszeit des NTFS-3G-Binärpakets ausgewählt sind oder nicht. Das Beste, was ich bisher herausgefunden habe, ist die Verwendung einer Benutzerzuordnungsdatei in Kombination mit einigen Einhängeoptionen, um eine plausible Zuordnung von Dateibesitz und Berechtigungen zwischen Windows und Linux zu erreichen.


Warnung : Dies funktioniert nur am besten, wenn ich eine NTFS- Datenpartition (Laufwerk D:unter Windows) zwischen doppelt gebootetem Windows 8 und Kubuntu 14.04 freigebe. Die Anweisungen werden in sorgfältiger Rückschau aufgezeichnet, aber nicht gründlich getestet. Es ist zu anstrengend und langweilig, den gesamten Vorgang noch einmal zu wiederholen. Befolgen Sie es also auf eigenes Risiko. Wenn Sie dies dennoch tun, teilen Sie Ihre Erfahrungen mit. Wenn Sie sich dazu entschließen, die Anweisungen zu befolgen, lesen Sie sie bitte vollständig durch, um ein vollständiges Bild zu erhalten, bevor Sie tatsächlich handeln. Viel Glück!


Okay, hier geht's! Die ausführliche Anleitung besteht aus drei Teilen. Teil 1 sollte unter Windows und Teil 2 unter Linux ausgeführt werden. Teil 3 dient zum Testen.

Teil 1

Im Abschnitt Benutzerzuordnung der NTFS-3G-Dokumentation werden zwei Versionen zum Einrichten der Benutzerzuordnung zwischen Windows und Linux angegeben, eine Windows-Version und eine Linux-Version. Meine Erfahrung war, dass die Linux-Version mit einem Miss endete . Das Linux-Konto wurde meinem Windows-Konto nicht zugeordnet, aber ein unbekanntes Konto wurde unter einer SID angezeigt . Das Ergebnis war ein Durcheinander, da dieses unbekannte Konto den Besitz aller Dateien meines Windows-Kontos übernimmt. In diesem Fall kann auf Dateien unter Ihrem Windows-Konto nicht zugegriffen werden, es sei denn, Sie haben Administratorrechte, um Ihren Besitz zurückzugewinnen. Aber selbst wenn Sie räumen, ist es immer nocheine falsche Zuordnung. Das bedeutet, dass alle Dateien, die Sie unter Linux erstellen, später unter Windows diesem unbekannten Konto zugewiesen werden und die unter Windows unter Linux root zugewiesen werden (wenn ich mich recht erinnere). Daher müssen Sie unter Windows den Besitz wieder übernehmen und unter Linux den Besitz ändern. Das erwarten wir nicht. Nach mehreren hoffnungslosen Versuchen, das Problem zu beheben, gab ich auf und wandte mich der Windows-Version zu. Das hat funktioniert. Es folgen detaillierte Anweisungen aus dem entsprechenden Abschnitt der NTFS-3G-Dokumentation:

  1. Laden Sie das Usermap- Tool herunter , extrahieren Sie es irgendwo (in meinem Fall auf Laufwerk C:), besser außerhalb der NTFS-Partition (in meinem Fall auf Laufwerk D:), um es gemeinsam zu nutzen.

  2. Öffnen Sie die Windows-Befehlszeile. Wechseln Sie in das extrahierte Verzeichnis tools(standardmäßig) des usermapTools. Führen Sie dann den folgenden Befehl aus:

    C:\tools> mapuser > UserMapping
    

    Dadurch wird eine Vorlage generiert und in eine Datei mit dem Namen umgeleitet UserMapping. Öffnen Sie die Datei mit einem Texteditor, sagen Sie "Editor". Die folgenden Zeilen sollten angezeigt werden:

    # 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
    

    Vermutlich sollte die erste SIDIhre Benutzer-SID sein, während die zweite Ihre Gruppen-SID ist. Sie können sie jeweils mit den Befehlen whoami /userund überprüfen whoami /groups.

  3. Nachdem Sie sichergestellt haben, dass die SIDs korrekt sind, folgen Sie den Anweisungen im Kommentar, dh ändern Sie userin der user::SIDZeile Ihren Benutzernamen und groupin der :group:SIDZeile Ihren primären Gruppennamen unter Linux. Auf Ubuntu sind sie gleich. Fügen Sie außerdem Ihren Linux-Gruppennamen auch nach dem ersten Doppelpunkt der user::SIDZeile hinzu. Die Linie sollte also ungefähr so ​​aussehen user:group:SID. Andernfalls werden Dateien, die unter Windows erstellt wurden, user:rootunter Linux zugewiesen .

  4. Speicher die Datei. Verschieben Sie es in ein Verzeichnis mit dem Namen .NTFS-3G(erstellen Sie es, falls es noch nicht vorhanden ist) auf der zu teilenden NTFS-Partition (in meinem Fall Laufwerk D:).

  5. Dieser Schritt dient zum Testen in Teil 3. Erstellen Sie auf der freigegebenen NTFS-Partition ein neues Verzeichnis und eine neue Datei.

Teil 2

Booten Sie jetzt in Linux. sudoBearbeiten Sie die Datei /etc/fstab. Fügen Sie die Zeile für die freigegebene NTFS-Partition wie folgt hinzu oder ändern Sie sie:

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

Das Wesentliche ist die Einstellung umask( dmaskund fmaskkann auch funktionieren, aber nicht getestet). Wählen Sie einen Wert für umaskSie, obwohl ich gewählt habe 077. Ohne diese Einstellung werden anscheinend die vollständigen Berechtigungen ofür neu erstellte Dateien erteilt .

Speicher die Datei. Jetzt sudo mountoder mounten ( sudo umountund dann sudo mount) die gemeinsame NTFS - Partition (in meinem Fall /data):

$ sudo mount /data

Teil 3

Nun (noch unter Linux) cdzum Einhängepunkt (in meinem Fall /data), ls -lden Dateien dort. Überprüfen Sie, ob der Besitz und die Berechtigungen übereinstimmen, die Sie in der UserMappingDatei angegeben und umaskfestgelegt haben /etc/fstab(die Übereinstimmung zwischen den Berechtigungen umaskerfordert eine Komplementberechnung; weitere Informationen finden Sie unter man (1) umask ). Wenn doch, Glückwunsch, ist das halbe Ziel erreicht. Ansonsten arm du. Fragen Sie Ubuntu oder Windows.

Erstellen Sie dann ein neues Verzeichnis und eine neue Datei. ls -lum ihren Besitz und ihre Berechtigungen zu überprüfen. Der Eigentümer sollte wie gewohnt Ihr Benutzername und Ihre primäre Gruppe sein. Die Berechtigungen sollten mit den übereinstimmen umask. Starten Sie nun Ihren Computer neu und starten Sie Windows. Suchen Sie auf der freigegebenen NTFS-Partition das Verzeichnis und die Datei, die Sie gerade unter Linux erstellt haben. Überprüfen Sie ihre Eigenschaften, um festzustellen, ob sie Ihrem Windows-Konto zugewiesen sind. Wenn dies der Fall ist, herzlichen Glückwunsch, sind Sie fertig. Ansonsten Pech. Fragen Sie Windows oder Ubuntu.

EOF

Reflektionist
quelle
6

Alter Thread, ich weiß, aber immer noch relevant und ohne einen bestimmten Anwendungsfall-Tipp, zusammengestellt aus verschiedenen Vorschlägen in verschiedenen anderen Foren / Threads und getestet auf Ubuntu GNOME 13.04, wo ich wollte, dass ein externes Laufwerk eine Steam-Bibliothek enthält ...

Befindet sich die NTFS-Partition beispielsweise auf einem externen USB-Laufwerk, was bedeutet, dass die Partition beim Herstellen einer Verbindung im laufenden Betrieb bereitgestellt wird, können Sie mit der folgenden Methode festlegen, dass udev ntfs-Partitionen mit Ausführungsrechten bereitstellt.

Öffne ein Terminalfenster und mache:

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

Fügen Sie dann diese Zeile in eine leere / neue Datei ein (wenn nicht, beenden Sie nano und geben Sie den Befehl erneut aus, aber beginnen Sie den Dateinamen mit einer höheren Zahl wie 91 -...):

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

Dann speichern und schließen. Trennen Sie das Laufwerk und führen Sie dann Folgendes im Terminal aus:

$ sudo service udev restart

Als nächstes schließen Sie das Laufwerk wieder an und genießen Sie :)

user17254
quelle
1
Hervorragend, dies sollte die akzeptierte Antwort sein.
Leftaroundabout
4

Alle Schritte:

  1. Installieren Sie ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Hängen Sie die NTFS- Partition aus:

    sudo umount /mnt/windows
    
  3. Verwenden Sie ntfs-3g.usermap, um Ihre UserMappingDatei zu generieren :

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

    oder

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Hängen Sie die NTFS- Partition erneut ein, um die UserMappingDatei hinzuzufügen :

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Aktualisieren Sie Ihre fstabDatei:

    sudo vim /etc/fstab
    

    Aktualisieren Mount - line:

    1. Sichern Sie Ihre aktuelle Mount-Linie! Duplizieren Sie die Zeile und kommentieren Sie sie, indem Sie #am Anfang ein einfügen.
    2. Als nächstes ändern: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Bis zum nächsten: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Verwenden ntfs-3gund nur defaultOption)

    Es sollte ungefähr so ​​aussehen:

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

  6. Zum Schluss montieren Sie erneut mit Ihrem fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Tun Sie dies einmal für jede NTFS- Partition, die Sie haben!

WARNUNG UNTER WINDOWS!

Ich überprüfe es mit Windows 7+ und die Berechtigungen wirken sich auf das Windows-Betriebssystem aus! Ich ändere die Berechtigungen meines Basisverzeichnisses auf der Windows-Partition und als ich Windows erneut verwendete, konnte ich feststellen, dass der Benutzer defekt war!

Eduardo Cuomo
quelle
1

Es gibt keine verwandte Frage für USB-Geräte. Diese Antwort ist ein hässlicher Hack, wenn Sie jedes USB-Gerät automatisch mit Ausführungsberechtigungen mounten möchten.

lumbric
quelle
1

Mounten Sie die NTFS-Partition auf einem USB-Laufwerk mit benutzerdefinierten Berechtigungen und Eigentümern

Unter Linux wird der Modus von NTFS (und FAT32) durch die Mount-Optionen der Partition bestimmt . Sie können es nicht über chmod ändern.

Annahme: Das USB-Laufwerk wird als " Ändern" angesehensdb1 , sodass es dem Laufwerksbuchstaben und der Partitionsnummer in Ihrem Fall entspricht . Die allgemeine Syntax lautet sdxn, wobei xder Laufwerksbuchstabe und ndie Partitionsnummer angegeben sind, wie dies beispielsweise der Fall istsudo lsblk -f

Vorbereiten

  • Hängen Sie die NTFS-Partition aus.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Erstellen Sie einen benutzerdefinierten Einhängepunkt (nur wenn Sie einen neuen Einhängepunkt möchten), zum Beispiel mit

    sudo mkdir -p /mnt/sd1
    
  • Überprüfen Sie die uidNummer Ihrer Benutzer-ID (normalerweise 1000, manchmal 1001 oder 1002 ...)

    grep ^"$USER" /etc/group
    

    und verwenden Sie diese Nummer, wenn Sie den Besitz übernehmen möchten (Standard ist root).

Hängen Sie die NTFS-Partition ein

Beispiel 1 (ohne Ausführungsberechtigung für Dateien, kein Zugriff für 'Andere'),

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
  • In diesem Fall können Sie das Skript this-scriptmit ausführen

    bash /mnt/sd1/this-script
    

Beispiel 2 (mit Ausführungsberechtigungen für Dateien, kein Zugriff für 'Andere'),

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
  • In diesem Fall können Sie das Skript this-scriptmit ausführen

    /mnt/sd1/this-script
    

    Sie können auch ausführbare Programme von diesem Speicherort aus ausführen (dies wird jedoch nicht empfohlen).

Beispiel 3 (vollständige Berechtigungen für alle, was praktisch, aber nicht sicher ist, wenn mehrere Benutzer vorhanden sind),

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
quelle
/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
@alhelal, ich befürchte, dass die Hardware Ihres USB-Laufwerks schreibgeschützt oder "grid-locked" geworden ist. Möglicherweise liegt jedoch auch ein Problem mit dem Dateisystem vor. Wenn das Dateisystem beschädigt ist, können Sie es möglicherweise beheben, indem Sie es in Windows entweder mit der GUI-Methode oder mit der Befehlszeile chkdsk /f X:gemäß diesem Link auf ubuntuforums.org reparieren /… - Wenn Sie immer noch kein Glück haben, sichern Sie die Daten und versuchen Sie es gemäß askubuntu.com/questions/144852/…
sudodus