Major update to stretch and many improvements
Improvements: * Update to debian stretch * Fix Dockerfile style * Add FTP UID/GID Docker build args * Add run-ssl to Makefile for testing SSL config * Fix scripts style * Fix scripts issues reported by shellcheck * Add FTP_CHOWN_ROOT function to chown /srv in the container * Add allow_writeable_chroot=YES to vsftpd_ssl.conf to match vsftpd.conf * Update README.md
This commit is contained in:
45
entry.sh
45
entry.sh
@@ -1,34 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# vsftpd container entrypoint script
|
||||
|
||||
set -e
|
||||
|
||||
[ "$DEBUG" == 'true' ] && set -x
|
||||
[[ "${DEBUG}" == "true" ]] && set -x
|
||||
|
||||
# Generate password if hash not set
|
||||
if [ ! -z "$FTP_PASSWORD" -a -z "$FTP_PASSWORD_HASH" ]; then
|
||||
FTP_PASSWORD_HASH=$(echo "$FTP_PASSWORD" | mkpasswd -s -m sha-512)
|
||||
if [[ ! -z "${FTP_PASSWORD}" ]] && [[ -z "${FTP_PASSWORD_HASH}" ]]; then
|
||||
FTP_PASSWORD_HASH="$(echo "${FTP_PASSWORD}" | mkpasswd -s -m sha-512)"
|
||||
fi
|
||||
|
||||
if [ ! -z "$FTP_USER" -a ! -z "$FTP_PASSWORD_HASH" ]; then
|
||||
/add-virtual-user.sh -d "$FTP_USER" "$FTP_PASSWORD_HASH"
|
||||
if [[ ! -z "${FTP_USER}" ]] || [[ ! -z "${FTP_PASSWORD_HASH}" ]]; then
|
||||
/add-virtual-user.sh -d "${FTP_USER}" "${FTP_PASSWORD_HASH}"
|
||||
fi
|
||||
|
||||
# Support multiple users
|
||||
while read user; do
|
||||
IFS=: read name pass <<< "${!user}"
|
||||
echo "Adding user $name"
|
||||
/add-virtual-user.sh "$name" "$pass"
|
||||
while read -r user; do
|
||||
IFS=: read -r name pass <<< "${!user}"
|
||||
echo "Adding user ${name}"
|
||||
/add-virtual-user.sh "${name}" "${pass}"
|
||||
done < <(env | grep "FTP_USER_" | sed 's/^\(FTP_USER_[a-zA-Z0-9]*\)=.*/\1/')
|
||||
|
||||
# Support user directories
|
||||
if [ ! -z "$FTP_USERS_ROOT" ]; then
|
||||
sed -i 's/local_root=.*/local_root=\/srv\/$USER/' /etc/vsftpd*.conf
|
||||
if [[ ! -z "${FTP_USERS_ROOT}" ]]; then
|
||||
# shellcheck disable=SC2016
|
||||
sed -i 's/local_root=.*/local_root=\/srv\/$USER/' /etc/vsftpd*.conf
|
||||
fi
|
||||
|
||||
function vsftpd_stop {
|
||||
# Manage /srv permissions
|
||||
if [[ ! -z "${FTP_CHOWN_ROOT}" ]]; then
|
||||
chown ftp:ftp /srv
|
||||
fi
|
||||
|
||||
vsftpd_stop() {
|
||||
echo "Received SIGINT or SIGTERM. Shutting down vsftpd"
|
||||
# Get PID
|
||||
pid=$(cat /var/run/vsftpd/vsftpd.pid)
|
||||
pid="$(cat /var/run/vsftpd/vsftpd.pid)"
|
||||
# Set TERM
|
||||
kill -SIGTERM "${pid}"
|
||||
# Wait for exit
|
||||
@@ -37,13 +44,13 @@ function vsftpd_stop {
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
if [ "$1" == "vsftpd" ]; then
|
||||
if [[ "${1}" == "vsftpd" ]]; then
|
||||
trap vsftpd_stop SIGINT SIGTERM
|
||||
echo "Running $@"
|
||||
$@ &
|
||||
pid="$!"
|
||||
echo "Running ${*}"
|
||||
"${@}" &
|
||||
pid="${!}"
|
||||
echo "${pid}" > /var/run/vsftpd/vsftpd.pid
|
||||
wait "${pid}" && exit $?
|
||||
wait "${pid}" && exit ${?}
|
||||
else
|
||||
exec "$@"
|
||||
exec "${@}"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user