web-dev-qa-db-fra.com

Changer le répertoire personnel en toute sécurité

J'essaie de mettre à jour en toute sécurité le répertoire personnel comme spécifié dans /etc/passwd, mais les utilitaires Linux standard - usermod et vipw - pour ce faire ne sont pas fournis par Cygwin.

Quelqu'un pourrait-il me dire comment ils ont changé cela dans Cygwin?

82
sblundy

J'ai fini par quitter tous mes shells cygwin et les éditer à la main dans un éditeur de texte. Jusqu'ici tout va bien.

Remarque: n'échappez pas aux espaces du répertoire "Documents and Settings". L'entrée ressemblera

user:...:/cygdrive/c/Documents and Settings/user:/bin/bash

La ligne est symbolisée sur le : personnage.

19
sblundy

EDIT: Pour les versions récentes de Cygwin (1.7.34 et au-delà), voir cette nouvelle question .

Comme la réponse de sblundy, vous pouvez toujours éditer à la main.

Mais si vous voulez le faire de manière "officielle", utilisez la commande spécifique à cygwin mkpasswd . Voici un extrait des documents officiels sur mkpasswd :

Par exemple, cette commande:

Exemple 3.11. Utilisation d'une autre racine d'accueil

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd

mettrait les répertoires personnels des utilisateurs locaux dans le répertoire "Profils" de Windows.

Il y a un tas d'autres commandes vraiment utiles décrites sur la page de documentation Cygwin Utilities (qui inclut mkpasswd) . L'utilisation de cygpath dans l'exemple ci-dessus est un autre de ces outils spécifiques à cygwin.

Pendant que vous y êtes, vous voudrez probablement également lire la documentation tilisation efficace de Cygwin avec Windows . Il y a un tas de très bons conseils.

96
netjeff

La réponse la plus simple que j'ai trouvée est de faire de/home un lien logiciel vers votre répertoire Windows Home/UserProfile

cd /
mv home oldhome
ln -s "$(cygpath -H)" home

J'ai utilisé cygpath car il obtiendra l'emplacement approprié pour le répertoire HOME sur la version actuelle de Windows. Sur ma boîte cygpath -H résultats /cygdrive/c/Users

16
M Smith

Pour l'utilisateur actuel, les éléments suivants ont fonctionné pour moi:

  1. Fermez Cygwin.
  2. Définissez la variable d'environnement utilisateur HOME Windows.
  3. Démarrez Cygwin.
  4. exécutez "mkpasswd -c -p" $ (cygpath -H) ">/etc/passwd".
  5. Redémarrez Cygwin.

J'ai confirmé que cela fonctionnait en exécutant ssh-keygen sans aucun argument. Après avoir effectué cette modification, l'application enregistre désormais par défaut la clé dans/cygdrive/c/Users/user au lieu de/home/user.

Je ne sais pas si la définition de HOME est requise, mais je l'ai quand même effectuée selon les instructions de configuration de TortoiseGit avec Cygwin en utilisant la documentation officielle de Tortoise pour le support non officiel de Cygwin ici . Définir HOME seul n'était cependant pas suffisant pour que ssh-keygen reconnaisse le changement de répertoire personnel.

Notez également que la documentation officielle de Cygwin sur ce problème peut être trouvée ici .

Confirmé dans Windows 7 à l'aide de Cygwin v1.7.35 64 bits.

8
Samuel

J'ai toujours défini HOME comme une variable d'environnement spécifique à l'utilisateur dans les propriétés de l'ordinateur.

4
JesperE

Pour éviter les problèmes causés par la présence d'espaces dans le chemin d'accès à votre répertoire personnel, utilisez la forme abrégée du répertoire "Profils" de Windows, c'est-à-dire /cygdrive/c/DOCUME~1/user.

Vous pouvez le faire en tapant la commande:

mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
3
chopp3r

J'aime garder mon installation cygwin synchronisée avec une clé USB et un autre ordinateur, donc je déteste coder en dur le répertoire personnel. J'utilise le cygwin.bat suivant:

echo off
SETLOCAL
set Shell=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

