Sign inSign up

mateusfmello/pure-ftpd

By mateusfmello

Updated about 5 years ago

Image
0

1.4K

mateusfmello/pure-ftpd repository overview

RUNs demo

CentOS com Selinux

docker run -d \
  --name ftp \
  -it \
  -e FTP_IP=10.0.0.252 \
  -e FTP_USER_NAME=joe \
  -e FTP_USER_PASS=123 \
  -e FTP_USER_GID=102 \
  -e FTP_USER_UID=102 \
  -p 21:21 \
  -p 30000-30060:30000-30060 \
  -v /log.txt:/var/log/ftp-upload.log:z \
  -v /data:/data:z \
  mateusfmello/pure-ftpd:tls-1.0.49

Outros

docker run -d \
  --name ftp \
  -it \
  -e FTP_IP=10.0.0.252 \
  -e FTP_USER_NAME=joe \
  -e FTP_USER_PASS=123 \
  -e FTP_USER_GID=102 \
  -e FTP_USER_UID=102 \
  -p 21:21 \
  -p 30000-30060:30000-30060 \
  -v /log.txt:/var/log/ftp-upload.log \
  -v /data:/data \
  mateusfmello/pure-ftpd:tls-1.0.49

ENVs

  • FTP_IP - para "ForcePassiveIP"
  • FTP_USER_NAME
  • FTP_USER_PASS
  • FTP_USER_UID
  • FTP_USER_GID

Docker secrets

  • FTP_USER_NAME_FILE
  • FTP_USER_PASS_FILE
  • FTP_USER_UID_FILE
  • FTP_USER_GID_FILE
Observações
  • FTP_IP - NÃO É CONSIDERADO UMA INFORMAÇÃO SIGILOSA DENTRO DA IMAGEM

Diretórios

  • /data - arquivos dos usuários do FTP

Arquivos

  • /script-upload-complete.sh - script que executa uma ação em cima dos arquivos enviados ao FTP
  • /var/log/ftp-upload.log - log de upload, a intensão é que os arquivos sejam enviados para uma cloud após o upload, já que o objetivo inicial do FTP é para receber gravações de vídeos de segurança, o nome dos arquivos é inserido nesse arquivo só para exemplo enquanto a implementação não é feita

entrypoint.sh

#!/bin/sh

echo 'Iniciando...'

# Caso tenha definido o IP do servidor FTP
if [ ! -z "$FTP_IP" ]
then
    sed -i -e "s,^# ForcePassiveIP .*,ForcePassiveIP               $FTP_IP,"      /etc/pure-ftpd.conf
fi

# Adicionando usuário
if [ ! -z "$FTP_USER_NAME" ] && [ ! -z "$FTP_USER_PASS" ]
then
    echo 'Criando usuário...'

    mkdir -p "/data/$FTP_USER_NAME"

    PWD_FILE='/tmp/4h5eg3y33h5sdg234'

    echo "$FTP_USER_PASS
$FTP_USER_PASS" > "$PWD_FILE"

    PURE_PW_ADD_FLAGS=""
    if [ ! -z "$FTP_USER_UID" ]
    then
        PURE_PW_ADD_FLAGS="$PURE_PW_ADD_FLAGS -u $FTP_USER_UID"
    else
        PURE_PW_ADD_FLAGS="$PURE_PW_ADD_FLAGS -u ftpuser"
    fi

    if [ ! -z "$FTP_USER_GID" ]
    then
        PURE_PW_ADD_FLAGS="$PURE_PW_ADD_FLAGS -g $FTP_USER_GID"
    fi

    pure-pw useradd "$FTP_USER_NAME" -m -d "/data/$FTP_USER_NAME" $PURE_PW_ADD_FLAGS < "$PWD_FILE"

    rm "$PWD_FILE"

    if [ ! -z "$FTP_USER_UID" ]
    then
        if ! [[ $(ls -ldn /data/$FTP_USER_NAME | awk '{print $3}') = $FTP_USER_UID ]]
        then
            chown $FTP_USER_UID:$FTP_USER_GID "/data/$FTP_USER_NAME"
        fi
    else
        if ! [[ $(ls -ld /data/$FTP_USER_NAME | awk '{print $3}') = 'ftpuser' ]]
        then
            chown ftpuser "/data/$FTP_USER_NAME"
        fi
    fi
fi

echo 'Executando Pure-FTPd...'

pure-ftpd /etc/pure-ftpd.conf

sleep 5

echo 'Executando pure-uploadscript...'

pure-uploadscript -B -r /script-upload-complete.sh

sleep 5

