NEXUS5 を落っことしてしまいISAI LGL22 を買った(Linux環境でのroot取得とカメラ無音化)

Nexus5 をどこかに落っことしてしまい(体調が悪い時で記憶があやふや.桜島港から家の間のどこかに多分落ちている)不便なので代替機を探して中古のISAI LGL22 を入手した.兄弟機で面白みはあまりないが,LTE でmineo が使えるのとUnLock が安価&安易でDocomo の電波も掴みそこそこ安いということで….

とりあえず初期化してroot 取ってカメラ無音化までした.root 取得の手順は確立されているけれどWindows向けでバッチファイルを叩くものしか見当たらなかったのでLinux 向けにメモ.(WinでもMacでも同じだけど)

  • 初期化
  • OS Update
    TAO で 4.4.2 に.
  • 画面のロックをパスワードに
  • 所有者情報設定
  • mineo 設定
  • 暗号化
    ※充電が80%以上になってから出ないと実行できない.
  • root取得
    isai_rootkit_kk_only.rar を以下から入手して利用した.https://mega.co.nz/#!h5EAmY7K!rrM2jZlCnRGc-EzhPhrxQ8gfPtGAcuv_mPPH8lYo7_M

    sha1sum    0a048c7be86ca64dc755a31a3c3a8d32455a3361
    sha256sum    67b3481f15e5f597e60397b9294074354877cd283ecede5bd8ba171e14392cd2
    

    前準備としてUSBデバッグを有効にしてPCと接続しUSBデバッグを有効にしておく.
    isai_rootkit_kk_only.rar を展開して install.bat を見ながら以下のような感じでコマンドを叩く.
    ※要開発環境.

    cd isai_rootkit_kk_only
    adb wait-for-device
    adb push "files" /data/local/tmp
    adb shell chmod 755 /data/local/tmp/getroot
    adb shell chmod 755 /data/local/tmp/busybox_file
    adb shell chmod 755 /data/local/tmp/install.sh
    adb shell chmod 755 /data/local/tmp/remove_apps_and_bins.sh
    adb pull /system/app/LGDMSClient.odex ./backup/system/app/LGDMSClient.odex
    adb pull /system/app/LGDMSClient.apk ./backup/system/app/LGDMSClient.apk
    adb pull /system/bin/subsystem_ramdump ./backup/system/bin/subsystem_ramdump
    adb pull /system/bin/dumpstate ./backup/system/bin/dumpstate
    adb pull /system/bin/fssamond ./backup/system/bin/fssamond
    adb shell "/data/local/tmp/getroot /data/local/tmp/remove_apps_and_bins.sh"
    adb wait-for-device
    adb shell "/data/local/tmp/getroot /data/local/tmp/install.sh"
    adb wait-for-device
    adb shell "rm /data/local/tmp/getroot"
    adb shell "rm /data/local/tmp/busybox_file"
    adb shell "rm /data/local/tmp/eu.chainfire.supersu-193.apk"
    adb shell "rm /data/local/tmp/remove_apps_and_bins.sh"
    adb shell "rm /data/local/tmp/install.sh"
    adb shell "rm -rf /data/local/tmp/system"
    
  • カメラ無音化
    /system/media/audio/ui/camera_click.ogg と /system/media/audio/ui/VideoRecord.ogg を退避する.

    adb shell
    su
    mount -o remount,rw /system
    cd /system/media/audio/ui/
    mv camera_click.ogg camera_click.ogg-
    mv VideoRecord.ogg VideoRecord.ogg-
    cd
    sync
    mount -o remount,ro /system
    exit
    exit
    

    #起動音と起動後のパスフレーズ入力時のキークリック音も消したいが見当たらず.

  • アプリ入れたり

ibus-mozc から fcitx-mozc に変更したら JOSM で日本語入力できなくなって困る

JOSM はマルチプラットホームでLinux/Windows/Mac で動作しますが,以下の話はLinux固有の問題です.