SETLOCAL et ENDLOCAL s'assurent que Shell et HOME n'encombrent pas les variables env existantes pour d'autres programmes. HOME=%~dp0..\..\doc\unix définit HOME comme deux répertoires, dans le sous-répertoire doc/unix. Puis dans ....\doc\unix.bashrc, j'inclus PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin". Je n'ai pas utilisé start /wait %CD%\bin\bash pour démarrer bash, car j'utilise Console2 , donc je n'ai pas besoin d'une fenêtre cmd supplémentaire.

2
P. Myer Nore

Utilisation de la variable d'environnement Windows: HOME

Cela fonctionne pour moi pour une solution permanente, non portable et non réseau; c'est-à-dire la définition permanente de la variable d'environnement HOME dans Windows.

Notez que cela n'affecte pas ssh ou telnet sessions qui se réfèrent toujours à /etc/passwd

ref: Configurer la variable d'environnement Cygwin- My HOME n'est pas ce que je veux.

CMD

Pour actuel utilisateur (doit être exécuté une fois par utilisateur) ::

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Pour nouveau Utilisateurs:

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Remarque: Carets ^ avant pourcent-signes%

IMPORT FILE REG

Importez ce fichier reg ( actuel utilisateur):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

Pour les utilisateurs de nouveau:

Windows Registry Editor Version 5.00

[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

REGEDIT

Dans Regedit, sous:

Pour actuel utilisateur:

HKEY_CURRENT_USER\Environment

Pour nouveau Utilisateurs:

HKU\.DEFAULT\Environment

Créer [~ # ~] home [~ # ~] en tant que nouveau Valeur de chaîne extensible (* REG_EXPAND_SZ *) et insérez % USERPROFILE%

2
wyrdR

Original réponse par Christopher de ailleurs

Cygwin 1.7.34+

Pour ceux qui utilisent Cygwin 1.7.34 ou supérieur Cygwin prend en charge la configuration de la façon de récupérer le répertoire personnel, le shell de connexion et les informations gecos dans /etc/nsswitch.conf. Ceci est détaillé dans la section Guide de l'utilisateur Cygwin:

Si vous avez déjà créé un /etc/passwd ou /etc/group fichier, vous souhaiterez les supprimer et configurer Cygwin à l'aide du nouveau modèle de sécurité Windows pour les mappages POSIX.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

Le /etc/nsswitch.conf des dossiers db_home: setting définit comment Cygwin récupère le répertoire personnel de l'utilisateur. Le paramètre par défaut pour db_home: est

db_home: /home/%U

Donc, par défaut, Cygwin définit simplement le répertoire home sur /home/$USERNAME. Vous pouvez toutefois changer cela pour pointer vers tout autre chemin personnalisé que vous souhaitez. Les caractères génériques pris en charge sont les suivants:

  • %u Le nom d'utilisateur Cygwin (en minuscule u).
  • %U Le nom d'utilisateur Windows (c'est U majuscule).
  • %D Domaine Windows dans le style NetBIOS.
  • %H Répertoire personnel Windows de style POSIX. Notez que, pour le db_home:, cela n'a de sens que juste après la barre oblique précédente, comme dans db_home: /%H/cygwin
  • %_ Puisque l'espace et les caractères TAB sont utilisés pour séparer les schémas, un espace dans le nom de fichier doit être donné comme %_ (c'est un trait de soulignement).
  • %% Un caractère en pourcentage.

Au lieu d'un chemin, vous pouvez spécifier l'un des quatre schémas de chemin nommés prédéfinis.

  1. windows Le répertoire de base de l'utilisateur est défini sur le même répertoire que celui utilisé comme répertoire de base de Windows, généralement quelque chose comme %USERPROFILE% ou C:\Users\$USERNAME. Bien sûr, le répertoire Windows est converti en style POSIX par Cygwin.

  2. cygwin AD uniquement: le répertoire personnel de l'utilisateur est défini sur le chemin POSIX indiqué dans l'attribut cygwinHome de la classe auxiliaire cygwinUser. Voir aussi la section intitulée "Le schéma cygwin" .

  3. unix AD uniquement: le répertoire personnel de l'utilisateur est défini sur le chemin POSIX indiqué dans l'attribut unixHomeDirectory de la classe auxiliaire posixAccount. Voir aussi la section intitulée "Le schéma unix" .

  4. desc Le répertoire personnel de l'utilisateur est défini sur le chemin POSIX indiqué dans le paramètre home = "..." semblable à XML dans l'attribut de description de l'utilisateur dans SAM ou AD. Voir la section intitulée "Le schéma desc" pour une description détaillée.

