Désactiver la commande d'arrêt pour tous les utilisateurs, même root - conséquences?

11

Je voudrais désactiver la shutdowncommande pour tous les utilisateurs, même root, sur une installation d'Ubuntu Server.

La raison pour laquelle je veux le faire est de m'assurer que je n'ai pas l'habitude d'arrêter la machine de cette façon, car je SSH dans beaucoup de machines de production en même temps que celle-ci, et je ne le fais pas souhaitez arrêter accidentellement l'une des autres machines en tapant la commande dans la mauvaise fenêtre.

Le serveur sur lequel je veux désactiver l'arrêt fonctionne uniquement dans VirtualBox sur mon bureau Windows, et je ne l'utilise que pour les tests locaux, donc ce n'est pas un problème si je ne peux pas l'arrêter à partir de la ligne de commande.

J'ai déjà un peu atténué le problème en m'assurant d'avoir un mot de passe différent sur l'image VirtualBox, mais évidemment si je suis dans la sudo`` fenêtre '' sur l'une des machines de production, je pourrais quand même l'arrêter accidentellement.

Mes questions sont:

  1. Comment désactiver la commande d'arrêt?
  2. Si je désactive la commande d'arrêt, y a-t-il des conséquences dont je devrais être informé? Plus précisément, cela désactivera-t-il la prise en charge de l'arrêt ACPI, qui équivaut à appuyer sur le bouton d'alimentation d'une machine physique? Cela pourrait-il affecter d'autres applications génériques?

Pour information, j'utilise juste cette image VirtualBox pour essayer des scripts shell, exécuter Tomcat et Java, et ce genre de choses.

Riches
la source
2
À mon avis, changer un tel comportement central du système pour éviter les erreurs humaines est une mauvaise idée. Il est susceptible d'apporter plus de problèmes à long terme qu'il n'en résout. Si vous conservez un mot de passe utilisateur différent pour chaque système, vous minimisez le risque (car il nécessite sudo). Vous devez développer de bonnes habitudes qui ne dépendent pas d'un changement de système particulier, des catastrophes beaucoup plus graves sont fréquemment causées par rm / cp / chmod qui sont utilisés beaucoup plus fréquemment, et je suppose que vous n'allez pas les désactiver.
João Pinto
Bien que je sois d'accord avec cela, et c'est certainement la bonne façon de faire les choses, c'est juste pour éviter cette situation minuscule avec une image Ubuntu non officielle que j'ai sur mon bureau afin de me permettre d'essayer les choses sans risque de b0rking les machines de mon employeur :)
Rich

Réponses:

3

Si vous exécutez généralement la commande en tant que sudo shutdown, plutôt que sudo /sbin/shutdown, alors vous pouvez simplement configurer un alias de shell global pour "shutdown" pour simplement renvoyer un message au terminal à la place. Le véritable exécutable sera toujours là à toutes autres fins.

Dave Jennings
la source
Cela semble être la meilleure façon de procéder si vous essayez simplement d'interrompre une habitude.
ændrük
2
Mais notez que la manière évidente de configurer un shell alias ( alias shutdown=sl) n'aura aucun effet sur les arguments de sudo. Dans zsh, vous pouvez définir des alias qui correspondent aux arguments, mais je ne pense pas dans bash. Vous pouvez créer sudoun alias pour un script shell qui refuse de faire quoi que ce soit si le premier argument est shutdown.
poolie
2
En d'autres termes, cela ne fonctionnera pas réellement.
poolie
14

Une meilleure approche à ce problème est d'installer le garde molly programme sur les cases que vous ne voulez arrêter, plutôt que d' essayer de vous entraîner à ne jamais exécuter l' arrêt.

molly-guard tente de vous empêcher d'arrêter ou de redémarrer accidentellement des machines. Pour ce faire, il injecte quelques vérifications avant les commandes existantes: arrêt, redémarrage, arrêt et mise hors tension.

La configuration typique est qu'il vous demande de taper le nom d'hôte de la machine pour confirmer que vous êtes vraiment sur la bonne.

Il est possible d'ajouter de nouveaux scripts à /etc/molly-guard/run.d(comme indiqué sur la page de manuel , les fichiers de script doivent suivre la dénomination attendue par run-parts.

