Puis-je avoir certains paramètres universels pour tous mes utilisateurs?
Puis-je avoir certains paramètres universels pour tous mes utilisateurs?
Réponses:
En plus de /etc/profile
ce que d'autres ont mentionné, certains systèmes Linux utilisent maintenant un répertoire /etc/profile.d/
; tous les .sh
fichiers qu'il contient proviendront de /etc/profile
. Il est légèrement plus simple de conserver vos éléments d'environnement personnalisés dans ces fichiers que de simplement les modifier /etc/profile
.
Si votre LinuxOS a ce fichier:
/etc/environment
Vous pouvez l'utiliser pour définir de manière permanente des variables d'environnement pour tous les utilisateurs.
Extrait de: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Si tous les services de connexion utilisent PAM et que tous les services de connexion ont session required pam_env.so
dans leurs /etc/pam.d/*
fichiers de configuration respectifs , alors toutes les sessions de connexion auront des variables d'environnement définies comme spécifié dans pam_env
le fichier de configuration de.
Sur la plupart des distributions Linux modernes, tout est là par défaut - ajoutez simplement les variables d'environnement globales souhaitées à /etc/security/pam_env.conf
.
Cela fonctionne quel que soit le shell de l'utilisateur, et fonctionne également pour les connexions graphiques (si xdm / kdm / gdm / entrée /… est configuré comme ceci).
echo foo>/home/me/bar
redémarre (et me reconnecte ), ce fichier n'est pas créé. (Il y a probablement une façon plus élégante de tester cela, mais je voulais être sûr avant de commenter ici.)
Étonnamment, Unix et Linux n'ont pas vraiment de place pour définir les variables d'environnement globales. Le mieux que vous puissiez faire est de faire en sorte qu'un shell spécifique ait une initialisation spécifique au site.
Si vous le mettez /etc/profile
, cela réglera les choses pour la plupart des utilisateurs de shell compatibles posix. C'est probablement "assez bon" pour des fins non critiques.
Mais quiconque avec un shell csh
ou tcsh
ne le verra pas, et je ne pense pas qu'il csh
ait un fichier d'initialisation global.
/etc/environment
semble en fait définir les variables d'environnement à pour moi, même en tant qu'utilisateur root. Je sais que /etc/environment
c'est sur Amazon Linux et Ubuntu. Je n'ai pas pu vérifier si cela fonctionne pour csh, tcsh ou zsh.
Quelques extraits intéressants de la page de manuel bash:
Lorsque bash est appelé en tant que shell de connexion interactif, ou en tant que shell non interactif avec l'
--login
option, il lit et exécute d'abord les commandes du fichier/etc/profile
, si ce fichier existe. Après avoir lu ce fichier, il recherche~/.bash_profile
,~/.bash_login
et~/.profile
, dans cet ordre, et lit et exécute les commandes de la première qui existe et est lisible. L'--noprofile
option peut être utilisée lorsque le shell est lancé pour empêcher ce comportement.
...
Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes depuis/etc/bash.bashrc
et~/.bashrc
, si ces fichiers existent. Cela peut être inhibé en utilisant l'--norc
option. le--rcfile
L'option file forcera bash à lire et à exécuter des commandes à partir de fichier au lieu de/etc/bash.bashrc
et~/.bashrc
.
Alors jetez un œil à /etc/profile
ou /etc/bash.bashrc
, ces fichiers sont les bons endroits pour les paramètres globaux. Mettez quelque chose comme ceci en eux pour configurer une variable d'environnement:
export MY_VAR=xxx
Utiliser PAM est excellent.
# modify the display PAM
$ cat /etc/security/pam_env.conf
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc DEFAULT=/var/tmp/myproject
Chaque processus exécuté sous le noyau Linux reçoit son propre environnement unique qu'il hérite de son parent. Dans ce cas, le parent sera soit un shell lui-même (engendrant un sous-shell), soit le programme 'login' (sur un système typique).
Comme chaque environnement de processus est protégé, il n'y a aucun moyen d'injecter une variable d'environnement à chaque processus en cours d'exécution, donc même si vous modifiez le shell par défaut .rc / profile, il n'entrera en vigueur que lorsque chaque processus se termine et se recharge. ses paramètres de démarrage.
Regardez dans / etc / pour modifier les variables de démarrage par défaut pour un shell particulier. Sachez simplement que les utilisateurs peuvent (et le font souvent) les modifier dans leurs paramètres individuels.
Unix est conçu pour obéir à l'utilisateur, dans des limites.
NB : Bash n'est pas le seul shell de votre système. Faites très attention à ce que le lien symbolique / bin / sh pointe réellement. Sur de nombreux systèmes, cela pourrait en fait être un tiret qui est (par défaut, sans appel spécial) POSIXLEMENT correct. Par conséquent, vous devez prendre soin de modifier les deux valeurs par défaut, sinon les scripts commençant par / bin / sh n'hériteront pas de vos valeurs par défaut globales. De même, veillez à éviter la syntaxe que seul bash comprend lors de l'édition des deux, aka avoiding bashisms
.