Warum werden Dateien in einer von smbfs gemounteten Freigabe mit gesetztem ausführbaren Bit erstellt?


14

Ich habe eine Samba-Freigabe mit dem Befehl smbmount gemountet:

$ sudo smbmount \\\\foo\\bar /mnt/bar -o user=tom

Wenn ich neue Dateien erstelle, werden diese mit dem für Eigentümer, Gruppe und Welt festgelegten ausführbaren Bit erstellt. Zum Beispiel

$ touch hello.txt 
$ ls -la hello.txt
-rwxr-xr-x 1 root root 0 Dec  2 12:28 hello.txt

Dieselbe Datei, die auf einer über NFS bereitgestellten Freigabe erstellt wurde, richtet die korrekten Berechtigungen ein, ohne dass ein ausführbares Bit gesetzt ist.

Warum passiert dies? Wie kann es behoben werden?

Antworten:


10

NFS wurde in der Unix-Welt erfunden und versteht daher herkömmliche Unix-Berechtigungen von Anfang an. (Die Zugriffssteuerungsliste moderner Unix-Systeme ist eine andere Sache, aber die jüngsten Implementierungen von NFS sollten sie bewältigen.)

Samba wurde in der IBM / Microsoft-PC-Welt erfunden, um Dateien mit Systemen auszutauschen, die keine anderen Berechtigungen als Schreib- / Lesezugriff hatten. Es ist jetzt in Windows integriert. Standardmäßig überträgt Samba keine Unix-Berechtigungen. Abhängig von der Konfiguration werden entweder alle Dateien als ausführbar (was ärgerlich ist) oder alle Dateien (außer Verzeichnissen) als nicht ausführbar (was ärgerlich ist) markiert.

Es gibt verschiedene Erweiterungen des Samba / CIFS-Protokolls, die es für die Verwendung unter Unix geeigneter machen. Versuchen Sie, Unix-Erweiterungen in der Serverkonfiguration zu aktivieren :

[global]
unix extensions = yes

Leider kann ich in meinem Firmen-Intranet den Server nicht konfigurieren. Vielleicht ist es am besten, nur mit NFS auf einem Linux-Client zu mounten. Das größere Problem liegt bei einem Windows-Client vor, bei dem die Konfiguration von NFS eine harte Narbe ist.
vivekian2

@ vivekian2 Wenn Sie die Wahl haben, empfehle ich definitiv, NFS auf einem Linux-Client und SMB auf einem Windows-Client zu verwenden.
Gilles 'SO- hör auf böse zu sein'

10

Das klingt nach Ihrem Problem mit dem Titel: Kopierte Dateien werden unter Samba / CIFS ausgeführt .

Auszug

Nach dem Kopieren einer Datei mit rw-r ----- auf ein CIFS-bereitgestelltes Volume wird die Kopie mit rwxr ----- erstellt. Es erhält also das Ausführungsbit:

Weiter unten auf der Seite, Einstellung map archive = noin /etc/samba/smb.conf:

Auszug

  [Global]
  <snip>
  map archive = no
  <snip>

Dies löst mit Sicherheit das Problem, dass Dateien, die unter Windows gespeichert wurden, das Ausführungsflag erhalten. Vielen Dank! Ein weiterer Wahnsinn, hat jemand in den letzten 2 Jahrzehnten Archiv-Flags benutzt? :)
Rennex

4

Sie könnten versuchen: mount -t cifs

Google "mount cifs" für die Verwendung, es ist nicht schwer zu verstehen, aber Sie möchten die Optionen mit der Option -o festlegen:

uid =, gid =, rw, noperm, dir_mask = 0775, file_mask = 0664

Benutzer und Gruppe sind IDs, da in numerischer Form nicht der Textalias. Diese Optionen stellen sicher, dass Sie über Schreib- / Lesezugriff verfügen. Die Berechtigungen werden vom Mount-Server gesteuert. Insbesondere file_mask=0664wird sichergestellt, dass Ihre Dateien nicht ausführbar sind. Darüber hinaus können Sie mit Ihren Samba-Freigaben als lokale Verzeichnisse arbeiten.


In der letzten Version von Samba muss man möglicherweisefile_mode=0644,dir_mode=0755
Jokester

WARNUNG: Die CIFS-Mount-Option 'dmask' ist veraltet. Verwenden Sie stattdessen 'dir_mode'. WARNUNG: Die CIFS-Mountoption 'fmask' ist veraltet. Verwenden Sie stattdessen 'file_mode'.
Hubbitus

4

Warum dies so ist, erfahren Sie anhand der folgenden Erklärung auf der Samba-Website im Abschnitt " Dateiberechtigungen und -attribute unter MS-DOS und Unix ":

https://www.samba.org/samba/docs/using_samba/ch08.html

Dies hat mit der Zuordnung der Bits System, Hidden und Archive für ein MS-DOS-Dateisystem zu tun.

Ein MS-DOS-Dateisystem verwendet keine ausführbaren Bits, daher werden die drei ausführbaren Bits im Unix-Dateisystem wiederverwendet, um die System-, Hidden- und Archive-Bits für das MS-DOS-Dateisystem darzustellen.

Wenn Sie also die Dateiberechtigungen unter ls -lUnix anzeigen , sehen Sie die für MS-DOS (oder Windows) geeigneten Dateiberechtigungen, wobei Sie berücksichtigen, dass die drei ausführbaren Bits unter Unix die Bits System, Hidden und Archive für MS-DOS darstellen.

In smb.confkönnen Sie diese Zuordnung jedoch für eine Freigabe deaktivieren mit:

map archive = no
map system = no
map hidden = no

und erzwinge den Modus beim Erstellen von Dateien mit:

force create mode = 0660

Es stellte sich als so einfach heraus ... Vielen Dank für Erklärungen!
anton_rh

1

Ich benutze einen QNAP TS439 - und hatte dieses Problem mit ausführbaren Dateien.

Obwohl ich folgendes in meiner /etc/fstabDatei verwenden musste

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.