Changer owner, permissions NTFS sur un système de fichiers Windows depuis une machine Debian

Bonjour à tous,

Dans le cadre d’un stage de fin d’étude, une partie de mon travail porte sur la gestion des permissions NTFS.

Voici ce que je recherche à réaliser :

J’ai un serveur de fichiers (Windows) qui contient des répertoires.

J’aimerais pouvoir créer un répertoire sur ce serveur de fichiers, changer les permissions NTFS et enfin changer le owner.

J’ai déjà essayé de monter le système de fichiers windows dans /etc/fstab avec cifs, mais avec ceci, je peux uniquement créer des fichiers/répertoires.

J’ai cependant lu des informations à propos de “ntfs-3g” qui permettrait de le faire mais je ne comprend pas comment le mettre en place…

J’ai ajouté une partition sur ma Debian que j’ai formaté en ntfs.
J’ai créé un dossier pour le point de montage : mkdir /media/windows
J’ai monté la nouvelle partition sur le point de montage dans fstab :

 /dev/sdb1 /mnt/windows ntfs-3g default 0 0

Mais nulle part je lie le système de fichiers Windows à Debian.

Comment puis-je opérer ?

Je vous remercie d’avance pour votre aide !

Stagiairereseau

Pour ce servir du paquet ntfs-3g, il faut tout d’abord installer le paquet fuse, et par la suite on peut ajouter des systèmes de fichiers supplémentaires (NTFS, exFAT, etc…).

Bonjour,

Tout d’abord merci pour ta réponse ! S’il s’agit de “apt-get install fuse”, j’ai déjà ce paquet :slight_smile: .
Si vous savez m’aiguiller :

Mon système de fichiers Windows est accessible par le réseau via //mainad/DomainUsers

Comment dois-je le monter dans fstab avec ntfs-3g pour y avoir accès pour gérer les permissions, etc.

Si vous avez une marche à suivre j’en serais très reconnaissant car ça fait longtemps que je bloque sur le problème …

NB : Le serveur de fichiers Windows et le serveur Debian ne se trouvent pas sur la même machine.

Merci d’avance!

1 J'aime

Cela va au-delà de mes compétences, j’en suis navré, je ne sais pas monter un disque en réseau. A mon avis, ça devrait certainement être possible avec man mount j’imagine.

Petit lien à visiter : Monter automatiquement des disques distants :

L’option pour le ntfs ne sera bien entendu pas la même que pour sshfs.

1 J'aime

D’accord, pas de souci, merci quand même !

1 J'aime

Bonjour,

Je regarde votre solution , je ferai un retour pour dire si j’y suis parvenu ou non !

Merci beaucoup !

Pas d’expérience récente, mais il me semble que le premier point à regarder sont les permissions côté Windows. Dans les temps anciens j’avais un portable professionnel sous XP, l’admin réseau de ma boite s’était vanté de pouvoir faire ce qu’il voulait à distance dessus, je l’avais mis au défi… il n’a jamais pu. Mais je ne me souviens pas des chemins à parcourir dans le labyrinthe windows pour accéder aux permissions système.
Une piste côté linux : samba et les ACL
https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs

P.S. Ton problème me semble relever d’un bureau à distance pour un serveur Windows. Voir VNC, ultraVNC

Bonjour @jweber et merci pour vos éléments de réponse :slight_smile:

Un bureau à distance n’est pas du tout ce que je recherche car je ne l’ai pas précisé mais le but de réussir à faire ceci c’est que je dois exécuter ces commandes depuis une interface web que je développe en php pour créer des utilisateurs dans l’active directory.

Je suis actuellement en stage en entreprise et ils possèdent un système de fichiers sous windows qui contient des répertoire au nom de chaque utilisateur du domaine qui leur sert d’espace de stockage personnel…

Et donc lors de la création d’un nouvel utilisateur dans l’AD depuis mon interface devrait créer automatiquement un répertoire à leur nom, avec le bon propriétaire et les bonnes permissions…

Effectivement ce n’est pas le même problème !
Je ne suis pas gourou de PHP, mais on doit pouvoir trouver des pistes.

https://openclassrooms.com/courses/executer-php-en-cli-console
http://fr.php.net/manual/fr/function.system.php
https://www.sitepoint.com/community/t/run-a-vbs-from-php/3497
https://support.microsoft.com/fr-fr/help/825751/how-to-use-xcacls-vbs-to-modify-ntfs-permissions

