Pourquoi les fichiers d'un partage monté smbfs sont-ils créés avec un ensemble de bits exécutables?


14

J'ai monté un partage samba à l'aide de la commande smbmount:

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

Lorsque je crée de nouveaux fichiers, ils sont créés avec le bit exécutable défini pour le propriétaire, le groupe et le monde. Par exemple

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

Le même fichier lorsqu'il est créé sur un partage monté NFS définit les autorisations correctes sans aucun ensemble de bits exécutables.

Pourquoi cela arrive-t-il? Comment peut-il être corrigé?

Réponses:


11

NFS a été inventé dans le monde Unix et comprend donc les autorisations Unix traditionnelles dès le départ. (L'ACL des systèmes Unix modernes est une autre affaire, mais les implémentations récentes de NFS devraient y faire face.)

Samba a été inventé dans le monde des PC IBM / Microsoft, pour échanger des fichiers avec des systèmes qui n'avaient aucune autorisation au-delà de la lecture seule / lecture-écriture. Il est maintenant natif de Windows. Par défaut, Samba ne transmet pas d'autorisations Unix. Selon la configuration, tous les fichiers sont marqués comme exécutables (ce qui est gênant) ou tous les fichiers (à l'exception des répertoires) sont marqués comme non exécutables (ce qui est gênant).

Il existe différentes extensions du protocole Samba / CIFS qui le rendent plus adapté à l'utilisation Unix. Essayez d'activer les extensions Unix dans la configuration du serveur:

[global]
unix extensions = yes

Malheureusement dans mon intranet d'entreprise, je n'ai pas accès à la configuration du serveur. Il serait peut-être préférable de monter simplement en utilisant NFS sur un client Linux. Le plus gros problème est sur un client Windows, où la configuration de NFS est pénible.
vivekian2

@ vivekian2 En effet, si vous avez le choix, je vous recommande vivement d'utiliser NFS sur un client Linux et SMB sur un client Windows.
Gilles 'SO- arrête d'être méchant'

10

Cela ressemble à votre problème, intitulé: Les fichiers copiés gagnent un bit d'exécution sur Samba / CIFS .

extrait

Après avoir copié un fichier avec rw-r ----- sur un volume monté sur CIFS, la copie obtient rwxr -----. Il gagne donc le bit d'exécution:

Plus bas de la page, la mise map archive = noen /etc/samba/smb.conf:

extrait

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

Cela résout certainement le problème des fichiers enregistrés sous Windows obtenant l'indicateur d'exécution. Merci! Un autre défaut fou, quelqu'un a-t-il utilisé des drapeaux d'archive au cours des 2 dernières décennies? :)
Rennex

4

Vous pourriez essayer: mount -t cifs

Google "monter des cifs" pour l'utilisation, ce n'est pas difficile à comprendre, mais vous voudrez définir des options en utilisant le drapeau -o:

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

L'utilisateur et le groupe sont des identifiants, comme en numérique et non l'alias de texte. Ces options garantiront que vous disposez d'un accès r / w, les autorisations sont contrôlées par le montage sans serveur, et file_mask=0664garantiront spécifiquement que vos fichiers ne sont pas exécutables. En plus de cela, vous pourrez travailler avec vos partages samba en tant que répertoires locaux.


Dans la version récente de la samba, il peut être nécessaire d'utiliserfile_mode=0644,dir_mode=0755
Jokester

AVERTISSEMENT: l'option de montage CIFS «dmask» est déconseillée. Utilisez plutôt 'dir_mode'. AVERTISSEMENT: l'option de montage CIFS 'fmask' est déconseillée. Utilisez plutôt 'file_mode'.
Hubbitus

4

Vous pouvez découvrir pourquoi cela se produit à partir de l'explication suivante sur le site Web de Samba sous la section Autorisations et attributs de fichiers sur MS-DOS et Unix :

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

Cela a à voir avec le mappage des bits système, caché et archive pour un système de fichiers MS-DOS.

Un système de fichiers MS-DOS n'utilise pas de bits exécutables, donc les trois bits exécutables du système de fichiers Unix sont réutilisés pour représenter les bits système, masqué et archive du système de fichiers MS-DOS.

Ainsi, lorsque vous affichez les autorisations de fichier à l'aide ls -ld'Unix, vous affichez les autorisations de fichier adaptées à MS-DOS (ou Windows) en gardant à l'esprit que les trois bits exécutables sous Unix représentent les bits système, masqué et d'archivage pour MS-DOS.

Dans smb.conf, cependant, vous pouvez désactiver ce mappage pour un partage avec:

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

et forcer le mode sur la création de fichiers avec:

force create mode = 0660

Cela s'est avéré si simple ... Merci pour les explications!
anton_rh

1

J'utilise un QNAP TS439 - et j'ai eu ce problème avec les fichiers exécutables.

Bien que je devais utiliser ce qui suit dans mon /etc/fstabdossier

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.