最近 shutdown の man を見比べたりしてたのですが,そのときに systemd, sysvinit 以外に molly-guard
という見知らぬものが.
$ apt-file search /sbin/shutdown molly-guard: /sbin/shutdown systemd-sysv: /sbin/shutdown sysvinit-core: /sbin/shutdown
パッケージ情報をみると shutdown コマンドなどを置き換えて ssh 接続時には確認のためにホスト名を聞くようになるようです.
これにより手元のPCの再起動をしたつもりがリモートのサーバを再起動してしまうなどといったことが防げるようになります.
$ apt show molly-guard Package: molly-guard Version: 0.6.4 Priority: extra Section: admin Maintainer: Francois Marier <francois@debian.org> Installed-Size: 57.3 kB Depends: procps Enhances: init, kexec-tools, mosh, openssh-server, pm-utils, systemd, sysvinit, upstart Tag: implemented-in::shell, interface::commandline, network::server, protocol::ssh, role::program, scope::utility Download-Size: 13.8 kB APT-Manual-Installed: yes APT-Sources: http://ftp.jp.debian.org/debian stretch/main amd64 Packages Description: protects machines from accidental shutdowns/reboots The package installs a shell script that overrides the existing shutdown/reboot/halt/poweroff/coldreboot/pm-hibernate/pm-suspend* commands and first runs a set of scripts, which all have to exit successfully, before molly-guard invokes the real command. . One of the scripts checks for existing SSH sessions. If any of the four commands are called interactively over an SSH session, the shell script prompts you to enter the name of the host you wish to shut down. This should adequately prevent you from accidental shutdowns and reboots. . molly-guard diverts the real binaries to /lib/molly-guard/. You can bypass molly-guard by running those binaries directly.
早速試してみます.
$ sudo apt install molly-guard : package diverts others to: /lib/molly-guard/coldreboot /sbin/halt package diverts others to: /lib/molly-guard/halt /sbin/pm-hibernate /sbin/pm-suspend /sbin/pm-suspend-hybrid /sbin/poweroff package diverts others to: /lib/molly-guard/poweroff /sbin/reboot package diverts others to: /lib/molly-guard/reboot /sbin/shutdown package diverts others to: /lib/molly-guard/shutdown
このあたりのコマンドが置き換わっています.
$ ls -l /sbin | grep molly lrwxrwxrwx 1 root root 28 Aug 16 2016 coldreboot -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 halt -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 pm-hibernate -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 pm-suspend -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 pm-suspend-hybrid -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 poweroff -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 reboot -> /lib/molly-guard/molly-guard lrwxrwxrwx 1 root root 28 Aug 16 2016 shutdown -> /lib/molly-guard/molly-guard
コマンド類は /lib/molly-guard
以下に退避されるようです.
sysvinit
$ ls -lA /lib/molly-guard total 48 -rwxr-xr-x 1 root root 18952 Feb 13 2017 halt -rwxr-xr-x 1 root root 2767 Aug 16 2016 molly-guard lrwxrwxrwx 1 root root 4 Feb 13 2017 poweroff -> halt lrwxrwxrwx 1 root root 4 Feb 13 2017 reboot -> halt -rwxr-xr-x 1 root root 23368 Feb 13 2017 shutdown
systemd
$ ls -lA /lib/molly-guard total 4 lrwxrwxrwx 1 root root 14 Jun 14 05:20 halt -> /bin/systemctl -rwxr-xr-x 1 root root 2767 Aug 16 2016 molly-guard lrwxrwxrwx 1 root root 14 Jun 14 05:20 poweroff -> /bin/systemctl lrwxrwxrwx 1 root root 14 Jun 14 05:20 reboot -> /bin/systemctl lrwxrwxrwx 1 root root 14 Jun 14 05:20 shutdown -> /bin/systemctl
ssh 経由で shutdown(sysvinit) を試みるとこのように hostname を求められます.ここで誤った hostname を書くと shutdown がキャンセルされました.
$ sudo shutdown -f -P -h +10 "kernel update (`uname -r`)" W: molly-guard: SSH session detected! Please type in hostname of the machine to shutdown: desktop Good thing I asked; I won't shutdown debian ... W: aborting shutdown due to 30-query-hostname exiting with code 1.
正しい hostname を指定すると shutdown が呼ばれます.
$ sudo shutdown -f -P -h +10 "kernel update (`uname -r`)" W: molly-guard: SSH session detected! Please type in hostname of the machine to shutdown: debian Broadcast message from root@debian (pts/0) (Thu Sep 27 06:15:28 2018): kernel update (4.9.0-3-amd64) The system is going DOWN for system halt in 10 minutes! ^C Shutdown cancelled.
ssh経由でない場合は molly-guard はすぐに shutdown を呼びます.
$ sudo shutdown -f -P -h +10 'poweroff' ^C Shutdown cancelled.
環境
$ dpkg-query -W systemd-sysv molly-guard molly-guard 0.6.4 systemd-sysv 232-25+deb9u4 $ dpkg-query -W sysvinit-core sysvinit-core 2.88dsf-59.9 $ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" $ cat /etc/debian_version 9.5 $ uname -m x86_64