while true
do

	AMMOUNT_PURE_FTPD="$(pgrep pure-ftpd | wc -l)"
	AMMOUNT_PURE_FTPD_UPLOAD="$(pgrep pure-upload | wc -l)"

	# echo -e "Pure-FTPd: $AMMOUNT_PURE_FTPD"
	# echo -e "Pure-FTPd Uploads: $AMMOUNT_PURE_FTPD_UPLOAD"

	if [[ $AMMOUNT_PURE_FTPD -eq 0 ]] || [[ $AMMOUNT_PURE_FTPD_UPLOAD -eq 0 ]]; then
		echo 'Erro !!!'
		exit 1
   # else
		# echo 'Tudo rodando perfeitamente...'
	fi

	sleep 10
done

Dockerfile

FROM alpine AS builder

RUN apk update && apk upgrade

RUN apk add --no-cache \
    libressl3.3-libcrypto \
    libressl3.3-libssl \
    libsodium \
    openssl

RUN apk add --no-cache --virtual \
    .tool-deps \
    curl \
    coreutils \
    autoconf \
    g++ \
    libtool \
    make

RUN apk add --no-cache --virtual \
    .build-deps \
    libressl-dev \
    libsodium-dev

RUN curl -fL -o /tmp/pure-ftpd.tar.gz \
    https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.49.tar.gz \
    && (echo "7e7d4c81c5237624051bde53db6d9abcbae565a4e8a88627d81d369064b475f4b56305c105ed275264cce068844caad25b2014f41e2540058553222151fe3af8 /tmp/pure-ftpd.tar.gz" \
        | sha512sum -c -) \
    && tar -xzf /tmp/pure-ftpd.tar.gz -C /tmp/ \
    && cd /tmp/pure-ftpd-* \
    && ./configure --prefix=/usr \
        --with-tls \
        --with-puredb \
        --with-language=brazilian-portuguese \
        --with-uploadscript \
        --with-rfc2640 \
        --without-capabilities \
        --without-humor \
        --without-inetd \
        --without-usernames \
    && make \
    && make install





# Imagem final
FROM alpine

LABEL org.opencontainers.image.authors="[email protected]"

RUN apk update && apk upgrade

RUN apk add --no-cache \
    libressl3.3-libcrypto \
    libressl3.3-libssl \
    libsodium \
    openssl

COPY --from=builder /etc/pure-ftpd.conf /etc/pure-ftpd.conf

COPY --from=builder /usr/sbin/pure-* /usr/sbin/

COPY --from=builder /usr/bin/pure-* /usr/bin/

RUN addgroup -S -g 101 pure-ftpd \
    && adduser -S -u 101 -D -s /sbin/nologin -H -h /data -G pure-ftpd -g pure-ftpd pure-ftpd \
    && install -d -o pure-ftpd -g pure-ftpd /data

RUN sed -i -e 's,^MaxClientsPerIP .*,MaxClientsPerIP              30,'                  /etc/pure-ftpd.conf \
    && sed -i -e 's,^# CallUploadScript .*,CallUploadScript             yes,'           /etc/pure-ftpd.conf \
    && sed -i -e 's,^# CreateHomeDir .*,CreateHomeDir                yes,'              /etc/pure-ftpd.conf \
    && sed -i -e 's,^# TLS .*,TLS                          1,'                          /etc/pure-ftpd.conf \
    && sed -i -e 's,^# CertFile ,CertFile ,'                                            /etc/pure-ftpd.conf \
    && sed -i -e 's,^# PureDB,PureDB,'                                                  /etc/pure-ftpd.conf \
    && sed -i -e 's,^MaxDiskUsage .*,MaxDiskUsage                   75,'                /etc/pure-ftpd.conf \
    && sed -i -e 's,^# PassivePortRange .*,PassivePortRange             30000 30060,'   /etc/pure-ftpd.conf

RUN cd / \
    && rm -rf /usr/share/man /var/cache/apk/* /tmp/*

RUN echo "#!/bin/sh" > /script-upload-complete.sh \
    $'\n' >> /script-upload-complete.sh \
    "echo -e \"Arquivo novo: \$@\" >> /var/log/ftp-upload.log" >> /script-upload-complete.sh \
    && chmod +x /script-upload-complete.sh

RUN mkdir -p /etc/ssl/private \
    && openssl req -x509 -nodes -newkey rsa:4096 -sha512 \
        -subj "/C=BR/ST=Santa-Catarina/L=Concordia/O=Iungo Web/CN=iungoweb.io/[email protected]" \
        -keyout /etc/ssl/private/pure-ftpd.pem \
        -out /etc/ssl/private/pure-ftpd.pem \
    && chmod 600 /etc/ssl/private/pure-ftpd.pem

COPY ./entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

ENTRYPOINT []

CMD /entrypoint.sh

Tag summary

Content type

Image

Digest

Size

6.5 MB

Last updated

about 5 years ago

docker pull mateusfmello/pure-ftpd:tls-1.0.49