je tiens une piste, dès qu’elle est 100% opérationnelle, je la partage ici ! :slight_smile:
Sûrement d’ici la fin de journée !

Bonjour à tous !

J’ai enfin trouvé des solutions à mon problème/demande !

La première solution que j’ai pu tester, c’est smbcacls, il s’agit d’un élément compris dans le package smb-client. Voici la man page : https://www.samba.org/samba/docs/current/man-html/smbcacls.1.html.

Grâce à cet outil, il est très facile de réaliser des opérations sur les permissions NTFS, changer le owner d’un fichier sur un système de fichiers à distance.
Voir quelques exemples ici : https://forums.freenas.org/index.php?threads/how-to-edit-cifs-permissions-from-the-cli.40594/.

Cependant, je n’ai pas pu utiliser cette solution car mon système de fichiers Windows est plus précisément un DFS (Distributed File System), et il s’avère qu’à travers de celui-ci, je n’ai pas réussi à utiliser smbcacls. Si quelqu’un connait la solution, je serais heureux de savoir comment faire :slight_smile:.

Pour réaliser exactement ce dont j’avais besoin, j’ai utilisé la commande ssh avec laquelle j’envoi directement la commande à exécuter sur la machine distante (pour moi, il s’agit d’exécuter un script .bat Windows depuis une machine Linux).

Pour cela, j’ai procédé comme-suit :

Il ne faut pas oublier que lorsqu’on réalise une connexion à distance avec ssh, le mot de passe de l’utilisateur avec lequel on se connecte va être demandé.

Pour éviter cela, depuis ma machine cliente (mon serveur web Linux), j’ai généré une nouvelle clé ssh à l’aide de la commande ssh-keygen -t rsa -b 2048 avec l’utilisateur www-data . Elle vous génère ainsi une clé privée et une clé publique. La clé publique sera à renseigner plus tard dans les clés autorisées du serveur ssh Windows.

Il est demandé d’indiquer un nom pour les 2 nouvelles clés (au choix).

Ensuite, il vous demande d’entrer une passphrase (un mot de passe). Pour ma part, je ne renseigne pas de passphrase car ce sera mon interface web (Apache (www-data)) qui va automatiquement lancer une connexion à distance ssh, elle ne pourrait donc pas la démarrer sans renseigner ce mot de passe.

Après cela, j’ai créé le fichier config dans /root/.ssh dans lequel j’ai renseigné l’utilisation de la clé privée (la clé privé étant celle sans l’extension .pub).

image

La première ligne renseigne l’hôte distant et la deuxième identique le chemin vers la clé privée de www-data.

Maintenant, du côté Windows, j’ai installé openssh-serveur (tuto ici : https://www.server-world.info/en/note?os=Windows_Server_2012&p=openssh). Premièrement, j’ai copié le contenu de la clé publique (.pub) dans le fichier des clés autorisées qui se trouve dans c:\Users\xxx.ssh\authorized_keys. Deuxièmement, dans le fichier sshd_config, j’ai décommenté la ligne PubkeyAuthentication yes et changé les paramètres de PasswordAuthentication et PermitEmptyPassword à no.

Par sécurité, j’ai relancé le service sshd.

Je peux dès lors exécuter mon script.bat (stocké sur Windows) depuis mon client linux vers Windows sans renseigner de mot de passe : ssh Administrator@172.16.0.164 “c:\Users\Administrators\script.bat argument1 argument2”.

Pour terminer, pour faire exécuter cette commande depuis mon code php, j’ai utilisé la commande ssh2_connect qui renseigne l’hôte à contacter, ensuite ssh2_auth_pubkey_file où je renseigne l’utilisateur avec lequel je veux me connecter, le chemin vers les clés privées et publiques et pas de mot de passe comme je n’ai pas renseigné de passphrase !

Et finalement, j’exécute ma commande à l’aide de ssh2_exec !

image

En espérant que ça puisse aider d’autre personne dans le futur.

Un tout grand merci aux personnes qui ont pris la peine de proposer des solutions, ça fait ultra plaisir d’avoir des gens qui prennent de leur temps pour dépanner des gens qui galèrent !

@Eman @Clochette @jweber

1 J'aime

Cela m’a l’air très complet et très recherché, bravo.

1 J'aime