Armadilloフォーラム

FTP サーバの構築(ABOS)

k.sato

2023年9月27日 11時36分

佐藤と申します。
お世話になっております。

●6.2.7.2. FTP サーバを構築する
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

VSCode の python アプリケーションのDebianコンテナで開発しているのですが、
上記のalpineでの構築方法と同じ手順でよいでしょうか?

またIPアドレスをDHCPに設定(ipv4.method auto)したとき
python_app.confの「add_args --env=PASV_ADDRESS=<ホストの IP アドレス>」はどう記述するのでしょうか?

vsftpdはVSCodeのpackages.txtに追記しています。

以上、よろしくお願い致します。

コメント

at_dominique.m…

2023年9月27日 13時45分

佐藤さん

マルティネです。

> VSCode の python アプリケーションのDebianコンテナで開発しているのですが、
> 上記のalpineでの構築方法と同じ手順でよいでしょうか?

設定ファイルは /etc/vsftpd.conf になりますが、パッケージをインストールして設定を行えば同じですね。

> またIPアドレスをDHCPに設定(ipv4.method auto)したとき
> python_app.confの「add_args --env=PASV_ADDRESS=<ホストの IP アドレス>」はどう記述するのでしょうか?

アドレスが分からない場合は vsftpd に任せた方がいいと思います。
コンテナのコンフィグに 「set_network host」を追加することでコンテナが直接にネットワークにつなげれますので、
その場合はコンフィグから pasv_address の行を削除していけば自動的に取得されます。

よろしくお願いします。

k.sato

2023年9月27日 14時09分

マルティネ様

佐藤です。

回答ありがとうございます。

> > またIPアドレスをDHCPに設定(ipv4.method auto)したとき
> > python_app.confの「add_args --env=PASV_ADDRESS=<ホストの IP アドレス>」はどう記述するのでしょうか?
>
> アドレスが分からない場合は vsftpd に任せた方がいいと思います。
> コンテナのコンフィグに 「set_network host」を追加することでコンテナが直接にネットワークにつなげれますので、
> その場合はコンフィグから pasv_address の行を削除していけば自動的に取得されます。

add_args -t                                     # コンテナに tty を渡し デバッグターミナル出力
set_network host                                # コンテナを実行するネットワークとして host を指定
 
add_ports 21:21 21100-21110:21100-21110 8080:80

python_app.confはこのように修正しました。

[container ~]# sed -i -e 's/anonymous_enable=YES/#anonymous_enable=YES/g' /etc/vsftpd.conf
[container ~]# sed -i -e 's/#local_enable=YES/local_enable=YES/g' /etc/vsftpd.conf
[container ~]# sed -i -e 's/#write_enable=YES/write_enable=YES/g' /etc/vsftpd.conf
[container ~]# echo "pasv_enable=YES" >> /etc/vsftpd.conf
[container ~]# echo "pasv_min_port=21100" >> /etc/vsftpd.conf
[container ~]# echo "pasv_max_port=21110" >> /etc/vsftpd.conf
[container ~]# echo "pasv_address=$PASV_ADDRESS" >> /etc/vsftpd.conf

/etc/vsftpd.confの設定はこれだと思うのですが、最後の行の「 echo "pasv_address=$PASV_ADDRESS" >> /etc/vsftpd.conf
は実行しなくてもよいでしょうか?

最後をやらずに「vsftpd /etc/vsftpd.conf」を実行してみたのですが、
ログインできません。

ログインユーザとパスワードはコンテナに既に登録されているatmarkを使用しています。

root@armadillo:/# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
・・・
atmark:x:1000:1000::/home/atmark:/bin/sh

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

k.sato

2023年9月28日 8時48分

佐藤です。

続けてすみません。

また、python_app.confに「set_network host 」を追加したせいなのか
これまで表示されていたWebブラウザが表示されなくなりました。

podarmadillo:~# podman ps
CONTAINER ID  IMAGE                              COMMAND         CREATED         STATUS             PORTS                                                                           NAMES
4df2e84b3fb6  localhost/python_app_image:latest  sh /startup.sh  57 seconds ago  Up 56 seconds ago  0.0.0.0:21->21/tcp, 0.0.0.0:8080->80/tcp, 0.0.0.0:21100-21110->21100-21110/tcp  python_app