Ce qui suit rendra le répertoire personnel de l'utilisateur dans Cygwin identique à celui utilisé pour le répertoire personnel Windows.

db_home: windows

Cygwin 1.7.33 ou version antérieure

Pour ceux qui utilisent Cygwin 1.7.33 ou une version antérieure, mettez à jour vers la dernière version Cygwin et supprimez _ précédemment utilisé /etc/passwd et /etc/group fichiers, puis suivez les étapes ci-dessus.

Sinon, suivez ces anciennes étapes ci-dessous.

Tout d'abord, définissez une variable d'environnement Windows pour HOME qui pointe vers votre profil utilisateur:

  1. Ouvrez Système sur le Panneau de configuration
  2. Dans l'onglet Avancé, cliquez Variables d'environnement (vers le bas)
  3. Dans la zone Variables utilisateur, cliquez sur "Nouveau ..."
  4. Pour Nom de variable, entrez HOME
  5. Pour Valeur variable, entrez %USERPROFILE%
  6. Cliquez sur OK dans toutes les boîtes de dialogue ouvertes pour appliquer ce nouveau paramètre

Nous allons maintenant mettre à jour le Cygwin /etc/passwd fichier avec Windows %HOME% variable que nous venons de créer. Les connexions shell et les connexions distantes via ssh reposeront sur /etc/passwd pour leur indiquer l'emplacement de l'utilisateur $HOME chemin.

À l'invite de commande bash Cygwin, tapez ce qui suit:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

Le -d switch indique à mkpasswd d'inclure les utilisateurs DOMAIN, tandis que -l est uniquement destiné aux utilisateurs de machines LOCALES. Ceci est important si vous utilisez un PC au travail où les informations utilisateur sont obtenues à partir d'un contrôleur de domaine Windows.

Maintenant, vous pouvez également faire la même chose pour les groupes, bien que cela ne soit pas nécessaire à moins que vous n'utilisiez un ordinateur faisant partie d'un domaine Windows. Cygwin lit les informations de groupe dans les bases de données des comptes Windows, mais vous pouvez ajouter un /etc/group fichier si votre machine est souvent déconnectée de son contrôleur de domaine.

À l'invite bash Cygwin, tapez ce qui suit:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

Maintenant, quittez Cygwin et redémarrez-le. Vous devez constater que votre chemin HOME pointe vers le même emplacement que votre profil d'utilisateur Windows, c'est-à-dire /cygdrive/c/Users/username

2
Christopher
cd /home
rm -rf chris
ln -s /cygdrive/z chris

Je ne sais pas vraiment si c'est la solution la plus sûre mais c'est une solution possible qui fonctionne pour moi;)

1
kitingChris

J'ai modifié mon fichier/etc/passwd directement (en m'assurant que rien d'autre n'y accède) et j'ai changé toutes les références à/home pour être/Users (sous Windows 7). J'ai constaté que, pour que tout fonctionne correctement, je devais supprimer tous les répertoires du répertoire/home (ou les déplacer vers l'autre emplacement approprié). Sinon, cygwin développerait une personnalité divisée où, par exemple, 'bash -l' commencerait dans/home/Pablo mais $ HOME serait/Users/Pablo et emacs semblerait faire l'inverse. Une fois que j'ai supprimé/home/Pablo, tout a bien fonctionné.

0
Pablo Halpern

Je n'avais besoin que d'être dans C:\Users\username quand je démarre cygwin. Donc, je viens d'ajouter à .bashrc et .profile

cd ${HOMEPATH}

Si vous préférez utiliser ~/. au lieu de $HOMEPATH, vous pouvez également ajouter les éléments suivants:

export HOME=${HOMEPATH}

De cette façon, je ne dérange pas l'installation de cygwin.

0
user123456789