日本語入力のためのインプットメソッドフレームワークを iBus から fcitx に切り替えたのですが,JOSM で日本語入力ができなくなってしまっていました.Ctrl+Space でトルグするようにしているのですが,他のアプリケーションでは問題ないのにJOSM の場合は無反応で日本語入力ができなくなってしまいました,
そこで一時的にiBus/fcitx の両方が動作するようにしてJOSM 利用時だけiBus を使うようにしていました.

この話を #osckansai で(確か)武山さんに話したところ環境変数か何かが足りないのでは?と教えてもらいました.

少し試したところ XMODIFIERS=”@im=fcitx” を設定するとfcitx でJOSM に日本語入力が出来るようになりました.

% XMODIFIERS=”@im=fcitx” java -jar ~/bin/josm-tested.jar

変換候補がウィンドウの下に表示されちゃいますがまあ許容範囲かなと.

Screenshot from 2014-09-21 13:08:09

毎回コマンドを打つのもあれなのでこんな感じでショートカットを作成しておきました.
#何気にこっちのほうが時間掛かったorz
##環境変数を指定するには env を付ける.~/, $HOME は使えなかったのでフルパス.

mysqldump の警告を修正(Warning: Using unique option prefix event instead of events is deprecated and will be removed in a future release. Please use the full name instead.)

mysql のバックアップ時に警告が出ているのに気づきました.

Warning: Using unique option prefix event instead of events is deprecated and will be removed in a future release. Please use the full name instead.

メッセージで検索するとちょっと前のリリースノートにそれらしいものが.

