‘技術’ カテゴリーのアーカイブ

SambaとWebDAVをめぐる冒険(ダイジェスト版)

2012 年 3 月 15 日 木曜日

多くの人は、「いま出来ていること」に特に問題が無ければ、「いまやっている方法でそのまま」続けていくことを望みます。
(この点については、いろいろな意味で重大な問題を含んでいるので、また改めて掘り下げたいと思います)

さて、業務使用において「枯れている」ことは重要です。しかし、年月を経て、そのままの形での継続使用が不可能になってしまった技術もあるわけです。
たとえば、長いこと使ってきたファイルサーバを、容量の問題などで置き換えなければならないとします。
個人で使う場合はさまざまな選択肢がありますが、お客さんの業務環境への導入とした場合に、
・Windowsのエクスプローラで操作する
・NASをやめて外部サーバ上に置きたい
・コピー速度の著しい低下/価格の著しい上昇は認められない
というような条件を置くと、選択肢はほぼSambaかWebDAVしかないということになります。

(以下長い冒険の旅のダイジェスト版であるため、細かい検証結果や数値などは全力で端折ってあります)

転送速度からするとSambaを選びたいわけですが、そもそもSambaは意外と(?)設定がヘビーであることで知られています。特に今回、Sambaで提供する共有領域として、ネットワークマウントしたストレージを使おうとしたため、かなりの長い期間格闘することになりました。(NFSなどを共有領域にするとハマる、というのは昔から言われていましたが)
・速度面からSMB2.0にしたい→XP未対応
・OSXで書き込みできない→OSXはnetatalkで提供することに
・netatalkでも書き込みできない→NFS上に. AppleDB置いちゃダメ
・Lion未対応
・FSのマウント時にlockオプションは外す
・設定が煩雑に
・さらにユーザー管理ががが
という具合にダークサイドに堕ちそうになったので、いったんやめて、「そもそもWebDAVだとどうなのか?」を検証することにしました。

速度の面では「Sambaの1/2〜1/3」という資料もあったのですが、実際にやってみると、Samba(ネットワークマウントではなくローカルに書き込み)の80%程度の速度でした。しかも意外なことに、ネットワークマウントした領域へ書き込んでもあまり速度が下がりません。また、WebDAVは比較的シンプルな規格だということもあり、Windows/OSXの別無く読み込み・書き込みともに、さほど細かい設定無く行なうことができます。
WebDAVの最大の問題点は、Vistaの64bit版で扱いに問題が出る、ということです。正直現時点では使用されていないのでスルーします。

セキュリティ的にどうなのか、というと、FTP・Sambaと同じようによろしくはないです。設定によっては穴が開きますし、脆弱性もあります。
最低でもIPAによる調査報告は読まないと危険です。
http://www.ipa.go.jp/security/fy14/reports/webdav/index.html

さてこれで、ネットワークマウントした領域をWebDAVで提供し、エクスプローラやFinderで読み書きすることが可能となりました。

とりあえず要件を満たして使えるようにはなったので、ここから、「エクスプローラやFinderを使わずにファイルを扱う方法」(つまり何らかのアプリケーションを使う方法)を気長に浸透させるという仕事になります。
ということで、物語は冒頭に戻るわけです。そしてその問題には様々な要素・側面があるので、また改めて。

名称がSJISのファイル・ディレクトリを移動する作業対策

2012 年 3 月 6 日 火曜日
古いサーバの移設ということを時々します。
どれくらい古いか、どのような使い方をしていたかにもよるわけですが、日本語で、しかもSJISのディレクトリ・ファイル名満載のサーバだったりすることがあります。

古いバージョンのFFFTPがけっこう長いこと使われ続けているので、そのあたりも影響があるかもしれません。UTF-8に対応したのは2007年の話ですし、アップデートしないと本当に危ない。

さて移設には問題がいくつかあります。
・cp/scpがディレクトリ・ファイル名を認識できない場合がある
・zipに固めても4GB以上あると32bit環境で解凍できない

いろいろ試した結果、このようにしました。
1)可能な限りいったんローカルに保存する
2)シェルでSJISを扱えるようにする
3)ディレクトリ・ファイル名をUTF-8に変換する
4)scp/rsyncなどでコピー

1と4はいいとして、2と3はどうするのか、というのが下記です。
(つまり自分用メモです)

2)
locale -a |grep ja
SJISが使えないということはこの時点で ja_JP.sjis が含まれていません。
そこで
localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
で追加します。
export ja_JP.SJIS
でSJISが表示できます。(ターミナルの文字セットが対応していれば)

3)
上記1で、FTP/SFTPソフトなどの設定をSJISにすることができれば、ダウンロードの時点でPCのローカル文字コードに変換されるため、そのまま新しいサーバにアップロードできます。可能であればこの方法が一番安全です。
以下の方法はそれが何らかの理由でできない場合の手段です。ファイル破壊の危険性があるので、おすすめしません。
実行の結果がどのようになろうとも責任を負うことはできませんのでご承知ください。

