L'autre jour, je faisais des tâches de maintenance sur mon serveur Web. J'étais pressé et somnolent, alors j'ai tout fait en utilisant la sudo
commande.
Et puis, j'ai accidentellement appuyé sur Ctrl+ V, en envoyant cette commande à mon serveur Web:
sudo rm -rf /*
Pour ceux qui se demandent ce que fait la commande ci-dessus: cela a supprimé tout mon serveur Web
Heureusement, j'ai eu des sauvegardes et malheureusement, j'ai dû passer deux heures de plus à rester éveillé pour corriger cette erreur géniale. Mais depuis, je me demande:
Existe-t-il un moyen de toujours appliquer le mot de passe sudo pour une commande spécifique?
Si le serveur me demandait un mot de passe, je me sauverais de beaucoup de problèmes. Ce n'est pas le cas, car j'ai exécuté environ 5 sudo
commandes avant cette erreur majestueuse.
Alors, y a-t-il un moyen de le faire? J'ai juste besoin que le mot de passe avec la rm
commande soit toujours appliqué. Les autres commandes que j'utilise sont généralement nano
ou les cp
deux sont (dans une certaine mesure) réversibles.
la source
/*
est développé avant d'être transmis à la commande rm. La commande ne voit donc pas un seul argument, mais une liste d'arguments (/bin /boot /cdrom /dev /etc /home
...)rm
commande ait un mot de passe. Ils veulent justesudo
en demander un à chaque fois que la commande rm est utilisée. La solution à la question que vous avez liée deviendrait légèrement ennuyeuse lors de votre première commandesudo rm
. Comme il vous demandera deux mots de passe, un poursudo
unrm
.Réponses:
Vous pouvez régler la
timestamp_timeout
à0
des commandes particulières dans/etc/sudoers
. Créez un fichiervisudo -f /etc/sudoers.d/pduck
avec le contenu suivant:Désormais, l'utilisateur
pduck
est toujours invité àsudo rm
saisir un mot de passe lors de l'exécution (quels que soient les paramètres supplémentaires fournis), même s'il est membre dusudo
groupe et sesudo
souvient de son mot de passe pour les autres commandes.L'inconvénient est que vous ne pouvez pas facilement ajouter des paramètres à la
/bin/rm
ligne du fichier pour restreindre davantage cela. Eh bien… vous pouvez, comme:mais ensuite, vous êtes simplement invité exactement
sudo rm -f
et non (encore) poursudo rm -rf
, par exemple.la source
Une méthode consisterait à utiliser safe-rm . Cela traitera UNIQUEMENT l'utilisation de "rm" et empêchera l'exécution de versions spécifiques de "rm". Cela inclut la suppression de votre système racine, mais peut également être utilisé pour empêcher la suppression des répertoires liés au système tels que "/ usr /" ou "/ var /". Depuis le lien:
la source
sudo
fournit une option-k, --reset-timestamp
, voirman sudo
:Vous pouvez écrire un simple wrapper pour
sudo
testerrm -rf /*
et exécuterà la place, par exemple comme ceci:
Exemple d'utilisation
Tester avec
echo a
ici.Si vous souhaitez être invité à chaque exécution
rm
en général, vous pouvez adapter la fonction ci-dessus comme suit:Si vous souhaitez combiner à la fois des appels de commande généraux et des lignes de commande spécifiques, je recommande d'utiliser
case
, par exemple:Notez que ces approches ne fonctionnera pas si vous exécutez
sudo
des options - solutions possibles[[ "$*" =~ " rm " ]]
pour vérifier la chaîne « rm » entouré par des espaces ou*" rm "*)
aveccase
pour attraper une ligne de commande contenant « rm ».la source
[[ "$1" == "rm" ]] && opt="-k";
et que diriez-vous/bin/rm
?case
approche.Cette réponse ne répond pas à la
sudo
partie de votre question mais d'un autre côté, elle aborde un moyen d'atténuer le danger d'rm
appels accidentels pour tout utilisateur.Vous pouvez alias
rm
àrm -I
qui-f
qui remplace les-I
options précédentes .--one-file-system
est une autre protection possible contre la suppression involontaire que j'utilise dans monrm
alias.Installer
Pour créer un tel alias, utilisez la commande:
Vous pouvez le mettre dans votre
~/.bashrc
ou même/etc/bash.bashrc
.Usage
Pour confirmer le type
yes
ou sa traduction dans vos paramètres régionaux ou la première lettre de l'un des mots et appuyez sur Enter. Toute autre entrée, y compris aucune, abandonne l'opération.la source