Previously, program options could be specified in full or as any unambiguous prefix. For example, the –compress option could be given to mysqldump as –compr, but not as –comp because the latter is ambiguous. Option prefixes now are deprecated. They can cause problems when new options are implemented for programs. A prefix that is currently unambiguous might become ambiguous in the future. If an unambiguous prefix is given, a warning now occurs to provide feedback. For example: Warning: Using unique option prefix compr instead of compress is deprecated and will be removed in a future release. Please use the full name instead. Option prefixes are no longer supported in MySQL 5.7; only full options are accepted. (Bug #16996656) MySQL :: MySQL 5.6 Release Notes :: Changes in MySQL 5.6.13 (2013-07-31)

オプションを省略したりすると警告を出すようになったよ.5.7から使えなくなるよ.ということのようです.

バックアップはssh 経由のリモートで取得していて, ~/.ssh/authorized_keys に以下のような感じで書いていました.

command="/usr/bin/mysqldump --defaults-file=/home/user/.my.cnf --opt --all-databases --event | /usr/bin/xz -9",from="nnn.nnn.nnn.nnn",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding ecdsa-sha2-nistp521 AAAA...

–event 部分は本来は –events の様なので以下のように修正して解決しました.

command="/usr/bin/mysqldump --defaults-file=/home/user/.my.cnf --opt --all-databases --events | /usr/bin/xz -9",from="nnn.nnn.nnn.nnn",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding ecdsa-sha2-nistp521 AAAA...

#ちなみに受け側はこんな感じ 2 13 * * * /usr/bin/ssh -q -p nnnnn -i /home/user/.ssh/id_ecdsa-mysql-backup user@server > /backup/server/db/`/bin/date +\%Y\%M\%d_\%H:\%m:\%S_\%s_$$`.sql.xz`

Kobo で mikutter が起動しなくて困る

IMG_20140902_071214
1月ほど前のオープンソースカンファレンス関西1日目にchroot で debian を起動した Kobo やAndroid を入れた Kobo を展示したりしていたのですが,mikutter を起動しておこうと思ったらエラーを吐いて起動しませんでした.
この時久々に起動したので大量のアップデートを行ったので環境が変わったのでした.デモの前に前もって確認しないとダメですよね….
エラーはKobo のコンソールを流れてしまい,スクロールバックの方法もよくわからない.ssh 経由で確認したいけれど会場のWi-Fi 経由では無理そうだったのでその時は諦めました.(開発者も居たのに!)

てことでさっき確認したのでメモ.

ssh 経由で起動してみるとこんな感じでした.

$ mikutter --confroot=/tmp/mikutter
/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb: line 10
   GLib-GObject-WARNING **:Attempt to add property GtkCellRendererMessage::message-id after class was initialised
/usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:100:in `=~': incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:100:in `block in translate_singular_message'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:99:in `each'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:99:in `translate_singular_message'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:104:in `block in translate_singular_message'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:84:in `block (2 levels) in each_text_domains'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:83:in `each'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:83:in `block in each_text_domains'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:81:in `each'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:81:in `each_text_domains'
        from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:103:in `translate_singular_message'
        from /usr/lib/ruby/vendor_ruby/gettext.rb:118:in `gettext'
        from /usr/share/mikutter/core/plugin/settings/basic_settings.rb:4:in `block in <top (required)>'
        from /usr/share/mikutter/core/plugin.rb:21:in `instance_eval'
        from /usr/share/mikutter/core/plugin.rb:21:in `create'
        from /usr/share/mikutter/core/plugin/settings/basic_settings.rb:3:in `<top (required)>'
        from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/share/mikutter/core/plugin/settings/settings.rb:4:in `<top (required)>'
        from /usr/share/mikutter/core/miquire_plugin.rb:138:in `load'
        from /usr/share/mikutter/core/miquire_plugin.rb:138:in `load'
        from /usr/share/mikutter/core/miquire_plugin.rb:130:in `block in load'
        from /usr/share/mikutter/core/miquire_plugin.rb:127:in `each'
        from /usr/share/mikutter/core/miquire_plugin.rb:127:in `load'
        from /usr/share/mikutter/core/miquire_plugin.rb:130:in `block in load'
        from /usr/share/mikutter/core/miquire_plugin.rb:127:in `each'
        from /usr/share/mikutter/core/miquire_plugin.rb:127:in `load'
        from /usr/share/mikutter/core/miquire_plugin.rb:97:in `block in load_all'
        from /usr/share/mikutter/core/miquire_plugin.rb:37:in `block in each_spec'
        from /usr/share/mikutter/core/miquire_plugin.rb:32:in `each'
        from /usr/share/mikutter/core/miquire_plugin.rb:32:in `each'
        from /usr/share/mikutter/core/miquire_plugin.rb:35:in `each_spec'
        from /usr/share/mikutter/core/miquire_plugin.rb:95:in `load_all'
        from /usr/share/mikutter/core/boot/load_plugin.rb:7:in `<top (required)>'
        from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/share/mikutter/core/miquire.rb:98:in `miquire_original_require'
        from /usr/share/mikutter/core/miquire.rb:95:in `file_or_directory_require'
        from /usr/share/mikutter/core/miquire.rb:76:in `block in miquire'
        from /usr/share/mikutter/core/miquire.rb:75:in `each'
        from /usr/share/mikutter/core/miquire.rb:75:in `miquire'
        from /usr/share/mikutter/core/miquire.rb:18:in `miquire'
        from /usr/share/mikutter/mikutter.rb:38:in `<main>'

言語環境周りぽいなてことで LANG を確認してみると空

$ echo $LANG

LANGja_JP.UTF-8 を設定してあげると動きました.

$ LANG=ja_JP.UTF-8 mikutter
/usr/lib/ruby/vendor_ruby/gtk2.rb: line 13
   Gtk-WARNING **:Locale not supported by C library.
        Using the fallback 'C' locale.
/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb: line 10
   GLib-GObject-WARNING **:Attempt to add property GtkCellRendererMessage::message-id after class was initialised
/usr/share/mikutter/core/plugin/display_requirements/display_requirements.rb:5: warning: already initialized constant CACHE_DIR
/usr/share/mikutter/core/plugin/aspectframe/aspectframe.rb:12: warning: previous definition of CACHE_DIR was here
/usr/share/mikutter/core/plugin/notify/notify.rb:6: warning: already initialized constant DEFINED_TIME
/usr/share/mikutter/core/plugin/extract/extract.rb:8: warning: previous definition of DEFINED_TIME was here

とりあえずは起動メニューにこれを設定してあげると良さそうです.

追記)
最近は $ LC_ALL=ja_JP.UTF-8 mikutter なのかな?