podman ps」で上記と表示されていたポートの情報がなくなったのが原因でしょうか?

poarmadillo:~# podman ps
CONTAINER ID  IMAGE                              COMMAND         CREATED         STATUS             PORTS       NAMES
2d0996a9ea9f  localhost/python_app_image:latest  sh /startup.sh  14 seconds ago  Up 13 seconds ago              python_app

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

at_dominique.m…

2023年9月28日 9時44分

佐藤さん、

マルティネです。

> add_args -t                                     # コンテナに tty を渡し デバッグターミナル出力
> set_network host                                # コンテナを実行するネットワークとして host を指定
> 
> add_ports 21:21 21100-21110:21100-21110 8080:80

「set_network host」 の場合は add_ports が無視されます。
この理由で同じく 8080 -> 80 の mapping がなくなりましたので、手動に (iptables等)で転送させるか、コンテナ内にポート 8080 ではなく 80 で listen するように変更必要があります。

set_network host を設定しないと、vsftpd が接続している IP を取得できないので、IP をコンテナの外で取得しない限りは set_network host が一番確実だと思います。
(nf_conntrack_ftp のモジュールでその IP を書き替える機能もありますが、使いにくいのであまりおすすめしません。ポートの変更が難しい場合はコンテナを二つに別けてもいいかもしれません…)

> [container ~]# echo "pasv_address=$PASV_ADDRESS" >> /etc/vsftpd.conf

> /etc/vsftpd.confの設定はこれだと思うのですが、最後の行の「 echo "pasv_address=$PASV_ADDRESS" >> /etc/vsftpd.conf
> は実行しなくてもよいでしょうか?

実行すると vsftpd のアドレスの自動解決はされませんので、実行しないでください。

> 最後をやらずに「vsftpd /etc/vsftpd.conf」を実行してみたのですが、
> ログインできません。
>
> ログインユーザとパスワードはコンテナに既に登録されているatmarkを使用しています。

> root@armadillo:/# cat /etc/passwd
> root:x:0:0:root:/root:/bin/bash
> ・・・
> atmark:x:1000:1000::/home/atmark:/bin/sh

debian bullseye のコンテナで試したところ、以下のエラーが表示されましたが:
「500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/var/run/vsftpd/empty」
そのディレクトリも生成した後にログインできました。

コンテナの atmark ユーザーのパスワードはデフォルトで設定されていませんので、その問題でしょうか?

よろしくおねがいします。

k.sato

2023年9月28日 10時12分

マルティネ様

佐藤です。

> debian bullseye のコンテナで試したところ、以下のエラーが表示されましたが:
> 「500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/var/run/vsftpd/empty」
> そのディレクトリも生成した後にログインできました。
>
> コンテナの atmark ユーザーのパスワードはデフォルトで設定されていませんので、その問題でしょうか?
ありがとうございます。
コンテナの atmark ユーザーのパスワードを設定することで、
FTPサーバにログインすることができました。

>「set_network host」 の場合は add_ports が無視されます。
>この理由で同じく 8080 -> 80 の mapping がなくなりましたので、手動に (iptables等)で転送させるか、コンテナ内にポート 8080 ではなく 80 で listen するように変更必要があります。
こちらの方法について教えていただけませんか?

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

at_dominique.m…

2023年9月28日 10時55分

マルティネです。

> >この理由で同じく 8080 -> 80 の mapping がなくなりましたので、手動に (iptables等)で転送させるか、コンテナ内にポート 8080 ではなく 80 で listen するように変更必要があります。
>
> こちらの方法について教えていただけませんか?

add_ports のルールを読み間違っていました。コンテナですでに port 80 を使って、armadillo の port 8080 で使っていますね。

https://armadillo.atmark-techno.com/forum/armadillo/16565 での以前の問い合わせを参考にすると https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma… の lighttpd を使ってましたが、それでしたら:
* armadillo のポート 8080 ではなく、http://<armadillo ip> (ポート80)に接続すると起動していると思います。
* ポート 8080 を使いたい場合は lighttpd.conf に server.port = 8080 を追加することでポート 8080 からの接続を受けるようになります

よろしくお願いします。

k.sato

2023年9月28日 11時44分

マルティネ様

