Armadilloフォーラム

ftpサーバ入れ替えるとlsコマンド不可になる

kz21_ym

2023年2月8日 9時57分

お世話になります。

armadillo-460 atmark-dist-20180330 を使用しています。
現象としてはftpサーバを元々の/bin/ftpd から
バイナリパッケージの ftpd_0.17-33_armel.deb の
/usr/sbin/in.ftpd に置換えしたところ
クライアントからlsコマンドが実行できなくなるというものです。

/etc/ftpchroot でftpのユーザを指定されているときに
この状態になります。
ftpchrootのユーザを無効にした場合はアクセス可能になります。

/home/ftp/bin にはlsのハードリンクは存在しているのですが
ftpサーバを替えるとクライアントから見えなくなるようです。
原因ご教示いただけると助かります。

サーバ置換えるのはIPv6で動作させようとしているためです。
ftprootのユーザ無効の状態ではIPv6でも正常にアクセスできる
ことは確認できています。

環境としては
---------------
armadillo-460
atmark-dist-20180330 ベース
linux-2.6.26-at30

ftpサーバ
ftpd_0.17-33_armel.deb
inetd
openbsd-inetd_0.20080125-6_armel.deb

ftpのユーザは都合によりftp1に変更しています
ホームは /home/ftp のまま

ftpクライアント
ffftp-v5.7-x64
WinSCP 5.21.7
CarotDAV 1.16.1
(WinSCP,CarotDAVはlsが不可なのかまでは不明アクセスができなくなる)
---------------
という内容になっています。
ftpサーバとinetdを入れ替えています。

inetdは同じで
/etc/inetd.conf の設定を元の /bin/ftpd の指定に戻すと
/etc/ftpchrootのユーザ有効でもこれまで通りアクセスできます。

サーバ入れ替える時に何か必要な手順など
あるでしょうか?

よろしくお願いします。

コメント

回答ありがとうございます。
/home/ftp/lib は元々配置されていたものをそのままにしています。
/etc/init.d/checkftp で作られるものそのままです。
ファイルがあるのでそれでいいと思いあまり意識していませんでした。
入れ替えたftpサーバに合わせたものを用意するなどはしていませんでした。
それが原因の可能性あるでしょうか?

すみません追記です。
> 入れ替えたftpサーバに合わせたものを用意するなどはしていませんでした。
> それが原因の可能性あるでしょうか?
と書いたのですが、ftpchroot無効にすると入れ替えたftpサーバでも動作するので
動作できるlibのファイルが /etc/init.d/checkftpで /home/ftp/libにリンクされた
状態ではあると思います。

at_akihito.irie

2023年2月16日 10時54分

入江です。

改めてお客様の環境の現状を確認させていただきたいので、
最終的に実現したい状態(ftpサーバ入れ替え、ftpchroot有効済み)で
以下の2つのコマンドの実行結果を送っていただけますでしょうか。

[armadillo]# cat /etc/ftpchroot
[armadillo]# find /home/

以下のようになっています。

cat /etc/ftpchroot の結果です。
---------------------------------------------------
[root@test (ttyp1) /]# cat /etc/ftpchroot
ftp1
[root@test (ttyp1) /]#
---------------------------------------------------