chroot 環境で `/dev/null’ が使えなくて困る

Kobo の chroot 環境で debian を動かしたりしているのでたまにアップデートを行うのですが,実機だと遅いのでPC のchroot 環境で実行したりします
#アーキテクチャの違いはqemu で吸収. > ユーザーモードエミュレーションqemu を使って Kono on Debian のイメージを Host PC で apt-get とかする | matoken’s meme

そこで今回 apt-get update 中に以下のようなエラーが発生.

/bin/sh: 1: cannot create /dev/null: Permission denied

/dev/null を確認するとぱっと見デバイスは問題なさそうだけど使えない.

# ls -la /dev/null
crw-rw-rw- 1 root root 1, 3 Sep 2 02:57 /dev/null
# echo hoge > /dev/null
bash: /dev/null: Permission denied

エラーメッセージで検索するとkinnekoさんのページがヒット.

あーなるほど!

chroot 元で確認してみると確かに nodev が.

% mount |grep rootfs
/dev/sdc1 on /media/mk/rootfs type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)

dev を付けて remount してみると

% sudo mount -o remount,dev /dev/sdc1
% mount |grep rootfs
/dev/sdc1 on /media/mk/rootfs type ext4 (rw,nosuid,relatime,data=ordered,uhelper=udisks2)

chroot しなおさなくても使えるようになった.毎回チェックしてるんですかね.

# echo hoge > /dev/null

てことで update 出来た :)

# apt-get install -f

eol な Ubuntu をアップグレードする

以前こんなメールを書いたことがあったのですが実際試してみたことはありませんでした.

やったことはありませんが,同様の手順でUbuntu でも11.04/11.10/12.04(lts)
の順にアップグレードして,来月リリースされるであろう14.04(lts) にアップグレードとするといけるかもしれません.
アップグレードは都度source list をold-releases に向けてdist-update することで行けそうな感じがします.
http://old-releases.ubuntu.com/ubuntu/

Disk を整理していてUbuntu 13.04 の入ったDisk が出てきたので実際に試してみました.

を見ると13.04,13.10 はeol なので, 13.04 -> 13.10 -> 14.04 と上げていく必要があるようです.

source.list を書き換えるためにコードネームを確認します.

を見るとこんな感じみたいです.

  • 13.04 -> raring
  • 13.10 -> saucy
  • 14.04 -> trusty

てことで,13.04 の source.list はこんな感じ.

/etc/apt/sources.list

deb http://jp.archive.ubuntu.com/ubuntu/ raring main restricted

先ずは13.04 の最新にするために source.list を先ず http://old-releases.ubuntu.com/ubuntu/ に書き換えます.

deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted

#実際は複数行あると思うので全ての有効な行を書き換えます.以降も同様.

アップデートしてアップグレードします.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

次に 13.04 -> 13.10 に上げる為に source.list のコードネームを saucy に書き換えます.

deb http://old-releases.ubuntu.com/ubuntu/ saucy main restricted

アップデートしてアップグレードします……アップデートできません.

http://old-releases.ubuntu.com/ubuntu/dists
の下を見ると saucy がありません.
http://jp.archive.ubuntu.com/ubuntu/dists/ の下を見るとあります.未だ old-re;eases に移動していないようです.eol になってもすぐに移動するとみんな困るから暫くは移動しないんでしょうね.

てことでこんな感じに書き換えて

deb http://jp.archive.ubuntu.com/ubuntu/ saucy main restricted

アップデートしてアップグレードします.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

これで 13.10 に上がりました.
14.04 へも同様に上げられるはずですが,せっかくなので do-release-upgrade で上げました.

$ sudo do-release-upgrade

そんなこんなで 14.04 になりました.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

ちなみにどうでもいい環境だからポンポンアップグレードしていますが,本来ならリリースノートなど読んでバックアップ取ってテスト環境で検証してとかしてから行ったほうがいいですね.

uMap で LUG/BUG Map を作ってみる

以前東海道らぐの定例IRCで日本のLUGは今どれだけあるんだろうというような話が出ました.
その時出てきたものを榎さんが以下にまとめてくれていました.
https://enoki.titanpad.com/lug-list

これをuMap で地図に並べてみました.

フルスクリーン表示

ついでに?
http://www.bug.gr.jp/organizantion.html
に書かれていたBUG も一緒に並べてみました.(実際活動してるかは未確認です><)
レイヤーをLUG/BUG に分けているので左上のレイヤー切り替えでどちらか片方のみを表示することも出来ます.

今回はTuxとデーモンくんの画像を使ってみました.デーモンくんは透過画像と差し替えたいところです><

ここ間違ってるよとか,ここにもあるよと行った情報お待ちしていますo




鹿児島Linux勉強会-第03回-に参加

7/25(金)に鹿児島らぐの鹿児島Linux勉強会に行ってきました.

今回は鹿児島中央駅前のよかプラザでの開催でした.
IMG_20140725_173144
#カタカナでリナックスというのを見るとこないだのLinuxConのスタッフTシャツを思い出します :)

今回はATND での集まりが悪くもしかしたら2人での開催になりそうと思っていたのですが,始まってみると6人でした.
今回は前半はLinux読書会でLinux標準教科書の輪読,後半は発表で私は以下のよな発表を行いました.

その他Vimネタ,Seti@homeネタが披露されました.

自分の発表は最後にしてもらって(スライド完成してなかったorz)
終了時間見ながら発表したのですが,共同購入をしていたRaspberryPi B+ の受渡し時間を考慮してなくて終了後適当なベンチで受け渡しとなってしまいましたorz

IMG_20140723_233409

終了後は有志(4人)で魚とか食べて

IMG_20140725_211837IMG_20140725_213943IMG_20140725_215719IMG_20140725_215823IMG_20140726_002543

その後漫画喫茶に泊まりました.公共交通機関欲しいです
#この日は公共交通機関があっても乗れなかった気はしますが><

IMG_20140726_0314405vD2ZXwC---1

自分のPCにキーロガーを設定する

キーロガー.人のPCに仕掛けるのはまずいけど自分の&自分しか使わないPCで試す分には問題ないだろうということで入れてみてます.

入れているのは以下の logkeys

導入方法

DebianやUbuntu だとパッケージがあるので logkeys パッケージを導入するだけ.

% sudo apt-get install logkeys

初期設定

/etc/default/logkeys という設定ファイルを設定します.

ENABLED=1
LOGFILE=/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`