佐藤です。
> add_ports のルールを読み間違っていました。コンテナですでに port 80 を使って、armadillo の port 8080 で使っていますね。
>
> https://armadillo.atmark-techno.com/forum/armadillo/16565 での以前の問い合わせを参考にすると https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma… の lighttpd を使ってましたが、それでしたら:
> * armadillo のポート 8080 ではなく、http://<armadillo ip> (ポート80)に接続すると起動していると思います。
> * ポート 8080 を使いたい場合は lighttpd.conf に server.port = 8080 を追加することでポート 8080 からの接続を受けるようになります
ポート80に接続してみたのですが「このページは動作していません」となりました。

server.modules = (
	"mod_indexfile",
	"mod_access",
	"mod_alias",
 	"mod_redirect",
  "mod_fastcgi",  # この行を追加
)
 
server.document-root        = "/var/www/html"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80
・・・

lighttpd.confの「server.port = 80」を8080に書き換えて
ブラウザからポート8080に接続してみたのですが変わりませんでした。

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

at_dominique.m…

2023年9月28日 12時09分

マルティネです。

> ポート80に接続してみたのですが「このページは動作していません」となりました。

なるほど、「このページは動作していません」エラーでしたら、サーバーに接続はできてますが何かのエラーが発生しているということですね。
調べたところ chrome はいくつかのパターンでそのメッセージを表示していますが、メッセージのしたにローマ字の「HTTP ERROR 500」のような文字列が表示されているはずですが、今回もエラー 500 であってますか?
エラー 500 の場合はサーバー側のエラーなので、コンテナの /var/log/lighttpd/error.log に何かのエラーメッセージが出力されているはずですが、どうでしょうか。

おそらく、lighttpd の問題ではなく、cgi で実行しているスクリプトに問題があったと思いますが、スクリプトやエラーをみないと何ともいえません。
(例えば、スクリプトで python_app (コンテナのホスト名)に接続しようとしていた場合、network host を使うことでその名前が /etc/hosts に追加されなくなったので動かなくなります。ネットワーク設定にかかわらず、localhost を使えるはずです。)

よろしくお願いします。

k.sato

2023年9月28日 13時10分

マルティネ様

佐藤です。

> なるほど、「このページは動作していません」エラーでしたら、サーバーに接続はできてますが何かのエラーが発生しているということですね。
> 調べたところ chrome はいくつかのパターンでそのメッセージを表示していますが、メッセージのしたにローマ字の「HTTP ERROR 500」のような文字列が表示されているはずですが、今回もエラー 500 であってますか?
> エラー 500 の場合はサーバー側のエラーなので、コンテナの /var/log/lighttpd/error.log に何かのエラーメッセージが出力されているはずですが、どうでしょうか。
lighttpd.confを「server.port = 80」に戻して確認しました。
「HTTP ERROR 502」と表示されています。

root@armadillo:/# cat /var/log/lighttpd/error.log
2023-09-28 02:01:25: (server.c.1704) server started (lighttpd/1.4.69)

error.logの中身はサーバの開始だけですね

> おそらく、lighttpd の問題ではなく、cgi で実行しているスクリプトに問題があったと思いますが、スクリプトやエラーをみないと何ともいえません。
> (例えば、スクリプトで python_app (コンテナのホスト名)に接続しようとしていた場合、network host を使うことでその名前が /etc/hosts に追加されなくなったので動かなくなります。ネットワーク設定にかかわらず、localhost を使えるはずです。)
こちらについてはどこに手を付ければよいのか...

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

at_dominique.m…

2023年9月28日 13時38分

マルティネです。

> 「HTTP ERROR 502」と表示されています。

502 もサーバー側のエラーですので、どこかにエラーメッセージが表示されるはずです。

> > おそらく、lighttpd の問題ではなく、cgi で実行しているスクリプトに問題があったと思いますが、スクリプトやエラーをみないと何ともいえません。
> > (例えば、スクリプトで python_app (コンテナのホスト名)に接続しようとしていた場合、network host を使うことでその名前が /etc/hosts に追加されなくなったので動かなくなります。ネットワーク設定にかかわらず、localhost を使えるはずです。)
> こちらについてはどこに手を付ければよいのか...

心当たりがなければ別のエラーだと思いますので、無視してください。

ひとまずエラーメッセージを見つからないと何も分かりませんので、そっちらで頑張るしかないと思います。
mod_fastcgi のオプション一覧 https://redmine.lighttpd.net/projects/lighttpd/wiki/Mod_fastcgi に 「fastcgi.debug = 1」の設定がありますので、それで何か表示されるかもしれませんし、
fastcgi で実行しているサーバー(php?)にもログがあるかもしれません。

