xfs上でrm -rfしてしまったものを復活させる

夜中に電話で起こされて何事かと思ったら「間違ってrm -rfしてしまいました」と。
対象ファイルシステムがxfsでして、extundeleteやext4magicが使えません。xfsでは諦めろ的なblogが多かったですが、Photorec/TestDiskというツールでなんとか回収できました。しかし欲しかった対象ファイルのうち3割ぐらいでしょうか…
残りは少し古いバックアップがあったので、合わせてみて、不足分は泣きを見ることにしてもらいました。

オープンソースで無料のファイル復元ソフト「PhotoRec」 – GIGAZINE
GIGAZINEの記事は2007年ですが、

Partition Recovery and File Undelete
配布元を見ると2024年でも更新されているし、XFSに対応している。
今回はLinux(CentOS Stream 9)でGUIなしの操作でしたので、コマンドラインだけで使えるツールであることは重要。

データ復旧ソフトと復元サービス(NAS対応)|復旧天使 公式
復旧天使という有償のもあるのですが、LinuxではGUIソフトのようで、今回はパス。

消しちゃったファイル群自体は200MBもないハズなのですが、対象パーティションが100GBあるので、最悪それぐらいの削除ファイルが復活される可能性があります。
ということで128GBのUSBメモリを用意して、fdiskでパーティションを切ってxfsにてフォーマット。回収ファイルの置き場とします。

回収ファイルと別領域のhomeに
testdisk-7.2.linux26-x86_64.tar.bz2 をダウンロードして、tar xjfで解凍、photorec_staticを起動すると、CUIでのメニュー操作が可能になります。
対象パーティションと書き込み先を指定して、あとは待つ。
回収先にはrecup_dir.XXXというディレクトリと共に、回収されたファイルが大量にできていきます。
ファイル名は回収されておらずランダムになっているので、あとは中身を見ながらリネームするなりしてぽちぽちと回収していくのです…

バックアップはこまめに、別領域、別媒体に取るべし、な…

sshに入れなくなった?鍵ファイルの最後の改行

しばらくぶりにsshで繋ごうとしたら入れないサーバーがあるというので見てみました。
認証はRSAまたはED25519の鍵ファイル。
windows10上のpowershellからsshで試します。
私の鍵では入れたが、たしかにその人(useraaaとします)の鍵では入れない。

サーバー上でuseraaaがssh localhostとすると、入れる。鍵ペアとauthorized_keysは問題なさそう。
で、ググってみたら

ssh – Windows 10 OpenSSH key invalid format – Stack Overflow
>I got this working.. believe it or not by adding a single LF at the end of your private key file.

秘密鍵ファイルの最後に改行を足せと。
ええーそんなばかなーと思って足したら、通ったよ…

サーバー側 OpenSSH_8.7p1, OpenSSL 3.0.1
クライアント側 OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
でした。
クライアント側FileZilla 3.62.2(Windows)の場合は改行なくても通りました。
Windowsのsshと特定の組み合わせの問題なのか?

古いサーバーにsshで繋げられない(ssh-dssを今さら使う)

古いLinuxサーバー(CentOS4か5か)がLAN内にあって、そちらにsshアクセスしようとしましたが、ssh鍵がdsaって書いてある。
最近windowsからのsshはpowershellから起動して使うようになりまして(便利になったね!)。

とりあえず
ssh -i id_dsa IP_ADDRESS
としてみましたが
sign_and_send_pubkey: no mutual signature supported
とエラーでアクセスできず。

一時的にssh-dssを許可しないといけないので
ssh -i id_dsa -o ‘PubkeyAcceptedKeyTypes +ssh-dss’ IP_ADDRESS
これで使うことができました。

古いサーバーはリプレースしていかないとね…

古いOpenVPNに繋がらないときの対処

OpenVPN機能が内蔵されたルーターなどでバージョンが古い相手に、最新のOpenVPN2.5.xで繋ごうとするとエラーで接続できません。

tls-cipher "DEFAULT:@SECLEVEL=0" 
data-ciphers AES-256-GCM:AES-128-GCM:AES-128-CBC:BF-CBC

configに上記を追加することで、2.5から使われなくなったBF-CBCというcipherを強制して合わせることができますが、将来的になくなるようなので、その時には相手方のルーターもバージョンアップするかリプレースしないといけないことになります。

■OpenVPN 2.5 のサイファの互換性 | OpenVPN.JP

WordPressからフォームでメールを送るとGmailに拒否される

WordPress + Contact Form 7でメールを送ってもらっていたサイトが、2月あたりからGmailに拒否されるようになってしまった。GmailがSPAM対策強化をしていたのでそれが関係するだろうということで調査。

SPFに対応するのは必須。しかしSPFがPASSしても拒否される。メールを見てみると、いわゆるenvelope fromのアドレスが異なっていた。
シェルから echo ‘test’ | mail -s ‘test’ -r (自ドメインのアドレス) (送信先Gmailのアドレス) とするとテストできるが、これは通る。
しかしWordpressから送ると apache@サーバー名 で送られてしまう。

WordPressのメールの仕組みはenvelope fromを書き換えないし、CF7ではReturn-Pathを設定しても反映されないようだ(WP関数内で落とされる)。
結局このへんの回避のために WP Mail SMTP というプラグインを導入。いろいろリッチなオプションを求められますが最低限でOK。
「送信元アドレスを返信先 (return-path) として設定」このチェックが重要。

これでGmailにも拒否されなくなりました。もっとやるならDKIM、dmarc対応までやらねばならない。