Si vous voulez vraiment désactiver shutdown(et c'est une idée tellement bizarre), faites simplement

chmod 0 /sbin/shutdown

puis si vous avez besoin de l'utiliser, remettez-le à 0755.

poolie
la source
Une bonne idée mais malheureusement pas possible car je n'ai pas assez de contrôle sur les systèmes pour pouvoir installer mon propre logiciel. Malheureusement, j'ai suffisamment de contrôle pour pouvoir les arrêter!
Rich
4
Es-tu sérieux? C'est très étrange. Si vous avez accès à sudo pour exécuter l'arrêt uniquement, vous pourriez peut-être persuader les gens de changer sudo pour émettre une grande invite, ou de toujours exiger un mot de passe. S'il y a un risque que vous les fermiez accidentellement, il serait dans l'intérêt des administrateurs d'installer molly-guard.
poolie
1

Pour désactiver la commande d'arrêt, il suffit de rendre le binaire non exécutable, c'est-à-dire que sudo chmod a-x /sbin/shutdown je ne pense pas que cela affectera toute autre méthode d'arrêt car, comme le dit l'entrée man pour l'arrêt

shutdown envoie une demande au démon init pour ramener le système au niveau d'exécution approprié

Ainsi, toute autre commande / script peut le faire même après avoir désactivé la commande d'arrêt, par exemple, je peux toujours arrêter mon système à l'aide de l'arrêt du menu GNOME. Vous pouvez également redémarrer votre ordinateur à partir de la ligne de commande à l'aide de la commande de redémarrage

binW
la source
1

La shutdowncommande est entrée /sbin/shutdown. Vous pouvez le désactiver en procédant comme suit:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

Mais : cela signifie que presque aucune des méthodes habituelles d'arrêt du système ne fonctionnera plus. L'arrêt de gnome sur ma machine de test pour cette réponse le fait simplement vous déconnecter et vous renvoyer à GDM.

Si vous souhaitez arrêter votre système par la suite, vous devez faire

sudo init 0

L'arrêt de "désactivation" affectera toutes les applications qui utilisent la commande pour quoi que ce soit. Étant donné que ce init 0n'est pas la méthode recommandée pour arrêter un système, tous les programmes qui doivent arrêter le système l'utilisent shutdown, ce qui ne fonctionnera plus.

  • Les applications peuvent également lever des exceptions en raison du fichier manquant ou du fait que le fichier n'est pas exécutable , ce qui peut entraîner leur blocage même si un arrêt n'est pas nécessaire. Il s'agit d'un cas périphérique que vous pouvez contourner en déplaçant à sa place un fichier binaire, idéalement exécutable (pas un script shell - qui ne fonctionnera pas). Par exemple:

    sudo cp /bin/ps /sbin/shutdown
    

    C'est après que vous ayez déplacé l'original en toute sécurité.

Maintenant, tout cela est assez hacky, et je le déconseille , pour les raisons décrites dans le commentaire de João Pinto. Mais je ne vous empêcherai pas de le faire. :-)

Ne faites pas seulement une sauvegarde de / sbin / shutdown, ayez également un plan de récupération en place au cas où cela causerait des problèmes. Ne faites pas cela sur un serveur auquel vous ne pouvez pas accéder, par exemple. Et tester votre plan de relance à l' avance, en supposant que le système ne démarre pas du tout (il démarre bien sûr - je l' ai testé - mais s'il vous plaît être du bon côté).

Stefano Palazzo
la source
0

Je pense que cela devrait être prendre une autre solution, les serveurs devraient avoir une politique ssh pour désactiver l'arrêt et init 0 sur ssh, ou il doit y avoir une boîte de dialogue spéciale affichée sur la console comme sous Windows pour entrer le "pourquoi" et le "mot de passe d'arrêt" spécial . Pour cela, le bouton d'alimentation doit être protégé par mot de passe lors de l'utilisation du serveur.

À l'heure actuelle, nous utilisons un "interrupteur à clé physique = 4Euros" au lieu d'un bouton-poussoir.


la source
0

Si vous souhaitez désactiver la shutdowncommande.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

c'est parce que si quelqu'un essaie de forcer à vouloir utiliser cette commande, alors il ne peut pas non plus

maintenant, personne ne pourra utiliser la commande d'arrêt.

il affichera une commande de message introuvable. installez-le.

vim /etc/bash.bashrc

Ajouter une ligne en dernier de bash.bashrc

alias shutdown = "echo 'Vous n'êtes pas autorisé à utiliser cette commande'"

si vous le souhaitez (activé). il suffit de le recopier

cp / sbin / shutdown-backup / sbin / shutdown

Dishank Jindal
la source