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é?
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
.
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.
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