どうしても見つからなければ明日もう少しみてみます。

よろしくお願いします。

k.sato

2023年9月28日 13時59分

マルティネ様

佐藤です。

> ひとまずエラーメッセージを見つからないと何も分かりませんので、そっちらで頑張るしかないと思います。
> mod_fastcgi のオプション一覧 https://redmine.lighttpd.net/projects/lighttpd/wiki/Mod_fastcgi に 「fastcgi.debug = 1」の設定がありますので、それで何か表示されるかもしれませんし、
> fastcgi で実行しているサーバー(php?)にもログがあるかもしれません。
「fastcgi.debug = 1」はlighttpd.confの設定ですかね?

/var/log/lighttpd/error.logの出力もブラウザの表示も変わりませんでした。

●Armadillo-640/IoT(A6):Webブラウザの画面から制御(lighttpd+php-cgiを使用)
https://armadillo.atmark-techno.com/blog/615/12832
を参考にlighttpd.confを修正していますので添付します。

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

ファイル ファイルの説明
lighttpd.conf

k.sato

2023年10月2日 13時09分

佐藤です。

引き続きWebブラウザの件よろしくお願い致します。

それとは別にFTPサーバのホームディレクトリをSDカードやUSBメモリにする方法なのですが
●Armadillo Base OS:コンテナ内でUSBメモリやSDカードを使用する方法
https://armadillo.atmark-techno.com/blog/15349/13918

FTPのログインユーザをatmarkとしたとき上記を参考にpython_app.confに下記を追加する形でよろしいのでしょうか?
add_volumes /var/app/volumes/usb:/home/atmark

また、以前python_app.confに「add_volumes etc:/etc」はよろしくないと聞いたのですが、
コンテナ内の/etc/passwd、/etc/shadow、/etc/vsftpd.confの変更を残す方法を教えていただけませんか?

現在は「podman commit」にてコンテナを分けて保存しています。

以上、よろしくお願い致します。

at_dominique.m…

2023年10月2日 18時24分

佐藤さん、

マルティネです。

> 引き続きWebブラウザの件よろしくお願い致します。

提供していただいた lighttpd.conf でテストページをロードしてみたところ問題なく実行しましたので、問題は別のところにあると思います。
こちらはそのままの fastcgi.debug = 1 でページをロードする度に大量のログが /var/log/lighttpd/error.log に出力されますので、ログが出ないのはおかしいです。

> それとは別にFTPサーバのホームディレクトリをSDカードやUSBメモリにする方法なのですが
> ●Armadillo Base OS:コンテナ内でUSBメモリやSDカードを使用する方法
> https://armadillo.atmark-techno.com/blog/15349/13918
>
> FTPのログインユーザをatmarkとしたとき上記を参考にpython_app.confに下記を追加する形でよろしいのでしょうか?
> 「add_volumes /var/app/volumes/usb:/home/atmark

/home/atmark に他のデーターがなければそれでもいいですね。
他のユーザーを足す場合は /home でもいいかもしれません。

> また、以前python_app.confに「add_volumes etc:/etc」はよろしくないと聞いたのですが、
> コンテナ内の/etc/passwd、/etc/shadow、/etc/vsftpd.confの変更を残す方法を教えていただけませんか?
>
> 現在は「podman commit」にてコンテナを分けて保存しています。

/etc/vsftpd.conf は別のところに保存するか、add_volumes でファイルを直接に指定してもいいです。(/var/app/volumes/vsftpd.conf がすでに存在する場合は 「add_volumes /var/app/volumes/vsftpd.conf:/etc/vsftpd.conf」でファイルとして扱えます)
passwd/shadow の方は、本当にいい方法はないと思います。そのファイルを保存して、コンテナイメージを後で更新すると色々動かなくなりますのでおすすめできません。
代わりに、ftp でログインできるユーザーは別のファイルで管理できます。
設定は少し複雑で申し訳ないですが、https://blog.asial.co.jp/1028/ を参考にしていただければどうにかなるかと思います。

よろしくお願いします

k.sato

2023年10月3日 14時52分

マルティネ様

佐藤です。

