Comment désactiver les commandes de terminal effrayantes?
J'utilisais SSH pour accéder à un serveur Ubuntu distant sans accéder au serveur physique. Je pensais taper ' shutdown
' sur le serveur NoSQL fonctionnant sur le système d'exploitation Ubuntu, mais en réalité, j'ai dit au serveur Ubuntu de s'arrêter. Ensuite, je devais dire à l'administrateur du serveur ce que je faisais pour qu'il puisse démarrer le serveur physique pour moi. C'était gênant!
Comment puis-je empêcher que cela se reproduise?
rm
qui a des effets secondaires pires queshutdown
. En bout de ligne: il n’ya aucun moyen d’empêcher que de mauvaises choses se produisent si vous continuez à exécuter des commandes aléatoires en tant que root.Réponses:
La réponse standard est "ne vous connectez pas en tant que root". Toutes les commandes exécutées en tant que root sont effrayantes. Si ce n'est pas une option, vous pouvez insérer des commandes d'alias dans votre
.bashrc
pour désactiver les commandes que vous trouvez particulièrement effrayantes. Par exemple:Ensuite, si vous tapez shutdown, vous obtenez le message suivant:
( Assurez-vous que votre
.bashrc
a chargé en premier, avant d'essayer cela sur un serveur de production)Quitter votre
ssh
session en cours et vous reconnecter, ou utiliser. ~/.bashrc
doit charger / exécuter .bashrc. Essayez peut-être d’exécuterrm
sans aucun argument pour vous assurer que votre serveur n’a pas désactivé le chargement automatique.bashrc
lors de connexions ou similaires.Notez que si vous êtes principalement concerné par les arrêts et les arrêts, vous pouvez envisager d’installer molly-guard , ce qui vous obligera à saisir le nom d’hôte avant d’arrêter la machine. Ceci est plus utile si vous arrêtez régulièrement des systèmes d’exploitation complets sur la ligne de commande, tout en voulant vous assurer d’arrêter le bon.
Vous pouvez également tester essayez ceci avec une commande moins effrayante telle que logout ou exit.
la source
source
est un alias pour.
et n'est pas supporté par tous les shells.~/.bash_profile
source par défaut.bashrc
, ce qui n’est pas un comportement standard et sur la plupart des systèmes, elle.bashrc
n’est pas lue lors de la connexion via ssh, cela ne fera donc aucune différence. Il est de loin préférable d’ajouter les alias à~/.profile
ou à la~/.bash_profile
place.sudo
existe pour une raison - utilisez-le. Lorsque votre commande (dans ce cas, une interface de ligne de commande interactive) est terminée, vous êtes redirigé vers votre shell au niveau utilisateur, pas un shell root. Il y a très peu de raisons valables d'être dans un shell racine. (Je suis surpris que ce ne soit pas déjà une réponse ...)Cela dit, ne soyez pas un muppet qui utilise
sudo
pour tout . Comprenez ce que vous faites et pourquoi vous n’avez pas besoin des privilèges root.De plus, vous pouvez différencier votre invite pour les shells root / utilisateur. Cela rend également plus évident le fait que vous êtes de retour à l’invite du shell et non comme " un autre CLI ". Le mien est très coloré et contient de nombreuses informations utiles (telles que le nom d'hôte), ce qui permet de savoir très facilement sur quel hôte la commande sera exécutée et de consulter plus facilement votre historique et de localiser les invites - une racine shell utilise l'invite par défaut.
Ceci est plus approprié pour utiliser sur " votre " compte, mais si vous prenez la sécurité / l'administrateur système au sérieux, vous ne partagerez pas les mots de passe / comptes, et vous ne serez pas assis dans un shell root sans en être parfaitement au courant.
Comme les gens l'ont répété maintes et maintes et maintes et maintes fois, "il n'est pas judicieux de créer des alias pour créer un environnement sûr ". Vous allez vous sentir à l'aise dans votre environnement sécurisé en tapant ces commandes «effrayantes» là où vous ne devriez pas. Puis un jour, vous changerez de travail ou vous vous connecterez à une nouvelle machine, puis vous ferez exploser " Whoopsy, je ne voulais pas, je suis désolé " ...
la source
sudo
à vous de prendre le café.sudo shutdown
? S'il l'exécute sur la mauvaise machine, ce sera toujours un désastre.sudo
est une commande shell, cela n'a rien à voir avec la base de données.sudo shutdown
, puisque je suppose que cesudo
n'est pas une commande NoSQL. Ne pas être dans une coque racine aurait totalement résolu ce problème et aurait été une très bonne idée. Il serait donc utile de regarder attentivement l'invite avant d'exécuter des commandes importantes.Le paquetage 'molly-guard' (au moins sur les systèmes dérivés de Debian) installera un wrapper autour de l’arrêt, de l’arrêt, de la mise hors tension et du redémarrage. S'il détecte que le terminal est distant, il demandera le nom de l'hôte. Si cela ne correspond pas, la commande est annulée.
la source
rm -rf /
?set -u
peut aider dans certains cas, comme lors de l'écriturerm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT
.--no-preserve-root
que vous ne serez probablement pas en mesure de taper par accident.J'ai accepté une réponse qui me plaît beaucoup, cependant, si quelqu'un d'autre lit et veut une réponse plus simple, voici la mienne.
Recherchez le fichier .bashrc et mettez-le comme dernière ligne:
Ensuite, lorsque vous tapez shutdown, vous obtenez quelque chose comme
~bash: notforuse is not a command
C'est peut-être idiot mais c'est simple et ça marche. J'apprécie les réponses avec de meilleures façons de le faire cependant!
la source
rm
gens trolls -alias rm='echo "You can't use rm!" #'
notforuse
sur le chemin.~/.SaveMyReputation
et ajouter comme dernière ligne de votre.bashrc
ligne a[ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation
. Vous voudrez peut-être éventuellement ajouter une ligne supplémentaireecho "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell"
dans ce fichier. Au moins, vous pouvez emporter avec vous ce fichier alias sur une autre machine (ce devrait être le cas.bash_aliases
, mais dans ce cas "déconseillé", il est préférable d’utiliser un autre nom).alias shutdown=shutdown-disabled-by-an-alias
. (Cela ne concerne que le troisième et le plus mineur problème signalé par @DavidRicherby.) Bien que la prochaine personne ne prenne probablement encore que 2 secondes pour passer de la tâchenotforuse is not a command
à latype -a shutdown
recherche et à la recherche de l'alias, puis la saisiesudo \shutdown
pour désactiver l'expansion de l'alias. (En supposant qu'ils aient unsudo
aliassudo='sudo '
, il développe les alias dans son premier argument).Pour
shutdown
(reboot
,halt
et connexes): J'ai une copie avec me demander si je suis vraiment sûr (et il ne fait rien de toute façon). Je stocke ces scripts dans/usr/local/sbin
. Sur Debian, la priorité est autre/sbin
(c’est le premier répertoire de PATH).Scripts système utiliser le chemin complet, de sorte que cette bidouille me empêcher d'arrêter un serveur distant au lieu de la machine locale (un mauvais comportement de Impressionnant WM), mais n'a pas d' autre effet indirect, et je peux toujours les utiliser comme / sbin / arrêt lorsque vraiment nécessaire .
la source
shutdown
sur un système critique qui n'a pas votre hack.Le fichier Sudoers autorise un niveau de granularité bien plus fin que celui que * 'est autorisé à utiliser sudo' *. Vous pouvez notamment utiliser des alias de commande pour créer des listes blanches de groupes de commandes auxquelles un utilisateur ou un groupe donné est soumis. J'ai travaillé avec des serveurs distants restreints à l'accès ssh et autorisés à sudo sans mot de passe (nous avions besoin de clés ssh protégées par mot de passe). Il y a de bonnes raisons à cela, mais cela présente des dangers. Nous avons donc utilisé des alias de commande pour permettre un accès illimité à ce qu'ils doivent faire (redémarrage de serveurs, etc.) sans leur accorder de privilèges.
Il existe également une syntaxe pour dire «ne peut pas exécuter cette commande» . Cela peut être corrigé, donc cela ne devrait pas être utilisé comme une véritable mesure de sécurité mais cela fonctionnerait pour le scénario que vous avez décrit.
Man Sudoers a de bons exemples sur la façon de tout mettre en place.
Bien sûr, cela nécessite d’utiliser sudo, mais cela devrait aller de soi.
la source
Vous êtes peut-être victime d’une nouvelle stupidité d’Ubuntu.
Ubuntu utilisait la
shutdown
commande classique classique qui prend un argument de temps obligatoire.Voici ce qui se passe sur Ubuntu 12 si je tape
shutdown
, même en tant qu'utilisateur régulier:ensuite
Maintenant, voici Ubuntu 16.10. Je ne suis pas root:
En l'absence d'argument, il planifie un arrêt 60 secondes plus tard, et même si vous n'êtes pas root, vous ne disposez que d'un compte créé avec les privilèges d'administrateur.
Blâme canonique.
la source
/sbin/shutdown
est fourni parsystemd-sysv
paquet par défaut, donc ce n'est pas une stupidité Ubuntu, c'est unesystemd
stupidité, et cela ne vient pas d'Ubuntu, mais au moins de Debian, ce qui, à son tour, semble prendre tout lesystemd
mouvement de Red Hat. Lorsque vous blâmez, blâmez la bonne entité - pas seulement celle que vous n'aimez pas.Pour l'arrêt, il y a molly-guard. Vous avez juste besoin de l'installer et lorsque vous essayez de vous arrêter via ssh, il vous demande de taper le nom d'hôte.
Pour supprimer des fichiers, il existe des solutions telles que libtrash, qui émule une corbeille via une
LD_PRELOAD
bibliothèque.Et vous pouvez tester quels fichiers vous modifiez / supprimez / ... avec peut - être le programme. C'est plutôt cool quand on teste quelque chose.
la source
maybe
chose semble être brisée par la conception: écraser certains appels système avec no-ops va bloquer tout programme non trivial qui repose sur ces appels système pour réussir.Essayez ceci: lorsque vous êtes sur un shell distant, chaque fois que vous êtes sur le point de taper la touche "retour", arrêtez-vous pendant 5 secondes, passez votre doigt sur la touche "retour" et relisez la commande que vous êtes sur le point d'envoyer. Est-ce que c'est bon? Êtes-vous sûr?
Cela semble sévère, mais d’un autre côté, nous ne devrions pas passer beaucoup de temps sur des obus isolés. Nous devrions trouver tous les moyens d’automatiser nos travaux de maintenance, de sorte que nous n’avons que rarement, voire jamais, besoin de nous connecter à un serveur distant.
la source
shutdown
, arrêté pendant 5 secondes, relu la commande (à haute voix!) Et je suis sûr que c'était correct. Appuyez ensuite sur Entrée et la commande qui vient d'être exécutée. Donc, cela n'a pas désactivé les commandes effrayantes, j'en ai bien peur. Je vais essayer avec ce doigt flottant, peut-être que la distance était trop petite / trop grande.