管理しているサーバに「FFFTPからアクセスすると中身が見えない」と報告があった。
ログをもらうとログイン、ファイル一覧の取得は「226 Transfer complete.」となっていて正常に完了した様子。
ブラウザからFTPプロトコルで接続してみるとファイル名が時刻や年と一緒になった「2007 hoge」のような名前になっている。
取得してきたファイル一覧をうまく解釈できていないよう。
そこで、正常にアクセスできる同環境のftpdとファイル一覧の形式を比べてみた。
問題になっているftpdは
-rw-r--r-- 1 root wheel 93 3 22 20:27 filename
という形式で、正常なftpdは
-rw-r--r-- 1 root wheel 93 Oct 23 2006 filename
という形式になっている。
もっと大胆に崩れているかと思ったけど、月の表示形式が名称の短縮名になっているか否かぐらいしか違いがない。
FTPのLISTコマンドはサーバ側の/bin/ls -lの出力に依存する。
サーバ側でls -lとすると月が数字で表示された。
これを短縮名で表示させるにはどうしたらいいだろうか。
ちょうどIRCで話していた経験者に聞くとローケルによって変わると教えてくれた。
そのときは一般ユーザからsuしたのでLC_ALL=ja_JP.eucJPになっていた。
# unsetenv LC_ALL && ls -l
としてみると短縮名で表示されるようになった。
と、そこで
# /etc/rc.d/inetd restart
としたことを思い出した。
つまり、環境変数は親プロセスから子プロセスに引き継がれるので、LC_ALLが一般ユーザ→ルート→inetd→ftpdと引き継がれて/bin/ls -lの出力をクライアントの対応していない形式にしてしまったということだった。
# (unsetenv LC_ALL; /etc/rc.d/inetd restart)
とすると問題は解決した。