Compare commits
44 commits
v3.0.5-r1-
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ef33268973 | ||
![]() |
98b2d6495c | ||
![]() |
069b78ecfd | ||
![]() |
26307070f0 | ||
![]() |
9142472da2 | ||
![]() |
3e00ac5fee | ||
![]() |
4f89f0ea2a | ||
![]() |
53d421b591 | ||
![]() |
73b6e81e24 | ||
![]() |
73c6d05524 | ||
![]() |
d5051deb36 | ||
![]() |
1280d22b47 | ||
![]() |
0a06f2eadf | ||
![]() |
656317dd5f | ||
![]() |
c162d59887 | ||
![]() |
478c447e7a | ||
![]() |
d67779068d | ||
![]() |
a7e3826432 | ||
![]() |
43967db7df | ||
![]() |
4550b7480b | ||
![]() |
adeee4d3c9 | ||
![]() |
dc462630f4 | ||
![]() |
766937cb9b | ||
![]() |
c905988964 | ||
![]() |
b7baf5d42b | ||
![]() |
5efbbe780f | ||
![]() |
6c3d800b31 | ||
![]() |
a218237e20 | ||
![]() |
953cb385ef | ||
![]() |
c76e7f295c | ||
![]() |
54705c8245 | ||
![]() |
2d67c3ce92 | ||
![]() |
423c97320d | ||
![]() |
c4b9abdf8c | ||
![]() |
563abbd398 | ||
![]() |
b58fa088bb | ||
![]() |
b2ef0d26aa | ||
![]() |
4b9ad65b93 | ||
![]() |
a4f93599a5 | ||
![]() |
76b6384a4b | ||
![]() |
e4de9d7fc2 | ||
![]() |
db53c22356 | ||
![]() |
65e21edd29 | ||
![]() |
274cd6349c |
6 changed files with 38 additions and 105 deletions
15
.github/workflows/ci.yml
vendored
15
.github/workflows/ci.yml
vendored
|
@ -11,14 +11,14 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the codebase.
|
- name: Check out the codebase.
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Install hadolint.
|
- name: Install hadolint.
|
||||||
run: |
|
run: |
|
||||||
sudo curl -L https://github.com/hadolint/hadolint/releases/download/v$HADOLINT_VERSION/hadolint-$(uname -s)-$(uname -m) -o /usr/local/bin/hadolint
|
sudo curl -L https://github.com/hadolint/hadolint/releases/download/v$HADOLINT_VERSION/hadolint-$(uname -s)-$(uname -m) -o /usr/local/bin/hadolint
|
||||||
sudo chmod 755 /usr/local/bin/hadolint
|
sudo chmod 755 /usr/local/bin/hadolint
|
||||||
env:
|
env:
|
||||||
HADOLINT_VERSION: 2.9.3
|
HADOLINT_VERSION: 2.12.0
|
||||||
|
|
||||||
- name: Run hadolint.
|
- name: Run hadolint.
|
||||||
run: |
|
run: |
|
||||||
|
@ -30,7 +30,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the codebase.
|
- name: Check out the codebase.
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Find an open port.
|
- name: Find an open port.
|
||||||
run: |
|
run: |
|
||||||
|
@ -63,12 +63,15 @@ jobs:
|
||||||
with:
|
with:
|
||||||
image-ref: ${{ github.repository }}:${{ github.run_id }}
|
image-ref: ${{ github.repository }}:${{ github.run_id }}
|
||||||
exit-code: '1'
|
exit-code: '1'
|
||||||
|
skip-files: '/etc/ssl/certs/vsftpd.pem'
|
||||||
|
severity: 'CRITICAL,HIGH'
|
||||||
|
|
||||||
- name: Run Trivy vulnerability scanner.
|
- name: Run Trivy vulnerability scanner.
|
||||||
uses: aquasecurity/trivy-action@master
|
uses: aquasecurity/trivy-action@master
|
||||||
with:
|
with:
|
||||||
image-ref: ${{ github.repository }}:nossl
|
image-ref: ${{ github.repository }}:nossl
|
||||||
exit-code: '1'
|
exit-code: '1'
|
||||||
|
severity: 'CRITICAL,HIGH'
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
@ -84,7 +87,7 @@ jobs:
|
||||||
echo ::set-output name=VERSION::${TAG%-*}
|
echo ::set-output name=VERSION::${TAG%-*}
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
- name: Login to Quay
|
- name: Login to Quay
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v1
|
||||||
|
@ -94,7 +97,7 @@ jobs:
|
||||||
password: ${{ secrets.QUAY_PASSWORD }}
|
password: ${{ secrets.QUAY_PASSWORD }}
|
||||||
|
|
||||||
- name: Push to Quay
|
- name: Push to Quay
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
pull: true
|
pull: true
|
||||||
|
@ -108,7 +111,7 @@ jobs:
|
||||||
VERSION: ${{ steps.get_version.outputs.VERSION }}
|
VERSION: ${{ steps.get_version.outputs.VERSION }}
|
||||||
|
|
||||||
- name: Push nossl to Quay
|
- name: Push nossl to Quay
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
file: ./Dockerfile_nossl
|
file: ./Dockerfile_nossl
|
||||||
pull: true
|
pull: true
|
||||||
|
|
86
.github/workflows/docker-publish-image.yml
vendored
86
.github/workflows/docker-publish-image.yml
vendored
|
@ -1,86 +0,0 @@
|
||||||
name: Docker hub auto publish image
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
# Run when file is edited
|
|
||||||
- Dockerfile
|
|
||||||
- start_vsftpd.sh
|
|
||||||
- vsftpd.conf
|
|
||||||
|
|
||||||
# Run tests for any PRs.
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
env:
|
|
||||||
# Image name at docker hub
|
|
||||||
IMAGE_NAME: delfer/alpine-ftp-server
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# Run tests.
|
|
||||||
# See also https://docs.docker.com/docker-hub/builds/automated-testing/
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: |
|
|
||||||
if [ -f docker-compose.test.yml ]; then
|
|
||||||
docker-compose --file docker-compose.test.yml build
|
|
||||||
docker-compose --file docker-compose.test.yml run sut
|
|
||||||
else
|
|
||||||
docker build . --file Dockerfile
|
|
||||||
fi
|
|
||||||
|
|
||||||
push:
|
|
||||||
# Ensure test job passes before pushing image.
|
|
||||||
needs: test
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v1
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v1
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v1
|
|
||||||
with:
|
|
||||||
# Genrate secret from here https://hub.docker.com/settings/security
|
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
|
||||||
|
|
||||||
- name: Add Label Schema to Dockerfile
|
|
||||||
run: |
|
|
||||||
# Label Schema based on http://label-schema.org/rc1/
|
|
||||||
TIME_ISO=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
||||||
echo "LABEL org.label-schema.build-date=$TIME_ISO" >> Dockerfile
|
|
||||||
echo "LABEL org.label-schema.name=vsftpd" >> Dockerfile
|
|
||||||
echo "LABEL org.label-schema.url=https://security.appspot.com/vsftpd.html" >> Dockerfile
|
|
||||||
echo "LABEL org.label-schema.vcs-url=https://github.com/delfer/docker-alpine-ftp-server" >> Dockerfile
|
|
||||||
GIT_HASH=$(git rev-parse --short "$GITHUB_SHA")
|
|
||||||
echo "LABEL org.label-schema.vcs-ref=$GIT_HASH" >> Dockerfile
|
|
||||||
echo "LABEL org.label-schema.schema-version=1.0.0-rc.1" >> Dockerfile
|
|
||||||
echo "LABEL org.label-schema.docker.cmd=\"docker run -d -p 21:21 -e USERS=\"username|password\" delfer/alpine-ftp-server\"" >> Dockerfile
|
|
||||||
# Show edited Dockerfile content
|
|
||||||
cat Dockerfile
|
|
||||||
|
|
||||||
- name: Build and push latest
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
${{ env.IMAGE_NAME }}:latest
|
|
|
@ -1,8 +1,8 @@
|
||||||
FROM alpine:3.15.3
|
FROM alpine:3.18.4
|
||||||
|
|
||||||
LABEL maintainer="Amin Vakil <info@aminvakil.com>"
|
LABEL maintainer="Amin Vakil <info@aminvakil.com>"
|
||||||
|
|
||||||
RUN apk --no-cache add vsftpd=3.0.5-r1
|
RUN apk --no-cache add vsftpd=3.0.5-r2
|
||||||
|
|
||||||
COPY vsftpd.pem /etc/ssl/certs/vsftpd.pem
|
COPY vsftpd.pem /etc/ssl/certs/vsftpd.pem
|
||||||
COPY start_vsftpd.sh /usr/local/bin/start_vsftpd.sh
|
COPY start_vsftpd.sh /usr/local/bin/start_vsftpd.sh
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
FROM alpine:3.15.3
|
FROM alpine:3.18.4
|
||||||
|
|
||||||
LABEL maintainer="Amin Vakil <info@aminvakil.com>"
|
LABEL maintainer="Amin Vakil <info@aminvakil.com>"
|
||||||
|
|
||||||
RUN apk --no-cache add vsftpd=3.0.5-r1
|
RUN apk --no-cache add vsftpd=3.0.5-r2
|
||||||
|
|
||||||
COPY start_vsftpd.sh /usr/local/bin/start_vsftpd.sh
|
COPY start_vsftpd.sh /usr/local/bin/start_vsftpd.sh
|
||||||
COPY vsftpd.conf_nossl /etc/vsftpd/vsftpd.conf
|
COPY vsftpd.conf_nossl /etc/vsftpd/vsftpd.conf
|
||||||
|
|
14
README.md
14
README.md
|
@ -1,6 +1,16 @@
|
||||||
# docker-alpine-ftp-server-tls
|
# docker-alpine-ftp-server-tls
|
||||||
Small and flexible docker image with vsftpd server with tls
|
Small and flexible docker image with vsftpd server with tls
|
||||||
|
|
||||||
|
# Important Note
|
||||||
|
I think upstream has made it more complicated than it needs to be since this commit and I'm not merging its commits anymore, although I cherry-pick some of them when I see fit.
|
||||||
|
|
||||||
|
https://github.com/delfer/docker-alpine-ftp-server/commit/fbf9afd9368d63a225e093bae227fa878de46b2c
|
||||||
|
|
||||||
|
Also for future reference this is the PR of this commit: https://github.com/delfer/docker-alpine-ftp-server/pull/36
|
||||||
|
|
||||||
|
FOr further discussion about this you can use [this issue](https://github.com/aminvakil/docker-alpine-ftp-server-tls/issues/14).
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
```
|
```
|
||||||
docker run -d \
|
docker run -d \
|
||||||
|
@ -14,9 +24,9 @@ docker run -d \
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Environment variables:
|
Environment variables:
|
||||||
- `USERS` - space and `|` separated list (optional, default: `ftp|alpineftp`)
|
- `USERS` - space and `|` separated list (optional, default: `alpineftp|alpineftp`)
|
||||||
- format `name1|password1|[folder1][|uid1] name2|password2|[folder2][|uid2]`
|
- format `name1|password1|[folder1][|uid1] name2|password2|[folder2][|uid2]`
|
||||||
- `ADDRESS` - external address witch clients can connect passive ports (optional, should resolve to ftp server ip address)
|
- `ADDRESS` - external address to which clients can connect for passive ports (optional, should resolve to ftp server ip address)
|
||||||
- `MIN_PORT` - minimum port number to be used for passive connections (optional, default `21000`)
|
- `MIN_PORT` - minimum port number to be used for passive connections (optional, default `21000`)
|
||||||
- `MAX_PORT` - maximum port number to be used for passive connections (optional, default `21010`)
|
- `MAX_PORT` - maximum port number to be used for passive connections (optional, default `21010`)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#Remove all ftp users
|
#Remove all ftp users
|
||||||
#grep '/ftp/' /etc/passwd | cut -d':' -f1 | xargs -n1 deluser
|
grep '/ftp/' /etc/passwd | cut -d':' -f1 | xargs -r -n1 deluser
|
||||||
|
|
||||||
#Create users
|
#Create users
|
||||||
#USERS='name1|password1|[folder1][|uid1] name2|password2|[folder2][|uid2]'
|
#USERS='name1|password1|[folder1][|uid1] name2|password2|[folder2][|uid2]'
|
||||||
|
@ -14,14 +14,15 @@
|
||||||
#Default user 'ftp' with password 'alpineftp'
|
#Default user 'ftp' with password 'alpineftp'
|
||||||
|
|
||||||
if [ -z "$USERS" ]; then
|
if [ -z "$USERS" ]; then
|
||||||
USERS="amin|alpineftp"
|
USERS="alpineftp|alpineftp"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for i in $USERS ; do
|
for i in $USERS ; do
|
||||||
NAME=$(echo $i | cut -d'|' -f1)
|
NAME=$(echo $i | cut -d'|' -f1)
|
||||||
PASS=$(echo $i | cut -d'|' -f2)
|
GROUP=$NAME
|
||||||
|
PASS=$(echo $i | cut -d'|' -f2)
|
||||||
FOLDER=$(echo $i | cut -d'|' -f3)
|
FOLDER=$(echo $i | cut -d'|' -f3)
|
||||||
UID=$(echo $i | cut -d'|' -f4)
|
UID=$(echo $i | cut -d'|' -f4)
|
||||||
|
|
||||||
if [ -z "$FOLDER" ]; then
|
if [ -z "$FOLDER" ]; then
|
||||||
FOLDER="/ftp/$NAME"
|
FOLDER="/ftp/$NAME"
|
||||||
|
@ -29,11 +30,16 @@ for i in $USERS ; do
|
||||||
|
|
||||||
if [ ! -z "$UID" ]; then
|
if [ ! -z "$UID" ]; then
|
||||||
UID_OPT="-u $UID"
|
UID_OPT="-u $UID"
|
||||||
|
#Check if the group with the same ID already exists
|
||||||
|
GROUP=$(getent group $UID | cut -d: -f1)
|
||||||
|
if [ ! -z "$GROUP" ]; then
|
||||||
|
GROUP_OPT="-G $GROUP"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "$PASS\n$PASS" | adduser -h $FOLDER -s /sbin/nologin $UID_OPT $NAME
|
echo -e "$PASS\n$PASS" | adduser -h $FOLDER -s /sbin/nologin $UID_OPT $GROUP_OPT $NAME
|
||||||
mkdir -p $FOLDER
|
mkdir -p $FOLDER
|
||||||
chown $NAME:$NAME $FOLDER
|
chown $NAME:$GROUP $FOLDER
|
||||||
unset NAME PASS FOLDER UID
|
unset NAME PASS FOLDER UID
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue