13 votes

Samba - Créer des partages de sous-répertoire avec leurs propres permissions

J'ai un partage Samba contenant plusieurs dossiers comme celui-ci :

share
  - folderA
  - folderB
  - folderC
  - folderD

Il y a environ 20 utilisateurs qui accèdent à ces parts. Chaque utilisateur peut avoir son propre accès à certains des répertoires, par exemple Ben peut accéder au dossier A et au dossier C, mais pas au dossier B et au dossier D. Jenny peut accéder au dossier B et au dossier C, et ainsi de suite. Jenny peut accéder au dossier B et au dossier C, et ainsi de suite.

Je ne veux pas que les utilisateurs aient à monter chaque dossier dont ils ont besoin. Je veux qu'ils montent le dossier "share" qui contient tous les sous-dossiers. L'accès est ensuite limité en définissant les permissions linux.

J'ai créé un groupe pour chaque sous-répertoire et ajouté les utilisateurs à ces groupes. Le contrôle d'accès fonctionne parfaitement pour les fichiers existants. Mais chaque fois qu'un utilisateur crée un fichier dans un sous-répertoire, il est refusé à tous les autres utilisateurs ayant le droit d'accès en lecture/écriture dans ce répertoire. Pour résoudre ce problème, j'ai joué avec le masquage samba mais je n'arrive pas à le faire fonctionner.

Mon conf Samba ressemble à ceci :

guest ok = no

[global]
workgroup = WORKGROUP
security  = user
encrypt passwords = yes

[Share]
path        = /var/samba
valid users = @everybody
read only   = no
writeable   = yes

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderA

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderB

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderC

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderD

Donc, évidemment, chaque utilisateur est dans le groupe everybody, donc ils peuvent monter le partage avec les sous-répertoires. L'accès pour chaque sous-répertoire fonctionne parfaitement bien. Mais chaque fois que Ben crée un fichier dans le dossierC, le fichier obtient les permissions -rwxr--r-- alors qu'il devrait être -rwxrwx---.

Je pense que les partages pour les dossiers individuels ne fonctionnent pas du tout car j'ai essayé de définir writeable = non et read only = oui pour le tester. J'ai redémarré smbd et nmbd et remonté le partage réseau (dans Windows 10). Les utilisateurs ont pu créer des fichiers et modifier les leurs.

Cela fonctionne sur un raspberry pi avec raspbian. Le disque dur contenant les fichiers est formaté en ext4 et monté via fstab.

0 votes

Pour imposer les droits d'accès souhaités aux fichiers, utilisez force create mode = 770 dans le folderC de votre configuration.

0 votes

Merci, cela n'a pas résolu le problème mais j'ai remarqué que j'avais des espaces dans les chemins de mon vrai smb.conf : [folderA] path = /var/samba/quelque dossier avec des espaces. J'ai résolu ce problème en entourant le chemin de " ("/var/samba/quelque dossier avec des espaces"). Les paramètres du paragraphe [folderA] ne sont utilisés que lorsque l'utilisateur monte directement [folderA], mais les paramètres ne sont pas utilisés lorsque l'utilisateur monte [share] et navigue dans folderA. Les paramètres de [share] sont utilisés pour le dossier A. Comment puis-je contourner les paramètres de [share] pour le dossier A sans monter directement le dossier A mais en y accédant depuis [share] ?

6voto

Oleg Bolden Points 1637

Essayez cette configuration (pour les sections de partage) :

[Share]
path        = /var/samba
valid users = @everybody
force group = +everybody
writeable   = yes
create mask = 0660
force create mode = 0110
directory mask = 0770

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
force group = +users_folderA
browseable = no

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
force group = +users_folderB
browseable = no

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
force group = +users_folderC
browseable = no

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
force group = +users_folderD
browseable = no

N'oubliez pas de vérifier la configuration et de redémarrer samba :

# testparm
# service smbd restart
# service nmbd restart

Définir les autorisations :

chown root:everybody /var/samba
chmod 770 /var/samba
chown root:users_folderA /var/samba/folderA
chmod 2770 /var/samba/folderA
chown root:users_folderB /var/samba/folderB
chmod 2770 /var/samba/folderB
chown root:users_folderC /var/samba/folderC
chmod 2770 /var/samba/folderC
chown root:users_folderD /var/samba/folderD
chmod 2770 /var/samba/folderD

De cette façon, l'accès direct aux dossiers internes n'est pas autorisé. De plus, ils ne sont pas du tout visibles et on ne peut y accéder que par le dossier parent.

2 votes

Merci, ça a marché. Maintenant, nous avons un autre problème : Excel 2016 n'est pas en mesure d'enregistrer des fichiers de plus de 13 Ko sur Samba. Mais c'est un autre sujet. Merci beaucoup pour votre aide !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X