使っている Ubuntu の VM が以下のようなファイルシステムエラーを吐いて通常起動しなくなってしまったので、対処方法をメモ。
勝手にシングルユーザーモードになっているようなので、以下のようにfsck
による/dev/sda1
の修復をかけて無事に修復することができました。
SadServers という実際に Linuxサーバのトラブルーシューティングを体験できる演習環境を見つけたのでメモ。
実際にサーバ運用をしたことがあれば、Easy や Medium あたりは楽しんで挑戦できると思いますが、Hard はかなり難しいです。
SadServers - Troubleshooting Linux Servers
Troubleshoot and make a sad server happy!
"Like LeetCode for Linux"
Capture The Flag challenges. Train and prove your debugging skills.
Practice for your next SRE/DevOps interview.
Get a full remote Linux server with a problem and fix it.
この演習環境のアーキテクチャについてはGitHub - fduran/sadservers: SadServers.com Public で解説されていますが、1 回ごとに EC2 でインスタンスが立ち上がるようになっているようです。
Linux などの mv や cp などの基本的なコマンドの実装であるGNU Coreutils のバージョン 9.1 がリリースされていたのでメモ。
こんなツール、まだバージョンアップする余地があるの?という感じもしますが、現在でもアップデートされ続けているんですよね。
基本コマンドをカバーするGNU Core Utilitiesがバージョンアップ | TECH+
ddがFreeBSDと同じ動作するエイリアスのサポートや、dircolorsが環境変数LS_COLORSのカラーコードに従って表示するオプション、環境変数COLORTERMを参照するようになった。改良点はcpやmv、installを使用してディレクトリをコピーする際は、競合状態を回避するためにopenat()システムコールを使用。printfによるマルチバイト文字の数値表示をサポートした点が目立つ。
ミネソタ大学の博士課程の学生が脆弱性に関する実践的な研究をするために、Linux カーネルにUse After Free のバグを埋め込んだパッチを送って論文を書いた件が、大きな問題になっていたのでメモ。
ソフトウェア関連の研究に携わっている者として、人ごとではない深刻な事態だと受け止めています。研究をしていると、やってみたいという衝動に駆られるけれども倫理上の理由で実行できないということはよくあります。
問題の論文(On the Feasibility of Stealthily Introducing Vulnerabilities in Open-Source Software via Hypocrite Commits)についてはすでにwithdraw(取り下げ)になっているようです。
大学においてはヒト対象実験については倫理指針が定められていて、事前審査を受けなければ実施することができませんが、ソフトウェアの世界にも倫理審査が必要な時代が来てしまうのかもしれません。以下のメールで述べられている Linux コミュニティの意見は厳しいですが至極真っ当な意見だと思います。
Re: [PATCH] SUNRPC: Add a check for gss_release_msg - Greg KH
Our community welcomes developers who wish to help and enhance Linux. That is NOT what you are attempting to do here, so please do not try to frame it that way.
Our community does not appreciate being experimented on, and being"tested" by submitting known patches that are either do nothing on purpose, or introduce bugs on purpose.
If you wish to do work like this, I suggest you find a different community to run your experiments on, you are not welcome here.
Because of this, I will now have to ban all future contributions from your University and rip out your previous contributions, as they were obviously submitted in bad-faith with the intent to cause problems.
† 参考
外部から多数のコネクションを受け付けるサーバが遅いと思ったら、コネクションを取りこぼしていました。
具体的にはnet.core.somaxconn
の値が Linux 5.4 以前はデフォルトが 128 とかなり小さな値で、これがボトルネックになってしまっていました。このカーネルパラーメーターは TCP ソケットの listen() のバックログのキューの深さを表しているので、多数の接続を受け付ける場合にはこれを大きくしておく必要があります。
現在の設定値を確認するのはこんな感じでできます。
そして、値の変更はこんな感じでできます。
プロセスが起動するときにnet.core.somaxconn
の値を読み込んでいることがあるので、値の反映後に httpd などの daemon も再起動してやる必要もあります。
† 参考
/proc/sys/net/ipv4/* Variables
somaxconn - INTEGER
Limit of socket listen() backlog, known in userspace as SOMAXCONN.
Defaults to 4096. (Was 128 before linux-5.4)
See also tcp_max_syn_backlog for additional tuning for TCP sockets.
date コマンドは-d オプションを使うと、たとえば今から 30 日前のような相対的な日付を簡単に得ることができます。
これについては常識みたいなものですが、今更ながら思わぬハマりポイントを見つけてしまったのでメモ。
まず ago の挙動について、coreutils のマニュアルを確認すると、-1 を掛ける(符号を反転させる)という意味だということが分かります。
問題は、実はこの効力が unit ごとであるということです。
つまり1ヶ月と1日前という場合にうっかり -d "1 month 1 day ago" と書いてしまうと、1ヶ月後の1日前になってしまうことになります。
複数の単位を組み合わせる場合には ago は使わずに符号を書いた方が誤解がないですね。
† 参考
Relative items in date strings (GNU Coreutils)
Following a relative item by the string ‘ago’ is equivalent to preceding the unit by a multiplier with value -1.
Linux でLD_PRELOAD
環境変数と共有ライブラリを使うと、標準ライブラリの関数の前後に処理を挟んだり、処理を上書きしたりする簡易アスペクト指向のようなことができます。
† 簡単なターゲットプログラム
今回ターゲットにする関数はみんな大好きprintf()
。
今日はこんな感じのプログラムを用意しました。
helloworld.c
これをコンパイルして実行すると、こんな感じの実行結果になります。
今回の目的はこの helloworld をリコンパイルせずにprintf()
の挙動を変更することにあります。
Linux のブートローダーGRUB2*1 にBootHole というセキュリティホールが見つかっていたのでメモ。今回のようなブートローダーの問題は UEFI も絡んできますし、失敗すると OS が起動できなくなるので、いろいろと対策がめんどくさそうですね。
JVNVU#98487886: GRUB2 にバッファオーバーフローの脆弱性
GRUB2 は OS を起動するためのブートローダです。細工された設定ファイル (grub.cfg) を読み込ませることでヒープベースのバッファオーバーフローが引き起こされ、OS の起動前に任意のコードを実行される可能性があります。
なお、Secure Boot を利用している場合においても本脆弱性の影響を受けます。
† 参考
セキュリティ問題で SMBv1 は最近の Windows ではデフォルトで無効化されています。
特にそれで困ることはないと思っていたのですが、NetBIOS discovery が無効化されることによって Explorer のネットワーク上に自動的にファイルサーバが表示されないという問題が生じるようです。最近、ネットワークに NAS などが表示されなくなったなぁと思っていましたが、これは F/W 等の設定ではなくて NetBIOS discovery だったようです。
これを NetBIOS に頼らずに解決するのが以下のwsdd というソフトウェア。
設定もあまり難しくないですし、CentOS などではdnf install wsdd でインストールできます。
christgau/wsdd: A Web Service Discovery host daemon.
wsdd implements a Web Service Discovery host daemon. This enables (Samba) hosts, like your local NAS device, to be found by Web Service Discovery Clients like Windows.
wsdd の WSD ってWeb Service Discovery なんですね。
WS-Discovery って SOAP とかウェブサービスという言葉が流行った 2000 年代初め頃は良く目にしましたが、久しぶりに見た気がします。
最近の BLM 運動で人種差別的な用語を撤廃する動きが続いています。
これを受けて Linux でもブラックリストやスレーブなどの用語を変更することになったようです。
もともと僕は言葉狩りが好きではないですし、ホワイトリスト・ブラックリストはそもそも人種と関係ないと思うんですよね。
なにより過去のドキュメントは消えないわけで、単なるパフォーマンスとしては混乱を招くだけだと思うのですが。
Linuxでも「ブラックリスト」「スレーブ」などの用語を変更へ - CNET Japan
Linus Torvalds氏は米国時間7月10日、Linuxのカーネルコードやドキュメントでの新しい、よりインクルーシブ(包括的)な用語の使用を承認した。
Linux開発者らは今後、master/slave(マスター/スレーブ)やblacklist/whitelist(ブラックリスト/ホワイトリスト)の代わりに新たな用語を使用するよう求められる。