こんにちは。
現在、Linux技術者認定試験のLinuCレベル1を勉強中のエンジニアです。
LinuC試験項目の「ブートターゲット」の科目勉強中、
「デフォルトのターゲットをrebootにしたらどうなるか」
が気になったことがあったので試してみました。
ブートターゲットとは
ブートターゲットは、簡単に言うとLinux起動時にCUI(コンソール)モードで起動するかGUI(デスクトップ)モードで起動するかを指定するモードです。
具体的には以下のモードがあります。
ターゲット | 内容 | 対応ランレベル |
---|---|---|
multi-user.target | CUIログイン | 3 |
graphical.target | グラフィカルログイン | 5 |
poweroff.target | システム終了 | 0 |
rescue.target | レスキュー(シングルユーザーモード) | 1 |
reboot.target | システム再起動 | 6 |
systemctl get-default
コマンドでデフォルトの起動ターゲットを調べることができます
$ systemctl get-default
graphical.target
また、systemctl isolate
コマンドでコマンド実行直後にターゲットを実行することができます。
systemctl isolate
コマンドは実行時にroot権限が必須です。
# systemctl isolate multi-user.target
# systemctl isolate multi-user.target
再起動する
# systemctl isolate reboot.target
コマンド実行後、再起動します。
デフォルトのターゲットを変更する
デフォルトのターゲットを変更するには、systemctl set-default
コマンドを用います。
systemctl set-default
コマンドは実行時にroot権限が必須です。
$ sudo systemctl set-default multi-user.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.
$ sudo systemctl set-default graphical.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/graphical.target.
/lib/systemd/system/
ディレクトリ以下のターゲットが/etc/systemd/system/default.target
にリンクされます。
$ ls /lib/systemd/system/default.target -l
lrwxrwxrwx 1 root root 16 1月 27 06:48 /lib/systemd/system/default.target -> graphical.target
$ systemctl get-default
でもデフォルトのターゲットを確認できます。
$ systemctl get-default
graphical.target
【危険】デフォルトのターゲットをreboot(再起動)にする
さて、本題ですが、デフォルトのターゲットをreboot.targetにしたらどうなるか試してみます。
起動直後に無限に再起動を繰り返すため、実行しないでください。
$ sudo systemctl set-default reboot.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/reboot.target.
この時点ではシンボリックリンクが作成されるだけです。
$ ls /etc/systemd/system/default.target -l
lrwxrwxrwx 1 root root 33 3月 16 15:06 /etc/systemd/system/default.target -> /lib/systemd/system/reboot.target
$ systemctl get-default
reboot.target
再起動します。
無限に再起動を繰り返し起動不能になるため、絶対に再起動しないでください。
実行される際は自己責任でお願いします。
$ reboot
結果
無事(?)、起動直後に再起動を繰り返し、無限ループに陥ることを確認しました。
コマンドを何も受け付けないため、物理的に電源を切るしかないです。
復旧させるには、/etc/systemd/system/default.target
のシンボリックリンク先を/lib/systemd/system/multi-user.target
若しくは/lib/systemd/system/graphical.target
に変える必要があります。(未検証)
起動時のgrub画面で復旧できるかもしれませんが未検証です。
まとめ
そもそも危険な操作をさせないようにする、「フールプルーフ」の考えがとても大事だと感じました。