web-dev-qa-db-fra.com

Interdire les pseudonymes et fonctions compromettants; alias cd = 'rm -rf ~'

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 .

2
Ravexina

Introduction

Fichiers de configuration Bash

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.

Comment ça marche à 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.


Commencez à prendre soin de ces fichiers

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

Retour en arriere

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
2
Ravexina

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.

0
waltinator