1 votes

Liens symboliques basés sur l'identifiant de l'utilisateur

Je me demande comment créer sous Linux quelque chose similaire à un lien symbolique, qui pointera vers différents répertoires pour différents utilisateurs le voyant. J'ai cherché pendant longtemps et trouvé quelque chose appelé hlfsd - Bien sûr, les liens symboliques classiques ne peuvent pas faire cela, car ils se basent sur des éléments du noyau, mais j'ai trouvé quelque chose qui pourrait résoudre ce problème.

Mais, y a-t-il une "meilleure" solution - quelque chose qui me donnera un fichier semblable à un lien, qui pointera vers différents répertoires en fonction, par exemple, de l'identifiant de l'utilisateur?

Fondamentalement, ce que je veux faire :

Imaginons que nous avons un serveur avec une structure de fichiers A/{a1 a2}/{b1 b2}/{c1 c2}, à l'intérieur de ces dossiers, il y a de gros fichiers et ils ne doivent pas être copiés via le réseau. Disons que l'utilisateur U1 souhaite accéder à ces fichiers, donc il peut créer un lien symbolique (jusque-là tout va bien).

Le problème, c'est quand il veut accéder à cette structure et qu'il veut avoir une copie locale uniquement, par exemple, de A/a1/b1/c1. Bien sûr, nous pouvons créer de nombreux liens symboliques localement, qui pointeront vers ces dossiers sur le serveur, mais alors nous n'aurons pas une fonctionnalité très importante pour moi - lorsque quelqu'un ajoute par exemple le dossier A/a1/b1/c3, alors cet utilisateur, qui était lié à cette structure de fichiers et qui a A/a1/b1/c1 en local, ne verra pas les modifications, car tous ses liens ont été créés manuellement.

1voto

Lark Points 1640

FreeBSD avait autrefois une gestion spéciale des liens symboliques, je pense appelée liens symboliques variadiques (bien qu'une recherche Google de ce terme ne trouve pas ce que je voulais). L'idée est que vous ne créez pas de lien symbolique vers un chemin spécifique, mais vers une chaîne qui peut avoir des remplacements.

Non seulement vous êtes embêté car Linux ne prend pas en charge cela, mais il est plus difficile d'implémenter des choses par utilisateur que vous ne le pensez. Sous *BSD, il était conçu pour faire des liens symboliques pour des chaînes simples que le noyau connaîtrait, comme l'architecture (c'est-à-dire i686 vs. x86_64). Ensuite, un lien symbolique de /opt/someapp/bin => /opt/someapp/${arch}/bin a du sens. Mais si vous voulez le faire par utilisateur. Rappelez-vous que les liens symboliques sont résolus dans le noyau, et le noyau ne connaît pas votre nom ou répertoire personnel. Il connaît votre identifiant d'utilisateur, et c'est à peu près tout. Il devrait sauter de la mode noyau à la mode utilisateur pour obtenir des informations vous concernant. Pas impossible, mais très délicat. Ensuite, comment fonctionneraient les programmes setuid ?

En bref, je comprends ce que vous voulez dire, je sais ce que vous voulez, mais vous aurez du mal à y arriver. Peut-être jeter un œil sur fuse et voir s'ils ont quelque chose que vous pouvez utiliser.

Ce n'est pas tout à fait ce que vous avez dit, mais peut-être pouvez-vous le faire avec un contrôle de source. ClearCase (logiciel payant) avait autrefois un module de noyau qui faisait presque tout ce que vous voulez, je ne suis pas sûr s'il le fait toujours. Même sans module de système de fichiers de noyau, vous pouvez probablement mettre en place un contrôle de source distribué pour 60 à 70% de ce que vous voulez.

0voto

Sathyajith Bhat Points 60630

La solution simple que je vois est que dans chaque dossier, il y a un dossier caché .realfiles dans lequel les vrais dossiers se trouvent et les dossiers sur le serveur comme A/a1 ou A/a1/b2 sont des liens symboliques vers le dossier ci-dessus A, donc A/a1 est un lien symbolique vers ../MOUNT/.realfiles/a1 et A/a1/b2 est un lien symbolique vers ../MOUNT/.realfiles/a1/.realfiles/b1.

Maintenant, en gros, le MOUNT sur le serveur est un lien symbolique vers A. mais s'il est possible de changer les liens par utilisateur, pour chaque utilisateur, le dossier MOUNT pointera vers un autre répertoire, alors nous pourrons changer certains liens comme nous le voulons.

(Je sais que c'est une situation spéciale, mais j'ai fait de mon mieux pour l'expliquer correctement)

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