# This should be updated according to your hardware
# Check README.Debian for more info
DEVICE=/dev/input/event0
  • ENABLED : 0 起動しない / 1 起動する
  • LOGFILE : ログファイルの指定
  • DEVICE : キーボードデバイス指定

自動起動してログファイルの設定,ログするキーボードデバイスの指定をします.
ログファイルは他の人から読まれないようにパーミッションを設定しておきましょう.ファイル名は試しに

/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`

とか書いてみたら行けました.試してみるもんですね.これで起動毎に新しいログファイルが作成されるはずです.
キーボードデバイスは /proc/bus/input/devices を見たり,実際のデバイスを cat してキー入力してみたりして見つけます.
詳細は /usr/share/doc/logkeys/README.Debian に書かれています.

以下の/proc/bus/input/devices では,頭のがkeyboad のようです.

I: Bus=0011 Vendor=0001 Product=0001 Version=ab54
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input0
U: Uniq=
H: Handlers=sysrq kbd event0 
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input3
U: Uniq=
H: Handlers=event2 
B: PROP=0
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input4
U: Uniq=
H: Handlers=kbd event3 
B: PROP=0
B: EV=3
B: KEY=4000 0 0

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input5
U: Uniq=
H: Handlers=kbd event4 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/devices/platform/pcspkr/input/input6
U: Uniq=
H: Handlers=kbd event5 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0019 Vendor=17aa Product=5054 Version=4101
N: Name="ThinkPad Extra Buttons"
P: Phys=thinkpad_acpi/input0
S: Sysfs=/devices/platform/thinkpad_acpi/input/input8
U: Uniq=
H: Handlers=kbd rfkill event6 
B: PROP=0
B: EV=33
B: KEY=18040000 0 10000000000000 0 1501b00102004 c000000001104000 e000000000000 0
B: MSC=10
B: SW=a

I: Bus=0003 Vendor=04f2 Product=b217 Version=0854
N: Name="Integrated Camera"
P: Phys=usb-0000:00:1a.0-1.6/button
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/input/input9
U: Uniq=
H: Handlers=kbd event7 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input10
U: Uniq=
H: Handlers=kbd event8 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0001 Vendor=14f1 Product=506e Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/input/input11
U: Uniq=
H: Handlers=kbd event9 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=8"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input18
U: Uniq=
H: Handlers=event10 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=7"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input17
U: Uniq=
H: Handlers=event11 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input16
U: Uniq=
H: Handlers=event12 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input15
U: Uniq=
H: Handlers=event13 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input14
U: Uniq=
H: Handlers=event14 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input13
U: Uniq=
H: Handlers=event15 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input12
U: Uniq=
H: Handlers=event16 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input7
U: Uniq=
H: Handlers=mouse0 event17 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003

I: Bus=0003 Vendor=0000 Product=0000 Version=0004
N: Name="ACPI Virtual Keyboard Device"
P: Phys=
S: Sysfs=/devices/virtual/input/input20
U: Uniq=
H: Handlers=sysrq kbd rfkill event18 
B: PROP=0
B: EV=3
B: KEY=ffffffffffffffff ffffffffffffffff ffffffffffffffff fffffffffffffffe

I: Bus=0011 Vendor=0002 Product=000a Version=0000
N: Name="TPPS/2 IBM TrackPoint"
P: Phys=synaptics-pt/serio0/input0
S: Sysfs=/devices/platform/i8042/serio1/serio2/input/input19
U: Uniq=
H: Handlers=mouse1 event19 
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3

I: Bus=0003 Vendor=046d Product=0a29 Version=0111
N: Name="Logicool Logicool Wireless Headset"
P: Phys=usb-0000:00:1d.0-1.1/input3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/0003:046D:0A29.000A/input/input27
U: Uniq=000d44b85a7d
H: Handlers=kbd event1 
B: PROP=0
B: EV=1b
B: KEY=18000 17800000000 8e000000000000 0
B: ABS=ffffff0000000000
B: MSC=10

H: Handlers=sysrq kbd event0 から実際のデバイスは /dev/input/event0 なので,これをcat して何かキーボード入力して反応があるか確認します.当たりのようです.

% sudo cat /dev/input/event0
�w�S��      �w�S��      �w�S��                  �w�S?�w�S?�w�S?p     a�w�SK
�w�SK
�w�SK
�w�w�S��.�w�S��.�w�S��     a�w�S(�^C

実際に使ってみると当たり前ですが入力したものがログファイルに吐かれています.もちろんパスワードなどもそのまま.
日本語入力したものなどはローマ字入力なのでローマ字で記録されています.フィルタにかけると読みやすくなりますね.メタ文字も<lctrl>&ltup><down>のような感じで記録されます.
root で動いているのでユーザを変更しても記録されます.
デバイスを指定しているので,外付けのキーボードを接続すると記録されません.

ちなみにプロセスはこんな感じなので色々丸見えですね.

% ps -ef| grep -i logk
root      1433     1  0  6月10 ?      00:00:25 /usr/bin/logkeys -s -u -d /dev/input/event0 -o /home/mk/.logkeys/20140610-222504-1004

キーロガーへの対策

このlogkeys であれば別のキーボードを使えば回避できます.でも全部のデバイスを記録するソフトウェアキーロガーだと回避できません.OS をLiveCD/USB などで別のものを起動してしまえば回避できます.

ソフトウェアでなく,ハードウェアキーロガーもあります.これはUSB やPS/2 ポートのキーボードの間に取り付けてロギングするものです.OS を変えても回避できません.わかりやすいものはPCの裏を見るだけで何かついてるのですぐわかりますが,キーボードの中やPC 筐体の中に仕込まれると一見しただけではわかりません.
仕込んだロガーを回収してログを回収する必要があるのですが,無線方式のものだと現地に行かなくても無線経由で回収できるので犯人の追跡も難しいです.

ちなみにそんなに特殊なものでなく普通にあちこちで売っています.おまけに安価.

画面を飛ばすものまであります.テンペストを使うよりずっとお手軽で実用的ですね><

ということで,外の端末ではセンシティブな情報は入力しないくらいしか対策は無さそうです.

Debian squeeze LTS リリース

Debian squeeze(old-stable) が今月末でサポートが切れます.しかし,i386とamd64 アーキテクチャについてはLong-Term-Support を実施して2016年02月06日までサポートを行うことになりました.このためのリポジトリがリリースされたようです.

backports もサポートされるようなので利用している人も助かりますね.
注意しないといけないのは,squeeze 全てのパッケージがサポートされるわけでは無い
LTS のリポジトリを登録しないといけないところです.
サポート状況のチェックツールもリリースされました.ツールのパッケージは debian-security-support で,コマンドは check-support-status です.

https://wiki.debian.org/LTS/Development#Add_squeeze-lts_to_your_sources.list
を参考にsource.list を書き換えて(mirrorにも対応しているので日本に向けるといいと思います)

/etc/apt/sources.list

# squeeze-lts
deb http://ftp.jp.debian.org/debian squeeze-lts main contrib non-free
deb-src http://ftp.jp.debian.org/debian squeeze-lts main contrib non-free

# backports(非利用時は以下は不要)
deb http://backports.debian.org/debian-backports squeeze-backports main
deb-src http://backports.debian.org/debian-backports squeeze-backports main

以下のような感じで行けました.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install debian-security-support
$ check-support-status
Security support has ended for one or more packages

Unfortunately, security support for some packages needed to be stopped
before the end of the regular security maintenance life cycle.

The following packages found on your system are affected by this:

* Source:libplrpc-perl, ended on 2014-05-31 at version 0.2020-2
  Details: Not supported in squeeze LTS
  Affected binary package:
  - libplrpc-perl (installed version: 0.2020-2)

* Source:zabbix, ended on 2014-05-31 at version 1:1.8.2-1squeeze5
  Details: Not supported in squeeze LTS
  Affected binary packages:
  - zabbix-agent (installed version: 1:1.8.2-1squeeze2)
  - zabbix-frontend-php (installed version: 1:1.8.2-1squeeze2)
  - zabbix-server-mysql (installed version: 1:1.8.2-1squeeze2)

Security support is limited for one or more packages

Unfortunately, security support for some packages had to be limited.

The following packages found on your system are affected by this:

* Source:php5
  Details: See README.Debian.security for the PHP security policy
  Affected binary packages:
  - libapache2-mod-php5 (installed version: 5.3.3-7+squeeze19)
  - php-pear (installed version: 5.3.3-7+squeeze19)
  - php5 (installed version: 5.3.3-7+squeeze19)
  - php5-cli (installed version: 5.3.3-7+squeeze19)
  - php5-common (installed version: 5.3.3-7+squeeze19)
  - php5-curl (installed version: 5.3.3-7+squeeze19)
  - php5-gd (installed version: 5.3.3-7+squeeze19)
  - php5-gmp (installed version: 5.3.3-7+squeeze19)
  - php5-mcrypt (installed version: 5.3.3-7+squeeze19)
  - php5-mysql (installed version: 5.3.3-7+squeeze19)

実はWheezy への以降は済んでいたのですが,LTS を試したいのでsqueeze 環境を復活させました :p