---
name: "molly-guard"
section: "8"
platform: "linux"
package: "molly-guard"
version: "0.8.5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/molly-guard"
---

# molly-guard(8)

guard against accidental shutdowns/reboots

## NAME

molly-guard - guard against accidental shutdowns/reboots

## SYNOPSIS

**shutdown** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**halt** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**reboot** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**poweroff** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**coldreboot** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**pm-hibernate** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**pm-suspend** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

**pm-suspend-hybrid** \[-**hV**\] \[**--molly-guard-do-nothing**\] \[-- *script\_options*\]

## DESCRIPTION

**molly-guard** attempts to prevent you from accidentally shutting down or rebooting machines. It does this by injecting a couple of checks before the existing commands: **coldreboot**, **halt**, **reboot**, **shutdown**, **poweroff**, **pm-hibernate**,**pm-suspend** and **pm-suspend-hybrid**.

Before **molly-guard** invokes the real command, all scripts in /etc/molly-guard/run.d/ have to run and exit successfully; else, it aborts the command. **run-parts(1)** is used to process the directory.

**molly-guard** passes any *script\_options* to the scripts, and also populates the environment with the following variables:

• **MOLLYGUARD\_CMD** - the actual command invoked by the user.

• **MOLLYGUARD\_DO\_NOTHING** - set to **1** if this is a demo-run.

• **MOLLYGUARD\_SETTINGS** - the path to a shell script snippet which scripts can source to obtain settings.

**molly-guard** prints the contents of /etc/molly-guard/messages.d/COMMAND or /etc/molly-guard/messages.d/default to the console, if either exists. This is due to /etc/molly-guard/run.d/10-print-message.

## GUARDING SSH SESSIONS

**molly-guard** was primarily designed to shield SSH connections. This functionality (which should arguably be provided by the openssh-server package) is implemented in /etc/molly-guard/run.d/30-query-hostname.

This script first tests whether the command is being executed from a tty which has been created by **sshd**. It also checks whether the variable **SSH\_CONNECTION** is defined. If any of these tests are successful, test script queries the user for the machine's hostname, which should be sufficient to prevent the user from doing something by accident.

You can pass the **--pretend-ssh** script option to **molly-guard** to pretend that those tests succeeds. Alternatively, setting **ALWAYS\_QUERY\_HOSTNAME** in /etc/molly-guard/rc causes the script to always query.

The following situations are still UNGUARDED. If you can think of ways to protect against those, please let me know!

• running sudo within screen or screen within sudo; sudo eats the **SSH\_CONNECTION** variable, and screen creates a new pty.

• executing those command in a remote terminal window, that is a XTerm started on a remote machine but displaying on the local X server.

You have been warned. You can use the **--molly-guard-do-nothing** switch to prevent anything from happening, e.g. **halt --molly-guard-do-nothing**.

## OPTIONS

- \--molly-guard-do-nothing

  Cause **molly-guard** to print the command which would be executed, after processing all scripts, instead of executing it.

- \-h, --help

  Display usage information.

- \-V, --version

  Display version information.

## SEE ALSO

[**shutdown**(8)](/shutdown/8.md), **halt**(1), [**reboot**(8)](/reboot/8.md), [**poweroff**(8)](/poweroff/8.md). [**coldreboot**(8)](/coldreboot/8.md). [**pm-hibernate**(8)](/pm-hibernate/8.md). [**pm-suspend**(8)](/pm-suspend/8.md). [**pm-suspend-hybrid**(8)](/pm-suspend-hybrid/8.md).

## LEGALESE

molly-guard is copyright by martin f. krafft. Andrew Ruthven came up with the idea of using the scripts directory and submitted a patch, which I modified a bit.

This manual page was written by martin f. krafft \<madduck@madduck.net\>.

Permission is granted to copy, distribute and/or modify this document under the terms of the Artistic License 2.0

## COPYRIGHT

Copyright © 2008 martin f. krafft\