> 提供していただいた lighttpd.conf でテストページをロードしてみたところ問題なく実行しましたので、問題は別のところにあると思います。
> こちらはそのままの fastcgi.debug = 1 でページをロードする度に大量のログが /var/log/lighttpd/error.log に出力されますので、ログが出ないのはおかしいです。
すみません。
社内ネットワークのセキュリティソフトがポート80へのアクセスを防いでいたようでした。

初期化インストールディスクからやり直してもダメで「set_network host」ではブラウザに表示されず、
コメントアウトして「add_ports 8080:80」を追加すると表示されました。
その後に「add_ports 80:80」としたのに表示されないためPCと直結したところ表示されました。

セキュリティソフトを落として「set_network host」を復活させたところ
ブラウザ表示されましたのでそういうことだと思います。

お騒がせして申し訳ありません。

> /etc/vsftpd.conf は別のところに保存するか、add_volumes でファイルを直接に指定してもいいです。(/var/app/volumes/vsftpd.conf がすでに存在する場合は 「add_volumes /var/app/volumes/vsftpd.conf:/etc/vsftpd.conf」でファイルとして扱えます)
> passwd/shadow の方は、本当にいい方法はないと思います。そのファイルを保存して、コンテナイメージを後で更新すると色々動かなくなりますのでおすすめできません。
> 代わりに、ftp でログインできるユーザーは別のファイルで管理できます。
> 設定は少し複雑で申し訳ないですが、https://blog.asial.co.jp/1028/ を参考にしていただければどうにかなるかと思います。
vsftpd.confは「add_volumes startup.sh:/startup.sh 」これを教えていただいていたので
応用すればよかったのですね。

また同じようにパスワード設定した後にコンテナからpasswdファイルを取り出しておいて
「add_volumes passwd:/etc/passwd」という形には出来ないのですね。

FTPのログインユーザについてはリンク先を確認してみます。

k.sato

2023年10月4日 11時13分

マルティネ様

佐藤です。

> /etc/vsftpd.conf は別のところに保存するか、add_volumes でファイルを直接に指定してもいいです。(/var/app/volumes/vsftpd.conf がすでに存在する場合は 「add_volumes /var/app/volumes/vsftpd.conf:/etc/vsftpd.conf」でファイルとして扱えます)
> passwd/shadow の方は、本当にいい方法はないと思います。そのファイルを保存して、コンテナイメージを後で更新すると色々動かなくなりますのでおすすめできません。
> 代わりに、ftp でログインできるユーザーは別のファイルで管理できます。
> 設定は少し複雑で申し訳ないですが、https://blog.asial.co.jp/1028/ を参考にしていただければどうにかなるかと思います。
リンク先を確認しました。
1.vsftpdの設定はvsftpd.confの設定なので理解できるのですが、
2.PAMの設定のバーチャルユーザーの認証のために使えるモジュールは、pam_userdb、pam_pwdfileがあります。(他にもあるかもしれません。)
の辺りからわかりません。

root@armadillo:/# cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
 
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
 
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so

/etc/pam.d/vsftpd」の存在は確認できてcatで確認してみたのですが、
これはどちらを使用するのでしょうか?

また、リンク先の下記などはコマンドを打ちこむというのではなく「/etc/pam.d/vsftpd」に追記するという意味でしょうか?

auth    required pam_pwdfile.so pwdfile /etc/vsftpd/passwd
account required pam_permit.so

そうして「add_volumes etc_vsftpd:/etc/vsftpd」などとして「passwd」ファイルを保存するような形でしょうか?

以上、よろしくお願い致します。

at_dominique.m…

2023年10月4日 13時29分

佐藤さん

マルティネです。

> 1.vsftpdの設定はvsftpd.confの設定なので理解できるのですが、
> 2.PAMの設定のバーチャルユーザーの認証のために使えるモジュールは、pam_userdb、pam_pwdfileがあります。(他にもあるかもしれません。)
> の辺りからわかりません。

vsftpd のユーザー確認は vsftpd 自体が行っているのではなく、必ず pam で確認しますので、「仮想ユーザー」のパスワードは pam に教える必要があります。

>

> root@armadillo:/# cat /etc/pam.d/vsftpd
> # Standard behaviour for ftpd(8).
> auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
> 
> # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
> 
> # Standard pam includes
> @include common-account
> @include common-session
> @include common-auth
> auth    required        pam_shells.so
> 

