Remarque: je devine juste ici, je ne suis pas un gourou de la samba.
Samba / CIFS, du moins de la façon dont vous l'utilisez ici, ne reproduit pas les informations d'identification entre le serveur et le client. En raison de la force user
directive sur le serveur, toutes les opérations sont effectuées en tant qu'utilisateur erpm
sur le serveur. Cependant, étant donné que le client et le serveur exécutent tous deux un système Unix, ils ont négocié automatiquement les extensions CIFS POSIX . Cela fait que les autorisations Unix semblent fonctionner jusqu'à un certain point, mais uniquement dans la mesure où le serveur le permet, et vous avez rencontré un cas où ce que les autorisations Unix revendiquent et ce que le serveur autorise diffèrent.
Vous remarquerez que tous les fichiers apparaissent sous l'ID utilisateur 501. C'est leur UID sur le serveur.
Lorsque vous essayez de créer ou de supprimer un fichier, cela nécessite une autorisation d'écriture sur le répertoire. Tous les accès sont mappés à un seul utilisateur sur le serveur, donc l'autorisation d'écriture se résume à savoir si erpm
est autorisé à écrire dans ce répertoire sur le serveur. La réponse est oui.
Lorsque vous exécutez touch
, il crée le fichier, puis modifie son heure de modification. La modification de l'heure de modification d'un fichier nécessite la propriété, ce qui est testé par le code du système de fichiers générique, côté client.
Si vous exécutez strace touch test
, vous remarquerez que l' open
appel (qui crée le fichier) réussit, puis l' utimes
appel (ou plutôt sur Linux l' utimensat
appel système) ne parvient pas à définir les heures.
C'est en fait un peu bizarre car cela utimes
devrait réussir, car touch
il l'appelle avec un argument NULL (ce qui signifie «définir l'horodatage à l'heure actuelle»), et cela est censé être autorisé pour tout appelant qui peut écrire dans le fichier, et pas seulement au propriétaire, comme définir un horodatage arbitraire. Je soupçonne que cela utimensat
fait en fait une vérification basée sur les autorisations et détermine que les autorisations disent que vous ne pouvez pas écrire dans ce fichier, même si le système de fichiers autoriserait une opération d'écriture indépendamment des autorisations réelles.
Le principal avantage des extensions CIFS POSIX lorsque le côté serveur s'exécute avec les autorisations d'un utilisateur non root est de reporter le bit exécutable et éventuellement la propriété du groupe. Il peut être moins déroutant si vous mappez la propriété de l'utilisateur à un seul utilisateur côté client avec l' forceuid
option de montage.