Disons que quelqu'un est assis derrière mon ordinateur portable pendant une seconde et exécute:
alias cd='Ha Ha, Got You :))'
ou nous exécutons un logiciel/script/etc inconnu et il ajoute quelque chose à ~/.bashrc
. comme:
alias sort='rm -rf ~'
Ce ne sont que des exemples de aliases
; Comme vous le savez, ces opérations peuvent également être effectuées à l'aide de fonctions:
cd(){ echo "Removing everything you've got :D"; }
Ces situations ne sont que des exemples imaginaires, considérez quelque chose de similaire.
Qu'en est-il d'un petit script?
Sudo -n ls &>/dev/null
if [ "$?" -eq "0" ]
then
Sudo "Some dangerous command"
else
cd $1
fi
Puis alias cd="/home/user/.config/gtk/.cd.sh"
.
Pour les commandes qui ont été exécutées dans bash, nous pouvons simplement fermer et rouvrir notre terminal, mais qu'en est-il de celles qui ont été définies dans les fichiers de démarrage, nous ne pouvons pas vérifier les fichiers ou la liste des alias/fonctions à chaque fois que nous exécutons un terminal .
Bash a un tas de fichiers de configuration (démarrage), il les utilise pour configurer un environnement spécifique pour chaque utilisateur.
Certains de ces fichiers sont situés à /etc
, l'un d'entre eux est /etc/profile
, il s'agit d'un fichier de configuration global et ses paramètres seront appliqués à toutes les sessions, un autre est /etc/bash.bashrc
; Nous n'avons pas besoin de contourner ces fichiers car leur emplacement est déjà protégé et seul root a le droit de les éditer.
Un répertoire très important qui peut nous aider beaucoup est: /etc/skel
; Chaque fois que vous créez un nouvel utilisateur avec le répertoire de base, les fichiers de ce répertoire sont utilisés comme squelette pour le répertoire de base de votre nouvel utilisateur.
ls -a /etc/skel
.bash_logout .bashrc .profile
Nous pouvons également utiliser dpkg
pour rechercher des informations sur ces fichiers:
$ dpkg -L bash | grep etc
/etc/skel/.bashrc
/etc/skel/.bash_logout
/etc/skel/.profile
/etc/bash.bashrc
nous pouvons voir que ceux-ci sont tous installés par bash
.
Un alias ou une fonction peut être défini dans n'importe lequel de ces fichiers. Voyons donc comment ces fichiers seront utilisés par bash
.
De la page de manuel bash
:
Lorsque bash est appelé en tant que shell de connexion interactif ou non interactif avec l'option --login, 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 dans cet ordre
~/.bash_profile
,~/.bash_login
et~/.profile
, puis lit et exécute les commandes à partir de la première qui existe et qui est lisible.
la commande est donc: ~/.bash_profile > ~/.bash_login > ~/.profile
Lorsqu'un shell de connexion se ferme, bash lit et exécute les commandes du fichier ~/.bash_logout, s'il existe.
celui-ci sera exécuté chaque fois que nous sortirons d'un shell de connexion, je ne vois pas en quoi celui-ci peut avoir des effets sur notre situation.
Lorsqu'un shell interactif qui n'est pas un login est démarré, bash lit et exécute les commandes de /etc/bash.bashrc et ~/.bashrc, si ces fichiers existent.
le domaine le plus important est donc ~/.bashrc
, car près de 90% des shells bash que nous utilisons sont en mode interactif et sans connexion. et si nous regardons ce fichier, nous pouvons voir qu'il recherchera un autre fichier nommé ~/.bash_aliases
. S'il a été capable de le localiser, il utilisera également source
ce fichier.
Tout d’abord, nous devrions déplacer ~/.profile
vers ~/.bash_profile
sinon ce n’est pas grave si nous protégeons le fichier ~/.profile
, quelqu'un peut créer un ~/.bash_profile
et il remplacera nos configurations, donc:
mv ~/.profile ~/.bash_profile
Ensuite, si vous n'utilisez pas un fichier ~/.bash_aliases
, créez-le à nouveau, comme dans ce qui précède, quelqu'un peut simplement créer ce fichier et il est possible qu'il puisse en modifier ou créer des alias.
touch ~/.bash_aliases
Enfin, utilisez chattr
pour protéger ces fichiers contre la modification et la suppression.
De la page de manuel chattr
:
Un fichier avec l'attribut 'i' ne peut pas être modifié: il ne peut être ni supprimé ni renommé, aucun lien ne peut être créé avec ce fichier et aucune donnée ne peut être écrite dans ce fichier. Seul le superutilisateur ou un processus possédant la capacité CAP_LINUX_IMMUTABLE peut définir ou effacer cet attribut.
Sudo chattr +i ~/.bash_profile ~/.bashrc ~/.bash_aliases
Nous avons terminé. N'oubliez pas que chaque fois que vous souhaitez modifier ces fichiers, vous devez d'abord supprimer l'attribut -i
.
Réinitialise tout sans fermer/réouvrir le terminal
Une autre solution consiste à créer un fichier:
Sudo touch /usr/local/bin/reload_aliases
Mettez vos alias ici:
unalias -a
alias x='...'
alias b='...'
Assurez-vous que personne ne peut écrire dans ce fichier:
Sudo chmod a=r,x /usr/local/bin/reload_aliases
Maintenant, chaque fois que vous voulez tout recharger, lancez:
/usr/local/bin/reload_aliases
Et si jamais vous changiez d'avis:
Sudo chattr -i ~/.bash_profile ~/.bashrc ~/.bash_aliases
mv ~/.bash_profile ~/.profile
rm ~/.bash_aliases # if you don't use it
Si vous faites des choses stupides (éloignez-vous sans verrouiller l'écran, exécutez aveuglément des scripts non inspectés provenant de sources non fiables, etc.), vous obtiendrez de mauvais résultats.
Essayer d'être assez intelligent pour se remettre de mauvaises pratiques n'a jamais fonctionné auparavant.