> 「/etc/pam.d/vsftpd」の存在は確認できてcatで確認してみたのですが、
> これはどちらを使用するのでしょうか?
> また、リンク先の下記などはコマンドを打ちこむというのではなく「/etc/pam.d/vsftpd」に追記するという意味でしょうか?

内容を入れ替えます。
pam の設定を説明したら数時間かかりますが、簡単に言うと required の行はみんな確認されますので、追加するだけでしたら unix (/etc/passwd + /etc/shadow) の確認と /etc/vsftpd/passwd の両方が必要になってしまいます。

今回の対応で unix のログインを使わなくなりますので、 common の include も pam_shells も削除してから auth pwdfile / account permit だけで試してみてください。

> そうして「add_volumes etc_vsftpd:/etc/vsftpd」などとして「passwd」ファイルを保存するような形でしょうか?

はい、ファイルの場所はどこでもいいので pwdfile をすでにあるボリュームにするか、こういう風に新しい /etc/vsftpd のボリュームでいいと思います。
pam のコンフィグは一度行ったら変更することはないので、コンテナで直接に保存でいいです (dockerfile か podman commit) 。

よろしくお願いします。

k.sato

2023年10月5日 10時48分

マルティネ様

佐藤です。

> 今回の対応で unix のログインを使わなくなりますので、 common の include も pam_shells も削除してから auth pwdfile / account permit だけで試してみてください。
>
> > そうして「add_volumes etc_vsftpd:/etc/vsftpd」などとして「passwd」ファイルを保存するような形でしょうか?
>
> はい、ファイルの場所はどこでもいいので pwdfile をすでにあるボリュームにするか、こういう風に新しい /etc/vsftpd のボリュームでいいと思います。

事前にコンテナ内で「adduser」を行いユーザ「user_name」とパスワード「password」を登録して
vsftpd /etc/vsftpd.conf」でFTPサーバ起動しFTPサーバに接続出来ることを確認しました。

この状態でArmadillo再起動を行い、コンテナをリセットした状態でPAMの設定を行いました。
①/etc/vsftpd.confの修正
②/etc/pam.d/vsftpdの修正

# Standard behaviour for ftpd(8).
auth	required	pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
 
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
 
# Standard pam includes
#@include common-account
#@include common-session
#@include common-auth
#auth	required	pam_shells.so
auth    required pam_pwdfile.so pwdfile /etc/vsftpd/passwd
account required pam_permit.so

③「htpasswd」を使用するために「apt install apache2-utils」
④「htpasswd -nb user_name password > /etc/vsftpd/passwd」でユーザとパスワードを登録
⑤「vsftpd /etc/vsftpd.conf」でFTPサーバ起動
上記の手順で確認したのですがFTPサーバに接続することが出来ません。

②/etc/pam.d/vsftpdを「#auth   required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
とコメントアウトしても接続することが出来ません。

関連しそうなファイルを添付します。
どこがおかしいのか教えていただけないでしょうか?

以上、よろしくお願い致します。

ファイル ファイルの説明
python_app.conf /etc/atmark/containers/python_app.conf
vsftpd.conf /var/app/rollback/volumes/vsftpd.conf でコンテナ内の/etc/vsftpd.conf
startup.sh /var/app/rollback/volumes/startup.sh で試験的にvsftpdの起動をコメントアウト

at_dominique.m…

2023年10月5日 11時35分

佐藤さん

マルティネです。

> どこがおかしいのか教えていただけないでしょうか?

そうですね。

失敗しそうなところは:
* guest_username の設定は存在するユーザーでなければなりません。
virtual user を使うことで linux のユーザーを使いませんので、ログインすべてが同じ guest ユーザーになってしまいます。
user_config_dir を使えば、特定の virtual user で別の guest_username やディレクトリを設定することも可能ですが、まずは「atmark」で設定すれば無難だと思います。
guest_username ユーザーが存在しない場合は ftp クライアントで接続したときにエラーが表示されましたが、見えなかったでしょうか?
ATDE から curl を使えばエラーを表示する方法で確認できます(user, pass, 10.1.2.3 を置き換えてください):

