Existe-t-il un lien symbolique standard vers le répertoire personnel des utilisateurs actuels?


9

Le shell peut s'étendre ~à votre répertoire personnel. $HOMEa généralement le même accord, mais souvent vous voulez vous référer au répertoire de base des utilisateurs actuels à partir d'un contexte qui ne prend pas en charge une telle expansion.

J'ai eu des fichiers de configuration où cela $HOMEfonctionne mais ~pas et vice versa.

Je suppose que le fusible pourrait fournir quelque chose dans ce sens, quelque chose comme /var/myself->$HOME

Avec cela, je pouvais placer des valeurs dans des fichiers de configuration pour pointer vers des choses comme /var/myself/backdrops/pornography/wtf/yarly.jpg

Y a-t-il déjà quelque chose comme ça? Sinon, y a-t-il de bonnes raisons pour qu'il n'y ait pas quelque chose comme ça?


2
Cela semble en fait être une très bonne idée, et le fusible pourrait le faire assez trivialement si je me souviens bien de l'interface
Michael Mrozek

Réponses:


6

Je comprends votre préoccupation, mais la réponse est «non», il n'y a rien de tel.
La méthode habituelle consiste à demander au système d'exploitation le chemin d'accès de l'utilisateur ou à obtenir la variable $ HOME.

Toutes ces options nécessitent toujours un certain codage de l'application. De nombreuses applications, comme bash, proposent l'alias ~ (open (2) ne traduit pas cela).

Bien sûr, un vfs ou un module de fusible pourrait être implémenté pour ce faire. Il y a probablement quelque chose à faire, je vais demander ça!

Mais est-ce vraiment nécessaire? Vous pouvez utiliser une solution de contournement comme:



0

Une astuce (sous Linux, au moins) serait de changer de répertoire $HOMEavant d'exécuter l'application, puis de l'utiliser /proc/self/cwd/...dans le fichier de configuration.


J'aime le piratage de cela, mais il est probable que cela entraînerait des problèmes si le processus modifie le répertoire actuel. Je voudrais un / proc / PID / iwd pour le répertoire de travail initial.
Lerc

... et d'ailleurs un / proc / PID / home
Lerc

@Lerc, si elle va dans un fichier de configuration , il doit être /proc/selfpas /proc/PID, puisque vous ne pouvez pas savoir à l' avance ce que le PID va être.
Neil Mayhew,

@Lerc, oui, si le processus change de répertoire, il échouera, mais généralement les programmes lisent le fichier de configuration une fois au démarrage, puis mettent en cache les valeurs en mémoire. Tout dépend du programme avec lequel vous travaillez, et si le programme n'offre pas assez de flexibilité, que ce soit sur la ligne de commande ou dans la syntaxe du fichier de configuration, alors vous êtes bloqué.
Neil Mayhew,

Oui, je voulais dire / proc / PID / home pour signifier que tous les répertoires proc / PID devraient prendre en charge cela et donc inclure / proc / self
Lerc

0

La plupart des programmes vous permettent de spécifier un chemin d'accès au fichier de configuration sur la ligne de commande. Vous pouvez donc écrire un wrapper qui prend un fichier de configuration standard, le filtre pour remplacer des choses comme $HOMEpour l'utilisateur actuel, puis transmet le fichier de configuration temporaire modifié au programme.


Si vous faites cela, vous avez effectivement pris la possibilité de spécifier un chemin d'accès au fichier de configuration loin de l'utilisateur. Cela pourrait être faisable si vous avez envie de rallye avec un exe wrapper.
Lerc

0

Vous pouvez obtenir le pid de requestin user et demander le système de son répertoire personnel. C'est donc possible.

Cependant, je ne sais pas s'il n'existe aucun programme SUID qui supposerait que FS est statique.

Éditer:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

Le code ci-dessus n'est pas idéal mais devrait fonctionner pour les cas courants.


Comment trouveriez-vous son répertoire personnel une fois que vous savez de quel utilisateur il s'agit?
WhyNotHugo

Utilisation de getpwuidou getpwuid_r.
Maciej Piechotka
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.