ショコラ
PureFTP 認証方法をカスタマイズするには
stilliard/pure-ftpd:latest のイメージで立ち上げたコンテナ。
もっさん先輩
認証ファイル
#!/bin/bash
env > /tmp/env.txt
host_name=$(host $AUTHD_REMOTE_IP | awk '{print $5}')
echo $host_name >> /tmp/env.txt
#allow_list=("cnode.jp" "ap.nuro.jp")
mapfile -t allow_list < /auth-pure-ftp/allow_list.txt
auth=false
for allow in "${allow_list[@]}"; do
if [[ "$host_name" == *"$allow"* ]]; then
auth=true
fi
done
if [[ $auth == false ]]; then
echo "auth_ok:0"
exit 1
fi
if [ $FTP_USER_NAME != $AUTHD_ACCOUNT ]; then
echo "auth_ok:0"
exit 1
fi
if [ $FTP_USER_PASS != $AUTHD_PASSWORD ]; then
echo "auth_ok:-1"
exit 1
fi
echo "auth_ok:1"
echo "uid:1000"
echo "gid:1000"
echo "dir:$FTP_USER_HOME"
echo "end"
Dockerfile
FROM stilliard/pure-ftpd:latest
RUN apt update -y
RUN apt install vim procps host -y
COPY auth-pure-ftp /auth-pure-ftp
RUN chmod a+x /auth-pure-ftp/authhandler.sh
CMD pure-authd -s /var/run/pureftpdauth.sock -r /auth-pure-ftp/authhandler.sh & \
/run.sh -l extauth:/var/run/pureftpdauth.sock -E -j -R -P $PUBLICHOST -A
コンテナの起動には -A を追加しないと chroot しませんでした。
pure-authd -s /var/run/pureftpdauth.sock -r /auth-pure-ftp/authhandler.sh & \
/run.sh -l extauth:/var/run/pureftpdauth.sock -E -j -R -P $PUBLICHOST -A
イメージもつくっておきます。
docker build -t auth-pure-ftpd .
動作確認
docker run\
-d\
-p 20-21:20-21\
-p 30000-30099:30000-30099\
-e FTP_USER_NAME=webadmin\
-e FTP_USER_PASS=1235\
-e PUBLICHOST={サーバーのホストorIP}\
-e FTP_PASSIVE_PORTS=30000:30009\
-e FTP_USER_HOME=/tmp/\
auth-pure-ftpd
以上