find /home/の結果になります。
---------------------------------------------------
[root@test (ttyp1) /]# find /home/
/home/
/home/www-data
/home/www-data/images
/home/www-data/images/ui-icons_222222_256x240.png
/home/www-data/images/ui-icons_888888_256x240.png
/home/www-data/images/ui-bg_glass_75_dadada_1x400.png
/home/www-data/images/ui-bg_glass_55_fbf9ee_1x400.png
/home/www-data/images/ui-bg_glass_65_ffffff_1x400.png
/home/www-data/images/ui-icons_2e83ff_256x240.png
/home/www-data/images/ui-icons_cd0a0a_256x240.png
/home/www-data/images/ui-bg_highlight-soft_75_cccccc_1x100.png
/home/www-data/images/Thumbs.db
/home/www-data/images/ui-bg_glass_75_e6e6e6_1x400.png
/home/www-data/images/ui-bg_glass_95_fef1ec_1x400.png
/home/www-data/images/ui-icons_454545_256x240.png
/home/www-data/encoding.js
/home/www-data/icoER.png
/home/www-data/icoCM.png
/home/www-data/cgi-bin
/home/www-data/cgi-bin/RevCgi2.cgi
/home/www-data/cgi-bin/download.cgi
/home/www-data/cgi-bin/RevCgi3.cgi
/home/www-data/cgi-bin/RevCgi.cgi
/home/www-data/td2.css
/home/www-data/admin
/home/www-data/admin/.htpasswd
/home/www-data/external
/home/www-data/external/jquery
/home/www-data/external/jquery/jquery.js
/home/www-data/icoEM.png
/home/www-data/line01.png
/home/www-data/tbar.png
/home/www-data/jquery-ui.css
/home/www-data/icoEMb.png
/home/www-data/index.html
/home/www-data/jquery-ui.js
/home/www-data/line02.png
/home/guest
/home/ftp
/home/ftp/etc
/home/ftp/etc/group
/home/ftp/etc/passwd
/home/ftp/bin
/home/ftp/bin/ls
/home/ftp/lib
/home/ftp/lib/libm.so.6
/home/ftp/lib/libcrypt.so.1
/home/ftp/lib/libc.so.6
/home/ftp/lib/libgcc_s.so.1
/home/ftp/lib/ld-linux.so.3
/home/ftp/pub
/home/ftp/pub/lost+found
/home/ftp/pub/lost+found/.cor00
[root@test (ttyp1) /]#
---------------------------------------------------

at_akihito.irie

2023年2月16日 17時00分

入江です。

情報ありがとうございます。

追加で確認ですが、この状態で/etc/ftpchrootにftpを追記して、ユーザー名ftp
ftpアクセスすると、ファイル一覧は取得できますか?

ftpユーザ /etc/ftpchroot に追加しても
ftp1のときと同じでした。
ファイル一覧取得のところで実行できなくなります。

ちなみにですが
/etc/inetd.confを
---------------------
#ftp stream tcp nowait root /bin/ftpd ftpd -l
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l
ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -l
---------------------
という内容にしているのですが
これを /bin/ftpd の方有効に戻すとユーザftp1でもftpで正常にアクセスできます。
サーバだけが替わった状態だと思うのですが。。

at_akihito.irie

2023年2月16日 18時32分

入江です。

思い当たるところは確認していただきましたが、現状原因と対策方法が分かりかねますので、
こちらでも同様の環境を作って再現させてみたいと思います。

つきましては、現象が再現するお客様の環境に近しい環境の作成手順を送って頂けますでしょうか。

お手数おかけして申し訳ございませんが、よろしくお願いいたします。

遅くなってすみません。
環境作成の手順と関連ファイルを添付します。
手順にはあまり関係ないものも含まれているかもしれませんが
この手順で一応再現するかと思います。
ただこの環境だと前と少し違っていて
ユーザがftpのままだと ftpchroot 無しでも ls が実行できないようです。
ユーザ ftp1 にしたとき ftpchroot 無しなら ls 実行でき
有りだと実行できない状態になっています。

よろしくお願いいたします。

ファイル ファイルの説明
関連ファイル.zip
手順まとめ.txt

横から口を挟みますが、一般論です。
ftpdは、ftpchrootの設定がなくても、「ユーザ名がftpまたはanynymousの時はchrootする」という動作をします。なので「ftpchrootを設定しないときは、ftpでログインしたときのみ症状」はやはりchroot周りの症状と思われます。

chrootしている先が/home/ftpではないもかもしれませんん。とりあえずlsではなくnlistコマンドでファイル一覧が取れるかどうか確認してみてはどうでしょう?

コメントありがとうございます。
nlistの結果だけですが、nlistは正常なようです。
--------------------------------------------------------
ftp> nlist
200 PORT command successful.
150 Opening ASCII mode data connection for 'file list'.
etc
bin
lib
pub
226 Transfer complete.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for '/bin/ls'.
--------------------------------------------------------
続けてls実行するとこのまま止まってしまいます。

linux-ftpd_0.17.orig.tarが対応するソースなのかと思って見てみましたが
ユーザのホームディレクトリへ chrootしているように見えるので
なにか問題あるのか分かりませんでした。
chootが正しく行えていないとすると何か考えられる原因
あるでしょうか?

at_akihito.irie

2023年3月3日 11時53分

入江です。

/home/ftp/ ディレクトリと、その下のファイル群の権限の問題かもしれません。

chmodとchownコマンドを使用して、以下のように権限と所有者を変更した上でお試し頂けますでしょうか。

