sftp:3 SFTPサーバー の貧相さ

Linux上で SFTPサーバー は sshサーバー にアドオンとして搭載される。
そのため、FTPサーバー としてメジャーに使われている wu-ftpd*1proftpd を用いることができない。
FTPサーバー で求められている機能は、大きく分けて二つある。
一つは、他の仕組みと独立してユーザー管理できること。
そして、見せたくないフォルダをみせずに済むチェンジルートの仕組みである。
SFTPサーバー はこれら2つを持っていないのだが、それがどれだけ悲惨なことか説明しよう。


一般的にユーザー管理の方法は、サーバーマシン自身での管理とサービスを行うアプリケーション毎の管理に分けられる。
ここでサーバーマシンと同じ管理手法を行ってしまうと、SFTPサーバー を使う人は他のサービスのアプリケーションを使うことが可能になってしまう。
一旦サーバーと同じ管理とし、pam/SELinuxLDAP 、passwdとシェルを組み合わせることでセキュリティーを強化することも不可能ではない*2
が、これらの設定を行うには幅広い知識が必要でサーバー管理者のスキルが問われる。そのため躊躇しても仕方が無いだろう。
一方、サービスを行うアプリケーション毎の管理であれば、非常に簡単に設定が行える。


チェンジルートの仕組みも同様に重要である。なぜならば、何も設定していない FTPサービス は重要なデータを取得することが可能である。
ユーザーを管理している passwdファイル を取得することや、各システムファイルも閲覧が可能となる。
これらのファイルは一般的なユーザーには必要の無いものであろう。
チェンジルートは不必要なフォルダに入ることを防ぐ。結果、他のディレクトリにある重要な情報にアクセスできなくなる。
従ってチェンジルートでセキュリティを強化することができる。


このように、アプリケーションで独立したユーザー管理、チェンジルートの仕組み、両方ともセキュリティーに関わる問題である。
しかし、SFTPサーバー はほとんどのサーバー管理者が当然と思っている機能すらデフォルトで持っていない*3


その上、これら問題すら霞んでしまう問題がある。
それはファイル名が文字化けしてしまうことである。


例えば、Windowsの日本語のファイルを SFTP 経由で遠隔地のサーバーに入れるとしよう。
この日本語ファイルはサーバーを直接見ようとしても文字化けをしてしまっている。
遠隔地の Windowsマシン から Sambaサービス 経由で見ても同様に見られない。
これは、サーバーの内部で用いている文字コードUTF-8 であるにもかかわらず、
Windows で使用している SFTPクライアント から送られてくる文字コードSJIS で、
SFTPサーバー がその SJIS の文字を無理やり保存していることから生じている。


そのため SFTP 経由であればファイル名は取得できる。けれど他のサービスと兼用できないのは大きくマイナスだろう。
これらの理由から、SFTP を使用せずに転送経路をとにかく暗号化する IPSec を使い、その上で FTP を行う試みが多いのも納得できる。

*1:最近では非推奨が多いですが・・・

*2:TCPラッパーやxinetは割愛

*3:後述 NADMIN氏