Homegroups : comment ça marche ?

Il y a des choses dans Windows qui ne changent pas. Comme le SRM par exemple. Le Security Reference Monitor est cette petite chose qui contrôle tous les accès à des objets : chaque fois qu’un processus demande à accéder à un objet (un fichier par exemple), le SRM vérifie obligatoirement les permissions sur l’objet (quels utilisateurs et/ou groupes ont le droit de faire quoi) et le jeton du processus, représentant son identité (utilisateur, groupes).

Cela se corse un peu par le réseau, notamment dans un contexte de type workgroup. Dans ce contexte, si depuis une MachineA je veux lire un fichier situé sur MachineB, je dois m’authentifier avec un compte local à MachineB, et ce compte doit avoir la permission adéquate à la fois sur le partage réseau et le fichier.

Cela est simplifié en général par deux mécanismes. Le premier est le mode de partagé simplifié (seul disponible sur les versions Home / Familiales de Windows depuis XP), dans lequel on est systématiquement authentifié en tant qu’Invité sur la machine cible. Le second, dans cas du mode de partage standard, consiste à utiliser le même compte et le même mot de passe sur les deux machines. Ainsi si MachineA\User1 et MachineB\User1 existent et ont le même mot de passe, l’authentification sera automatique.

Un détail qui a son importance ici : un autre mécanisme a été introduit depuis Windows XP : l’interdiction par défaut d’accéder à des ressources par le réseau avec un compte sans mot de passe.

Dans WIndows 7 apparaissent ce que l’on appellent les Homegroups. L’idée est de prendre en compte le fait que, dans la famille, on rencontre de plus en plus des PC individuels : chaque membre de la famille a son PC. De plus, dans la plupart des cas, chaque PC a un seul compte (l’utilisateur), qui est administrateur (d’où l’intérêt d’UAC au passage… ) et sans mot de passe. D’où des problèmes sans fin avec le partage de fichiers entre les membres de la famille.

Partant également du principe qu’en général les membres de la famille veulent partager leurs fichiers (photos, vidéos, musique), le homegroup simplifie énormément la manière de procéder :

D’abord, le homegroup est fondé sur un seul mot de passe, qui est généré par le système, et peut être copié ou imprimé pour être partagé dans la famille.

Une fois le homegroup rejoint, chacun a la possibilité de choisir quelles librairies il souhaite partager avec le reste de la famille :

Homegroup settings

On peut également filtrer fichier par fichier ce que l’on souhaite partager ou non. Chacun peut ensuite accéder aux librairies partagées sur les autres ordinateurs de la famille, sans s’occuper des comptes ou des mots de passe de chacun :

Homegroup

Comment cela se passe-t-il ? Étant donné que des fichiers partagés sont dans le profil de l’utilisateur, l’accès ne peut pas être anonyme, ni Invité. Les utilisateurs de partagent pas leurs mots de passe, ceux-ci peuvent d’ailleurs être vides, donc la connexion ne se fait pas au nom d’un utilisateur.

Rien de magique à cela, et l’on reste bien dans le cadre d’un partage tout à fait normal. Chaque machine dans un Homegroup a un compte d’utilisateur nommé HomeGroupUser$ . Ce compte appartient à un groupe nommé HomeUsers. Lancez lusrmgr.msc pour les voir. Ce groupe a les permissions sur les répertoires et fichiers partagés via les librairies.

Le contrôle d’accès est donc fait sur le compte HomeGroupUser$ qui est utilisé pour l’authentification. Le partage utilisé s’appelle Users, et correspond au dossier C:\Users. Ce partage a comme permissions BUILTIN\Administrators:F et Everyone:F (F pour Full Control), ce qui peut sembler un peu ouvert (!), mais tout le contrôle est fait sur les permissions NTFS des répertoires et fichiers : l’utilisateur du homegroup n’aura accès qu’au fichiers sur lesquels le groupe HomeUsers a des permissions.

Illustration sur la machine cible, avec l’outil ShareWatch qui affiche les connexions actives sur la machine cible :

ShareWatch

On voit le partage Users ouvert par HomeGroupUser$ , et les répertoires ouverts dans ce partage.