1. /home/ftp ディレクトリの所有者をrootにし、権限を555にする

[armadillo]# chown root:root /home/ftp
[armadillo]# chmod 555 /home/ftp

2. /home/ftp/bin ディレクトリの所有者をrootにし、権限を511にする

[armadillo]# chown root:root /home/ftp/bin
[armadillo]# chmod 511 /home/ftp/bin

3. /home/ftp/bin ディレクトリ内のlsファイルの権限を111にする

[armadillo]# chmod 111 /home/ftp/bin/ls

以上を実施した上で動作確認していただけますでしょうか。

参考: https://manpages.debian.org/testing/manpages-ja/in.ftpd.8.ja.html

at_dominique.m…

2023年3月3日 16時31分

よこからすみません。

マルティネです。

こちらは armadillo-a460 を手元になかったので、手っ取り早くコンテナで試してみました。
https://armadillo.atmark-techno.com/news/20180402/software-update-a400 から romfs-a460-1.08.img.gz を取得して別の環境で生かしました(コンテナって便利ですね…)

in.ftpd 等の deb を展開して起動させたら、ログインの際に pam_unix が「libselinux.so.1」を見つからなくて失敗します。
同じ時代のlibselinux を http://archive.debian.org/debian/pool/main/libs/libselinux/libselinux1_… から展開させたら、無事に ftp1 のユーザーでログインできました。
ftpchroot 無しでは使えていますので、そこは手順の問題だけと思って話を続きます。

その段階では in.ftpd が正常に動いています:
* ftp ユーザーを /etc/ftpusers から外したら、in.ftpd でもログインできて chroot されます(/etc/ftpchroot にないのでちょっと変わった動きですが…)し、/etc/init.d/checkftp の /home/ftp の初期化で ls も実行できました。
* ftp1 ユーザーを作成して /etc/ftpchroot に入れない場合にログインできて、ls も実行できます。
* ftp1 ユーザーを /etc/ftpchroot に追加したところ、/home/ftp1 に chroot されました. /home/ftp1 に /home/ftp をコピーしたところで ls も実行できましたし、ftp1 の home directory を /home/ftp にしたら /home/ftp をそのまま使ってくれました。

再現できなかった理由はいくつか考えられます:
* 手順と言ってもまったく同じやり方で展開してないかもしれません。chroot無しでは動きますので、そこは考えにくいですが、一応どこかで違うことを試した可能性があります。ちなみにこちらは ipv6 で試そうとして /etc/inetd.conf に tcp6 を追加したところ busybox の inetd では listen しなかったので、inetd も更新しましたか?
* カーネルの適合性の問題 ? chroot と chroot無しの差は少ないと思うので、これもちょっと考えがたい…

strace もインストールして、inetd を strace -f で follow すればどこで失敗しているのは分かると思います。

本件では関係あるかどうかは何ともいえませんが、一般的に、atmark-dist と debian/ubuntu が根本なところでかなり変わってますので、dpkg を使うのは難しいと思います。思わないところに適合性の問題がでて不具合につながりますので、できれば atmark-dist をビルドした環境で in.ftpd をビルドした方がいいと思います。

よろしくお願いします。

入江さんに示していただいた
権限の変更を試してみたところ
アクセスできるようになったようです。

ftpchroot有効でIPv6でもアクセスできています。
この権限の変更の形で進めてみたいと思います。
ありがとうございました。

マルティネさん
再現等ありがとうございました
元々のinetdは IPv6対応していないようだったので
inetdも更新しています。
dpkgの件承知しました。

これでftp関連も進められそうです。
助かりました
ありがとうございます。

すみません
先ほど進められそうと書込みましたが
権限の変更の
 chmod 111 /home/ftp/bin/ls
を実行すると su が実行できなくなるようです。
これを回避する方法はありますでしょうか?
 chmod 4111 /home/ftp/bin/ls
にすると suできるようになるのですが
ftpの方が ls 実行できない元の状態に戻ってしまいます。

正しいやり方か分からないのですが
busybox を /home/ftp/bin にコピーして
/home/ftp/bin/ls をそのリンクにして
chmod 111 /home/ftp/bin/ls
とすると ftpからの ls も実行でき
suも実行できる状態にできるようなので
その形にしてみようかと思います。
こうすることで何か問題などあれば
ご指摘いただければと思います。
よろしくお願いいたします。