この文章は鹿児島らぐの「鹿児島Linux勉強会 2019.07(オンライン)」で発表したものに加筆修正したものです.

はじめに

最近 physlock というロックコマンドを知りました.こいつがいい感じそうなのでその紹介と煮たコマンドをまとめてみました.

範囲

今回は端末とXのロックを紹介します.

他にもBIOS ロック + SecureBoot + 暗号化FS くらいはやっておいたほうがいいと思います.

Ctrl + s / Ctrl + q

  • 端末をロックというか画面一時停止

  • 画面が隠されない

  • 見た目が変わらないのでロックしているのに気づかず入力しようとして??となってしまう(そして解除時に……)

  • 初期の頃に混乱しがち

  • 解除にパスワードは不要

  • sttyで無効にすることも出来る

if [[ -t 0 ]]; then
  stty stop undef
  stty start undef
fi

vlock

  • 端末をロック

  • 画面は隠される

  • -a で全端末をロックできる(全仮想端末はロックできない(1つづつはOK))

  • ロック解除にロックしたユーザのパスワードが必要

vlock
This TTY is now locked.

Please press [ENTER] to unlock.
vlock -a
The entire console display is now completely locked.
You will not be able to switch to another virtual console.

Please press [ENTER] to unlock.

GNU screen / tmux のロック機能

  • ターミナルマルチプレクサのロック機能

  • 端末をロック

  • 画面は隠される

  • ターミナルマルチプレクサ内の仮想端末は全てロックされる

  • ロック解除にロックしたユーザのパスワードが必要

  • 任意のロックコマンドを実行したり,スクリーンセーバーのように未使用時間によってロックを掛けることも可能

  • 別に新しい端末を開くことが出来るので作業中のもの以外は保護できない

xscreensaver等

  • スクリーンセーバー

  • Xの画面は隠される

  • ロック解除にパスワードを要求できる

  • 電源管理とも連携可能(画面消去,サスペンド等)

  • Xがロック状態でも端末(/dev/ttyN)に移動できる(Ctrl+Alt+F1〜F6)のでそちらでログインした状態だと操作できてしまう

physlock

  • vlock altanative

  • 端末も仮想端末もXを含めロックされる

  • 画面は隠される

  • ロック解除にパスワードが必要

  • MagickSysrq の無効化(-s)やKernel log の抑制(-m)も可能

簡単な比較

端末のロック

端末画面の隠蔽

X画面の隠蔽

Ctrl+s

O

X

X

vlock

O

O

X

xscreensavser

O

O

physlock

O

O

O

physlock の導入

package manager
$ sudo apt install physlock
source から
$ sudo apt-get build-dep physlock
$ git clone https://github.com/muennich/physlock
$ cd physlock
$ make
$ sudo make install
MagickSysrqとKernel log の抑制をしつつ lock! というメッセージを表示してロック
$ physlock -s -m -p "lock!"

画面が寂しいのでスクリーンセーバーを起動できないか試してみましたが駄目なようです.

60秒後にスクリーンセーバーを起動するようにしておいてphyslockを起動(NG)
$ xscreensaver-command -activate ; physlock

画面のスタンバイもうまく行きませんでした.

60秒後に画面をスタンバイするようにしておいてphyslockを起動(NG)
$ xset dpms force standby ; physlock

physlock のGitHub を覗くとphyslock 実行前後に任意のコマンドを実行できるというPR がありました.これを使えばどうだろうと試してみました.

環境を整えてsourceを入手してPR のpatch を当ててbuild
$ sudo apt-get build-dep physlock
$ git clone https://github.com/muennich/physlock
$ cd physlock
$ wget https://github.com/muennich/physlock/pull/79.patch
$ patch -p1 < ./79.patch
$ make
$ sudo chown root.root ./physlock
$ sudo chmod u+s ./physlock
$ ./physlock -h
usage: physlock [-dhLlmsbanv] [-p MSG]
-b, -a, -n のオプションが増えている
$ git diff README.md
diff --git a/README.md b/README.md
index bc25ca3..563e734 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,9 @@ The following command-line arguments are supported:
     -l       only lock console switching
     -L       only enable console switching
     -m       mute kernel messages on console while physlock is running
+    -b CMD   execute CMD before the password prompt
+    -a CMD   execute CMD after successfully authenticating
+    -n       don't actually authenticate: just execute commands
     -p MSG   Display MSG before the password prompt
     -s       disable sysrq key while physlock is running
     -v       print version information and exit

しかしこれもうまく行きませんでした.画面は書き換えできなくなってるみたいです.

physlock の前にスクリーンセーバーを起動(NG)
$ ./physlock -b 'xscreensaver-command -demo 8'
physlock の前に画面をスリープ(NG)
$ ./physlock -b 'xset dpms force standby'

近いところでコンピュータ自体をサスペンドはOKでした.持ち運びPCなんかではいい感じかもしれません.

physlock の前にサスペンド(systemd)
$ ./physlock -b 'systemctl suspend'
physlock の前にサスペンド(sysvinit)
$ ./physlock -b 's2ram'

その他

Ubuntu 18.04 LTS ARM64 環境でpackage から導入した physlock では physlock: /dev/console: VT_GETSTATE: Inappropriate ioctl for device というエラーで動きませんでした.以下のバグのようです.

commit 4f131cc2c8c05279886464d3093dd56b1331e98d で修正されている(release だと12)ようなので,source から導入してみると動作しました.

$ sudo apt-get build-dep physlock
$ sudo apt install lib
$ git clone https://github.com/muennich/physlock
$ cd physlock
$ make
$ sudo make install
$ /usr/local/bin/physlock -v
physlock v13