Linuxデスクトップ元年

Linuxデスクトップ元年

自宅で使用するPCをLinuxにした。

勤め先の仕事スタイルは基本的に会社のPCにRDPで入って作業するスタイルで、クライアントPCにフルの開発環境をいれる必要がない。久しぶりに自宅メインPCをLinuxDE環境にしたくなり、チームに許可取ってクライアントPCをLinuxにしてみることにした。

2008年~2010年ぐらいまではUbuntoをメインPCにしていたが、当時の円高と学生割引でmacがやすかったのもあってmacに乗り換えて使っていなかった。数年macを使ったあともFPGAの環境やら組み込み系のプロプラな開発環境がWin版しかなかったのもあって、ずっとWindowsを使ってきたのでLinuxディストーションを使用するの実に久しぶりである。

Distro

OSの選定は楽しかった。多様な選択肢があって、選ぶ楽しさがあるのがやはりいい。選考基準のベースはローリングアップデートを採用していながらもバージョンアップを繰り返しても壊れにくく安定していること。最終的に以下の3つに候補を絞った。

  1. FreeBSD
  2. Void Linux
  3. NixOS

FreeBSDはLinux Kernelのディストーションではない。Unixだ。表題にLinuxと書いた通りFreeBSDは採用しなかったのだが、候補に入れていた。安定性が抜群でメジャーバージョンアップで大幅に変わらないことが期待できるからだ。20年前のドキュメントで最新バージョンのセットアップも十分可能という触れ込みだ。しかし、採用はしなかった。インストール対象がノートPCだったのでドライバや電源管理周りでハマったらやだなあという先入観と、使いたいWayland Compositorがうまく動かないという噂だったからだ。(Linux DEから離れてるうちWaylandが成熟していた。。。)

Void Linuxもいいなと思った。前にサブPCにArch Linuxをセットアップして軽く使っていたことがあるが、AURのインストールが依存ライブラリのバージョン違いでうまくいかないことがあった。Void LinuxのXBPS-srcという仕組みがAURのようにソースからコンパイルするのだが、ビルドがサンドボックスに閉じた形で行われるため、ホスト環境が汚れきれいに保たれるらしい。それもあってローリングアップデートを採用していてもバージョンアップで環境が壊れることが殆どないらしい。

NixOSはnixという純粋関数型言語で設定を記述する、めずらしい宣言型のディストーションだ。 宣言型なので、設定ファイルを配置してコマンド1発で同じ環境を復元できるという強さがある。また、環境もバージョニングされており、なにか問題が起きても、ブート画面で前のバージョンで起動し直せば良いときた。これもサブPCにインストールして使ったことがあり、結構いいなと思っていたが、nixを書くのが難しいと感じていて、あんまり手を入れてなかった。しかし、AIがコードを書いてくれる現代にこのnixのとっつきにくさは問題にならないことに気づいた。それよりも書かせたnixの再現性が抜群なので相性がいい。AIでOS環境を管理するのにとても都合がいい。

以上から、NixOSを採用した。

Desktop Environment

niri! これが使いたかった。Wayland Compositorのことをデスクトップ環境とは呼ばないらしいが便宜上デスクトップ環境と呼ぶことにする。

Gnome? KDE? いやいや、それならWindowsを使い続けていた。WSLもDockerもあるからね。YouTubeでHyprlandの動画を見てからHyprlandいいなと思っていたが、仕事をRDPで行うためほぼほぼフルスクリーンで使うと考えるとタイル型は全然使いがってが良くないな考えていた。

が、niriを発見してしまったのだ。hyperlandのようでいて、デスクトップがスクロールするというこの現Azureポータルの初期仕様を思わせるような見た目。これはピンときたね。最大化したRDPの画面を配置してもホットキーですぐにクライアントのウィンドウにアクセスできるという理想のリモデライフがね。(実際に理想のリモデライフが手に入った)

Security

昔Linuxをメインに使っていたときはまだ10代の学生だったのもあり、セキュリティにはむとんちゃくであったが、職場のRDPに接続する以上はやはりセキュリティ周りが気になる。WindowsのようにMicrosoft Defenderがある程度守ってくれるわけではないし、昨今のサプライチェーンアタック系はDefenderでも防ぐのは難しそうだ。手元の開発はなるべく、Devcontainer内で行いなにかあっても影響範囲は狭めるつもりだが、気にしてすぎるに越したことはないので考えた。

設けた構成は以下だ。

  1. Firewall: 不要なトラフィックは受けない・流さない
  2. Sysmon for Linux + SIGMA: システムコールの監視と、SIGMAで検査

ラップトップであるため、出先でWifi等につなぐかもしれないため、受信トラフィックは基本閉じ、Zoom会議用に携帯カメラをwebカム化するため、SRTに使用するポートだけ開ける。送信はHTTP,HTTPS,RDP,SSH,NTP,DNS,DHCPだけ開けた。DoHにすればDNSも閉じれたかもしれない。

SE LinuxやAppArmorは不採用だ。NixOSがSELinuxと相性が良くないのと、RedditをみてるとAppArmorも効果は限定的なのではという論調がおおくみられたからだ。

かと言って何もしないのは不安が募るばかりなので、防御ではなく監視をすることにした。Microsoft製のeBPFでシステムコールを収集できるSysmon for Linuxでネットワーク通信やIO操作のログをとり、SIGMAルールで2時間おきに検査する。監査に引っかることがあればデスクトップに通知される。2時間おきにSIGMAルール監査を通ってることがわかるため不安が募り続けることは回避できる、もちろん防御できるわけではないので、何かあったときは無事ではないだろうが延焼範囲は狭めることはできるだろう。(昨今の攻撃はAIで高速化しているとのことなので2時間ではすべてが終わってる可能性は否めないが。。。)

ダウンロードパッケージ物の検査用にClamAVをいれるかは悩み中。単にブラウザのダウンロード物を検査するだけなら、ブラウザをchromeに変えてchromeが自動的にハッシュをぶつけてくれる処理に頼ればいいのではとも思う。

長期使用

長期間使用しアップデートを重ね安定しているのか判断していく、場合によってはVoid Linuxに切り替えることもあるかもしれない。