diff --git a/Dockerfile b/Dockerfile index bd6bd38c..7846201c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:bookworm +FROM debian:bookworm-slim MAINTAINER Adrian Dvergsdal [atmoz.net] # Steps done in one RUN layer: @@ -8,12 +8,14 @@ MAINTAINER Adrian Dvergsdal [atmoz.net] RUN apt-get update && \ apt-get upgrade -y && \ DEBIAN_FRONTEND="noninteractive" apt-get -y install --no-install-recommends openssh-server && \ + apt-get -y install --no-install-recommends netcat-openbsd && \ rm -rf /var/lib/apt/lists/* && \ mkdir -p /var/run/sshd && \ rm -f /etc/ssh/ssh_host_*key* COPY files/sshd_config /etc/ssh/sshd_config COPY files/create-sftp-user /usr/local/bin/ +COPY files/healthcheck.sh /usr/local/bin/ COPY files/entrypoint / EXPOSE 22 diff --git a/files/healthcheck.sh b/files/healthcheck.sh new file mode 100755 index 00000000..d42822e2 --- /dev/null +++ b/files/healthcheck.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# 1. Check if the sshd process is actually running +pgrep sshd > /dev/null || exit 1 + +# 2. Try to open a TCP connection to the SSH port locally +# -z: scan for listening daemons without sending data +# -w 2: timeout after 2 seconds +nc -z -w 2 127.0.0.1 22 || exit 1 + +exit 0 + diff --git a/genpwd.py b/genpwd.py new file mode 100644 index 00000000..5b85b32f --- /dev/null +++ b/genpwd.py @@ -0,0 +1,15 @@ +import bcrypt +import sys + + +def main(): + print(f"hashing password: {sys.argv[1]}") + password = sys.argv[1] + salt = bcrypt.gensalt(10) + hashed = bcrypt.hashpw(password.encode(), salt) + print(f"hashed password: {hashed}") + + +if __name__ == "__main__": + raise SystemExit(main()) + diff --git a/logos.sftp.server.env b/logos.sftp.server.env new file mode 100644 index 00000000..e9b85889 --- /dev/null +++ b/logos.sftp.server.env @@ -0,0 +1,25 @@ + +SFTP_IMAGE="logos/sftp-server:0.3" +SFTP_HOSTNAME="logos.sftp.srv.01" +SFTP_HOST_PORT=3322 + +SFTP_USERNAME="foo" +# sample cfg password is: pass +# to generate the encrypted pwd run: python3 genpwd.py" +SFTP_ENCRYPTED_PWD=$2b$10$lCXQfDMMc4nibdLnDk1ycundyYX/eFDO8Q0Nvj81y78ssk4TqZtHO +SFTP_HOST_UID=590201106 + +SFTP_HOST_UPLOAD_FOLDER="/home/netresults.wintranet/borghese/tmp/logos-upload-folder" +SFTP_UPLOAD_FOLDER="/home/foo/upload" + +# Format is: +# username:encrypted_passwd:e:[UID]:[GID]: +ENV_SFTP_USERS=${SFTP_USERNAME}:${SFTP_ENCRYPTED_PWD}:e:${SFTP_HOST_UID}:: + +# container healthcheck session +HEALTCHECK_CMD="/bin/bash /usr/local/bin/healthcheck.sh" +HEALTHCHECK_INTERVAL_SEC=60s +HEALTHCHECK_TIMEOUT_SEC=5s +HEALTHCHECK_RETRIES=3 +HEALTCHECK_START_PERIOD_SEC=30s + diff --git a/logos.sftp.server.yml b/logos.sftp.server.yml new file mode 100644 index 00000000..35917630 --- /dev/null +++ b/logos.sftp.server.yml @@ -0,0 +1,19 @@ + +services: + logos.sftp.srv: + image: ${SFTP_IMAGE} + restart: unless-stopped + hostname: ${SFTP_HOSTNAME} + environment: + SFTP_USERS: ${ENV_SFTP_USERS} + volumes: + - ${SFTP_HOST_UPLOAD_FOLDER}:${SFTP_UPLOAD_FOLDER} + ports: + - "${SFTP_HOST_PORT}:22" + healthcheck: + test: ${HEALTCHECK_CMD} + interval: ${HEALTHCHECK_INTERVAL_SEC} + timeout: ${HEALTHCHECK_TIMEOUT_SEC} + retries: ${HEALTHCHECK_RETRIES} + start_period: ${HEALTCHECK_START_PERIOD_SEC} +