GNU/Linux >> Tutoriels Linux >  >> Linux

Comment forcer la propriété d'un utilisateur/groupe sur des fichiers sur un partage Samba

La demande

Vous disposez d'un répertoire de disque partagé entre les clients Linux et Microsoft Windows. Plusieurs utilisateurs ont besoin d'accéder à ce partage de répertoire, mais lorsque des fichiers sont créés ou modifiés à partir des clients Linux, les autorisations de fichiers Linux sont appliquées, ce qui rend difficile ou impossible l'accès à ces fichiers pour les clients Windows.

Vous souhaitez partager ces ressources disque de manière homogène.

La solution

En fonction de votre stratégie de maintenance globale, l'une des techniques suivantes peut être utilisée.

1. Forcer la propriété d'un utilisateur ou d'un groupe

Dans le fichier /etc/samba/smb.conf vous pouvez utiliser la directive :

force user = [user]
force group = [group]

Cela remplacera les attributs de propriété de fichier normaux pour l'accès aux fichiers ou aux répertoires. Par défaut, les informations d'identification effectives de l'utilisateur sont utilisées. En utilisant l'une (ou les deux) des directives ci-dessus, les informations d'identification associées peuvent être contraintes à une valeur spécifique. Ainsi, tous les accès aux fichiers seront effectués comme si le processus d'accès s'exécutait avec les informations d'identification spécifiées.

Si la directive prend la forme :

force group = +[group]

alors seuls les utilisateurs Linux qui sont déjà membres de [groupe] verront leur groupe principal changé en [groupe] pour la durée de l'accès. Les utilisateurs Linux qui ne sont pas déjà membres du [groupe] ne sont pas concernés par cette directive.

2. Utiliser les autorisations d'accès au répertoire

Considérez le directeur /tmp :c'est un bloc-notes qui permet à plusieurs utilisateurs de créer, modifier ou supprimer des fichiers. Pour empêcher l'utilisateur A de supprimer un fichier appartenant à l'utilisateur B, le répertoire a le sticky bit défini :

$ ls -ld /tmp
drwxrwxrwt 14 root root 360 Mar 19 08:25 /tmp

Remarquez le t flag des permissions :cela indique le "sticky ” est défini pour le répertoire. N'importe quel utilisateur peut créer des fichiers dans ce répertoire, mais seul l'utilisateur propriétaire peut supprimer l'entrée; sans le sticky bit, n'importe qui pourrait supprimer n'importe quel fichier puisque le répertoire a des autorisations mondiales de lecture/écriture/exécution.

1. Une façon de contourner ce problème consiste à faire en sorte que le répertoire SAMBA partagé appartienne à l'utilisateur SAMBA :

# /bin/mkdir [/path/to/SAMBA/share]
# /bin/chown -R [user]:[group] -R [/path/to/SAMBA/share]

2. Ensuite, activez le bit setgid pour le répertoire afin de forcer les informations d'identification de groupe de toute entrée d'annuaire à correspondre aux informations d'identification de groupe de ce répertoire :

# /bin/chmod g+s [/path/to/SAMBA/share]
# /bin/ls -ld [/path/to/SAMBA/share]
drwxrws--- 1 [user] [group] 0 Mar 19 09:07 [/path/to/SAMBA/share]

3. Créez maintenant un fichier dans [/path/to/SAMBA/share] en tant qu'utilisateur root. Le fichier appartiendra à root mais son groupe sera le groupe [group] :

# /bin/mkdir /example
# /bin/chown root:oracle /example
# /bin/chmod g+s /example
# /bin/ls -ld /example
drwxr-sr-x 2 root oracle 4096 Mar 19 10:03 /example

4. Enfin, créez un fichier dans /example en tant qu'utilisateur root :

# id
uid=0(root) gid=0(root) groups=0(root)
# touch /example/file
# ls -ld /example /example/file
drwxrws--- 2 root oracle 4096 Mar 19 10:09 /example
-rw-r--r-- 1 root oracle    0 Mar 19 10:09 /example/file

Notez que même si les informations d'identification utilisées pour créer le fichier étaient root:root, les informations d'identification d'accès enregistrées pour le fichier étaient root:oracle; la propriété du groupe a été automatiquement définie sur le groupe du répertoire.

Remarque

La méthode setgid décrite ci-dessus fonctionne également si le bit setuid est utilisé à la place. Dans l'étape chmod, faites ceci à la place :

# chmod u+s [/path/to/SAMBA/share]

Vous pouvez également remplacer à la fois la propriété du fichier et l'appartenance au groupe comme ceci :

# chmod u+s,g+s [/path/to/SAMBA/share]

Bien qu'il s'agisse d'une capacité fascinante, cela peut avoir une utilité limitée.

3. Utiliser les listes de contrôle d'accès (ACL)

Les listes de contrôle d'accès, ou ACL, sont des fonctionnalités du système de fichiers dans lesquelles un ensemble supplémentaire d'attributs de fichiers est stocké en plus des autorisations normales de propriétaire/groupe/autres fichiers Linux. L'utilisation d'ACL permet un contrôle très précis du type d'accès exact à accorder à un type d'accès donné.

L'implémentation du système de fichiers SAMBA sous Linux prend en charge les listes de contrôle d'accès, mais la fonctionnalité doit être explicitement activée via l'attribut de montage acl. Il est possible d'activer cette fonctionnalité dynamiquement, comme :

# mount -o remount,acl [/path/to/samba/mount/point]

Par exemple, supposons que nous ayons un partage /samba/office/ où nous autorisons n'importe quel utilisateur à écrire un fichier, mais les informations d'identification du groupe doivent être forcées à office. Nous pourrions utiliser la commande :

# mount -o remount,acl /group
# setfacl -R -d -m u::rwx,g:office:rwx,o::r-x /samba/office
# /bin/getfacl /samba/office
# file: samba/office/
# owner: root
# group: office
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group:office:rwx
default:mask::rwx
default:other::r-x

Comme nous établissons cette ACL pour le répertoire, elle s'applique à ses fichiers et sous-répertoires contenus.


Linux
  1. Comment restaurer la propriété par défaut du groupe/utilisateur de tous les fichiers sous /var ?

  2. Comment forcer la propriété du groupe sur le partage Samba ?

  3. Comment utiliser la commande chown pour changer de propriétaire sous Linux

  4. Comment gérer les autorisations/propriétés des fichiers et des répertoires sous Linux

  5. Comment accorder un accès utilisateur non root aux fichiers de l'appareil

Linux :Comment partager des fichiers sur un réseau local avec woof

Comment partager des fichiers localement sur Linux en utilisant NitroShare

Comment renommer un ou plusieurs fichiers sous Linux

Comment ajouter un utilisateur à un groupe sous Linux

Comment ajouter un utilisateur à un groupe Linux

Comment compresser un fichier sous Linux