atmark@atde9:~$ curl -v ftp://user:pass@10.1.2.3
*   Trying 10.1.2.3:21...
* Connected to 10.1.2.3 (10.1.2.3) port 21 (#0)
< 500 OOPS: vsftpd: cannot locate user specified in 'guest_username':linux_account_name
* Got a 500 ftp-server response when 220 was expected

* pam で pwdfile の方を選びましたが、libpam-pwdfile パッケージをインストールしましたか?
* そこは共有したリンクの説明が多分古くて間違っているように見えますので申し訳ございませんが、debian の libpam-pwdfile の pwdfile の内容は crypt() でパスワードを確認していて、htpasswd -nb で生成するパスワードは $apr1$ (md5) 形式で、古くてもうサポートされてません。htpasswd の場合は -B ($2y$ の bcrypt 形式)か openssl passwd -6 などで手動にハッシュを生成する必要があります。

それぐらいを気をつければ動作できると思います (pam_listfileのルールはpwdfile と同じ仕事しますので不要になりますが、残しても動くはずです。私は最後の2行だけで試しました。)

よろしくお願いします。

k.sato

2023年10月5日 13時38分

マルティネ様

佐藤です。

> 失敗しそうなところは:
> * guest_username の設定は存在するユーザーでなければなりません。
> virtual user を使うことで linux のユーザーを使いませんので、ログインすべてが同じ guest ユーザーになってしまいます。
> user_config_dir を使えば、特定の virtual user で別の guest_username やディレクトリを設定することも可能ですが、まずは「atmark」で設定すれば無難だと思います。
ありがとうございます。
htpasswdで設定するユーザを「atmark」に変更します。

> * pam で pwdfile の方を選びましたが、libpam-pwdfile パッケージをインストールしましたか?
> * そこは共有したリンクの説明が多分古くて間違っているように見えますので申し訳ございませんが、debian の libpam-pwdfile の pwdfile の内容は crypt() でパスワードを確認していて、htpasswd -nb で生成するパスワードは $apr1$ (md5) 形式で、古くてもうサポートされてません。htpasswd の場合は -B ($2y$ の bcrypt 形式)か openssl passwd -6 などで手動にハッシュを生成する必要があります。
>
> それぐらいを気をつければ動作できると思います (pam_listfileのルールはpwdfile と同じ仕事しますので不要になりますが、残しても動くはずです。私は最後の2行だけで試しました。)
すみません。libpam-pwdfileをインストールしていませんでした。
インストール後に「/etc/pam.d/vsftpd」を最後の2行だけにして「htpasswd」をやり直しました。

root@armadillo:/# htpasswd -nb -B atmark atmark > /etc/vsftpd/passwd
root@armadillo:/# cat /etc/vsftpd/passwd
atmark:$2y$05$x/i3OFXXtI481LL3Z91EJOwmegqyddmESmylMnI9Vm.8NLlLMFV42

> guest_username ユーザーが存在しない場合は ftp クライアントで接続したときにエラーが表示されましたが、見えなかったでしょうか?
> ATDE から curl を使えばエラーを表示する方法で確認できます(user, pass, 10.1.2.3 を置き換えてください):

> atmark@atde9:~$ curl -v ftp://user:pass@10.1.2.3
> *   Trying 10.1.2.3:21...
> * Connected to 10.1.2.3 (10.1.2.3) port 21 (#0)
> < 500 OOPS: vsftpd: cannot locate user specified in 'guest_username':linux_account_name
> * Got a 500 ftp-server response when 220 was expected

vsftpd /etc/vsftpd.conf」した後FFFTPでは接続出来ないためATDEからcurlを行いました。

atmark@atde9:~$ curl -v ftp://atmark:atmark@192.10.1.113
*   Trying 192.10.1.113:21...
* Connected to 192.10.1.113 (192.10.1.113) port 21 (#0)
< 500 OOPS: vsftpd: cannot locate user specified in 'guest_username':linux_account_name
* Got a 500 ftp-server response when 220 was expected
* Closing connection 0
curl: (8) Got a 500 ftp-server response when 220 was expected

* Closing connection 0」となっているのはおかしいでしょうか?

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

at_dominique.m…

2023年10月5日 14時08分

マルティネです。

> htpasswdで設定するユーザを「atmark」に変更します。

逆です。
vsftpd.conf の guest_username 設定を atmark (か実際に存在するユーザー)にしてください。
passwd ファイルのユーザーは何でもいいです。

> > atmark@atde9:~$ curl -v ftp://user:pass@10.1.2.3
> > *   Trying 10.1.2.3:21...
> > * Connected to 10.1.2.3 (10.1.2.3) port 21 (#0)
> > < 500 OOPS: vsftpd: cannot locate user specified in 'guest_username':linux_account_name
> > * Got a 500 ftp-server response when 220 was expected

エラーメッセージが書いてますので、英語で大変でしょうけど読みましょう

よろしくお願いします。

k.sato

2023年10月5日 15時28分

マルティネ様

佐藤です。

> 逆です。
> vsftpd.conf の guest_username 設定を atmark (か実際に存在するユーザー)にしてください。
> passwd ファイルのユーザーは何でもいいです。

> > 失敗しそうなところは:
> > * guest_username の設定は存在するユーザーでなければなりません。
> > virtual user を使うことで linux のユーザーを使いませんので、ログインすべてが同じ guest ユーザーになってしまいます。
> > user_config_dir を使えば、特定の virtual user で別の guest_username やディレクトリを設定することも可能ですが、まずは「atmark」で設定すれば無難だと思います。
この説明が vsftpd.conf のことと理解してなく
「htpasswd -nb user_name password > /etc/vsftpd/passwd」の「user_name」と勘違いしていました。
その後に「 user_config_dir 」が出てくるので vsftpd.conf のですよね。

# guest扱いされたユーザーがマッピングされるLinuxアカウント
#guest_username=linux_account_name
guest_username=atmark

vsftpd.conf を修正し、接続できるようになりました。

ありがとうございました。

また ATDE の VSCode で 「pakages.txt」に libpam-pwdfile などを追加して 「Generate development swu」を繰り返していく内に
/dev/mapper/atde9--vg-root    31322940 21021780 8684472   71% /」と
デフォルトの50%あたりから徐々に増えてきているのですが
不要ファイルを削除するなどして容量を空けることは出来るのでしょうか?

atmark@atde9:~$ df
df: /run/user/1000/doc: 許可されていない操作です
ファイルシス               1K-ブロック     使用  使用可 使用% マウント位置
udev                           1960644        0 1960644    0% /dev
tmpfs                           397708     1684  396024    1% /run
/dev/mapper/atde9--vg-root    31322940 21021804 8684448   71% /
tmpfs                          1988524    40100 1948424    3% /dev/shm
tmpfs                             5120        4    5116    1% /run/lock
/dev/sda1                       480618   232626  223058   52% /boot
tmpfs                           397704      112  397592    1% /run/user/1000

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

at_dominique.m…

2023年10月5日 15時59分

佐藤さん、

マルティネです。

> vsftpd.conf を修正し、接続できるようになりました。

よかったです。

> また ATDE の VSCode で 「pakages.txt」に libpam-pwdfile などを追加して 「Generate development swu」を繰り返していく内に
> 「/dev/mapper/atde9--vg-root    31322940 21021780 8684472   71% /」と
> デフォルトの50%あたりから徐々に増えてきているのですが
> 不要ファイルを削除するなどして容量を空けることは出来るのでしょうか?

報告ありがとうございます。vscode プロジェクトのスクリプトの不具合ですので、とても助かります。

「podman image list」を実行すると「 」のイメージがいくつかリストされていると思いますが、「podman image prune」を実行すると削除されて容量がもどるはずです。
スクリプトの修正は少し複雑になりそうですので、お手数ですがひとまず定期的に実行していただければ幸いです。

よろしくお願いします。

k.sato

2023年10月5日 16時27分

マルティネ様

佐藤です。

> > また ATDE の VSCode で 「pakages.txt」に libpam-pwdfile などを追加して 「Generate development swu」を繰り返していく内に
> > 「/dev/mapper/atde9--vg-root    31322940 21021780 8684472   71% /」と
> > デフォルトの50%あたりから徐々に増えてきているのですが
> > 不要ファイルを削除するなどして容量を空けることは出来るのでしょうか?
>
> 報告ありがとうございます。vscode プロジェクトのスクリプトの不具合ですので、とても助かります。
>
> 「podman image list」を実行すると「 」のイメージがいくつかリストされていると思いますが、「podman image prune」を実行すると削除されて容量がもどるはずです。
「podman image prune」を実行することにより容量が50%付近に戻ることを確認しました。

ありがとうございました。