convmvというコマンドがあります。
http://www.j3e.de/linux/convmv/man/
RedHat系であればrpmがあるので、入っていない場合でも yum install convmv でインストール可能です。
まずこんな感じで実行してみます。
convmv -r -f sjis -t utf8 *
これは、カレントディレクトリ以下を再帰的にSJIS→UTF-8へ変更する「テスト」(いわゆるドライラン)です。実際に変更はされません。

ドライランを実行させた際に表示されるのは、
・既にUTF-8なディレクトリ・ファイル名がある場合
・SJIS→UTF-8に変換できない謎なディレクトリ・ファイル名がある場合
です。
あきらかにディレクトリ内がSJISである場合に後者が表示され、かつ見た目には化けていない、という場合は、例えば丸数字(「①」など)が使われているなど、文字コード的に怪しい文字が含まれている場合が多いようです。
これらはあらかじめ手作業で取り除いておく(=別の名称に変更しておく)ことになります。
問題がなければ
convmv -r -f sjis -t utf8 * --notest
で変換が実行されます。

yumでrpm版ProFTPDをインストールする際の注意点メモ

2012 年 2 月 16 日 木曜日
ProFTPDというサーバアプリケーションがあります。
CentOS標準のvsftpdがセキュリティ・安定性などを重要視している(CentOSの方向性に沿っているとも言えますが)のに対してProFTPDは、
ProFTPD grew out of the desire to have a secure and configurable FTP server, and out of a significant admiration of the Apache web server.
http://www.proftpd.org/goals.html
と書かれているように、モジュールと設定によって機能が拡張できるよう作られています。
モジュールで他サービスと連携して動かすためにあえてvsftpdを使わずにProFTPDを使うわけです。

さて、以前こんなことなどを書いている通り、rpmとyumを愛用しています。インストールやアップデートの際の依存性トラップに引っかかるのを避けるためです。ProFTPDのように公式に存在しなければ、epel・rpmforge・remiレポジトリからのyum installを日常的に利用しています。

ということでProFTPDをいつも通りインストールします。
yum install proftpd
しかし設定してサービスを起動させようしましたが立ち上がりません。ログを見ると、どうやらモジュールの読み込みエラーが出ています。
前回入れて動作したバージョンは1.3.3g、今回は1.3.4a(1.3.4aのaはalphaということではないらしい)ということで、はて1.3.4では何か大きな変更でもあったのか?とRelease Notesを見てみますが、特にそのような記載は見当たりません。

そこで、いくつかの旧バージョンを比較してみたところ、サイズがやけにバラバラであることに気付きました。
proftpd-1.3.3c-1.el6.rf.i686.rpm ... 1.9MB proftpd-1.3.3g-1.el6.i686.rpm ... 3.4MB proftpd-1.3.4a-1.el6.rf.i686.rpm ... 2.1MB
1.3.3gだけ大きい。ちなみにソースファイルでは
proftpd-1.3.4a.tar.gz ... 7.3MB
です。
rpm -qlpで各rpmの中身を比較してみると、どうやら含まれているモジュールの数がだいぶ異なるようです。
バージョンでモジュールの数が大幅に増えたり減ったりするというのはちょっと考えづらいので、その他の違いを見てみます。
proftpd-1.3.3c-1.el6.rf.i686.rpm ... rpmforge proftpd-1.3.3g-1.el6.i686.rpm ... epel proftpd-1.3.4a-1.el6.rf.i686.rpm ... rpmforge
(remiにはproftpdが無い模様)

つまり、rpmforgeのrpmとepelのrpmでは、インストールしても使用できるモジュールが異なる、ということです。configureオプションの--with-modulesに指定されているモジュールの数が違うということになるかと思います。
rpmforge・epel・remiレポジトリを使用可能にした状態でyum install proftpdとしてしまうと、これら3個所の中で単純にバージョンナンバーが最新のパッケージが入ってしまいます。

epelはそもそも、fedora用に作ったパッケージをRHEL系のOSで使えるようにする、というプロジェクトです。 ということは…と思ってfedoraのproftpd-1.3.4-0.15.rc3.fc16.i686.rpmを見てみたところ、やはりproftpd-1.3.3g-1.el6.i686.rpmと同じ内容(いわゆる全部入り)になっています。

本家proftpd.orgがrpmを出していない以上、それぞれのrpmレポジトリが独自にrpmを作成しているわけで、それぞれのレポジトリの考え方によって内容が異なる、特に今回のような場合、具体的にパッケージに含まれる範囲が異なる、というようなことを改めて認識した次第です。

今回の教訓としては…
CentOS公式ではないrpmでは、インストールの前に、configureオプションやインストールされる内容を確認した方が良い
ということになるかと思います。


細かい話をすると、rpmforge版にはDSOモジュールが
mod_quotatab mod_quotatab_file mod_sql
しか入っていません。
epel版は
mod_ban mod_ctrls_admin mod_exec mod_facl mod_geoip mod_ifsession mod_load mod_quotatab mod_quotatab_file mod_quotatab_radius mod_quotatab_sql mod_radius mod_ratio mod_rewrite mod_sftp mod_sftp_pam mod_sftp_sql mod_shaper mod_site_misc mod_sql mod_sql_passwd mod_tls_shmcache mod_wrap mod_wrap2 mod_wrap2_file mod_wrap2_sql
となっています。