web-dev-qa-db-fra.com

Puis-je avoir un $ HOME différent pour moi en tant que sudo?

Dans notre réseau, tous les identifiants d'utilisateur et de groupe sont distribués via NIS à partir d'un serveur central et le répertoire $HOME de chaque utilisateur se trouve sur un dossier monté qui réside sur ce serveur central.

Il est évident que l'utilisateur a un GID différent de root et que, par conséquent, root n'a pas accès au dossier monté $HOME, ce qui rend difficile (voire impossible) la tâche de l'utilisateur d'exécuter quelque chose comme Sudo apt update car cela est nécessaire. accès à $HOME tel que vu par Sudo.

Ma question est la suivante: puis-je avoir un ordinateur local $HOME pour les fichiers et dossiers auxquels Sudo a besoin d'accéder tandis que le $HOME pour mon autre travail (non -Sudo) continue de pointer vers le dossier monté?

Information additionnelle:

[user@machine ~]$ id
uid=544(user) gid=40(src) groups=40(src),101(systemd-journal)

[user@machine ~]$ Sudo id
uid=0(root) gid=0(root) groups=0(root),40(src),101(systemd-journal),600(visitors),13010(hlcc),19016(identhw),51107(cadadm)

[user@machine ~]$ sh -c 'echo $HOME'
/net/server/home/user

[user@machine ~]$ Sudo sh -c 'echo $HOME'
/net/server/home/user

Comment puis-je modifier le résultat de la dernière ligne (c'est-à-dire que la version Sudo de $HOME) pointe vers un dossier local sur machine au lieu du chemin réseau monté?

Modifier:

Merci pour les réponses. Il s'avère que ma question était presque identique à celle-ci sur unix.stackexchange.com .

J'ai également découvert que le problème que j'avais avec apt-get update n'était pas réellement lié à la variable d'environnement HOME; il était plutôt lié au fait que j'appelais Sudo apt-get update à partir de mon dossier personnel (user), semblable à cette question qui peut être résolu en appelant simplement Sudo apt-get update depuis un autre dossier, par exemple /.

Mais comme ma question ici concernait davantage le HOME vu par Sudo, j’ai accepté réponse de techraf car elle ne nécessite aucun commutateur ni aucune définition supplémentaire dans la ligne de commande Sudo.

4
FriendFX

Vous devez ajouter la ligne suivante à la section sudoers Command Environment (avec Sudo visudo).

Defaults        env_keep -= "HOME"

Ensuite, vous pouvez utiliser vos scripts sans modifications.


Il y a une différence entre Debian et Ubuntu en ce sens que la commande Sudo traite par défaut la variable HOME (plus précisément cette variable, pas l'environnement entier):

  • Dans Debian HOME la valeur est remplacée par le répertoire personnel de la racine (utilisateur cible);

  • Ubuntu conserve le paramètre de l'utilisateur appelant.

Cette réponse sur Unix.SE contient plus de détails.

2
techraf

Si vous appelez Sudo avec -i, vous obtiendrez le domicile de root.

Si vous voulez que Sudo hérite de l'environnement actuel, vous pouvez simplement définir un autre environnement.

Donc, utilisez Sudo -i command ou faites HOME=/wherever Sudo command.

Par exemple:

Sudo -i sh -c 'echo $HOME'

Ce qui vous donne:

/root

Ou:

HOME=/foo Sudo sh -c 'echo $HOME'

Ce qui vous donne:

/foo
6
Stephen