Upload files to "/"
This commit is contained in:
parent
cb7dcffc3b
commit
78017f9e87
19
dockerfile
19
dockerfile
@ -1,19 +1,20 @@
|
|||||||
FROM ubuntu:22.04
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
# set container hostname
|
# set container hostname and DN in case we don't set it on the docker build/run command
|
||||||
ARG LDAP_HOST=example.com
|
ARG LDAP_HOST=example.com
|
||||||
ENV LDAP_HOST=${LDAP_HOST}
|
ENV LDAP_HOST=${LDAP_HOST}
|
||||||
|
|
||||||
# set non-interactive TERM for docker
|
# set non-interactive TERM for docker
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
# install slapd, ldap-utils, and packages needed for ldapdock to work
|
# install OpenLDAP, ldap-utils, and packages needed for ldapdock to work
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
slapd ldap-utils gnutls-bin ssl-cert ca-certificates schema2ldif vim mc && apt-get clean
|
slapd ldap-utils gnutls-bin ssl-cert ca-certificates schema2ldif vim mc && apt-get clean
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────
|
#──────────────────────────────────────────────────────────────
|
||||||
# APACHE + PHP + everything phpLDAPadmin needs
|
# APACHE && PHP && neccesary related software
|
||||||
# ──────────────────────────────────────────────────────────────
|
#──────────────────────────────────────────────────────────────
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
apache2 \
|
apache2 \
|
||||||
php libapache2-mod-php \
|
php libapache2-mod-php \
|
||||||
@ -46,14 +47,16 @@ RUN dpkg-reconfigure -f noninteractive slapd
|
|||||||
COPY entrypoint.sh ./entrypoint.sh
|
COPY entrypoint.sh ./entrypoint.sh
|
||||||
RUN chmod +x ./entrypoint.sh
|
RUN chmod +x ./entrypoint.sh
|
||||||
|
|
||||||
# open up LDAP simple port
|
# open up LDAP StartTLS and SSL ports, and Apache ports
|
||||||
EXPOSE 389
|
EXPOSE 389
|
||||||
EXPOSE 636
|
EXPOSE 636
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
EXPOSE 443
|
EXPOSE 443
|
||||||
|
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
# Create directory for exporting certs to host
|
# Create directory for exporting certs to host
|
||||||
RUN mkdir -p /export-certs
|
RUN mkdir -p /export-certs
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# set salvable volumes for LDAP data, configuration, certs
|
# set salvable volumes for LDAP data, configuration, certs
|
||||||
VOLUME ["/var/lib/ldap", "/etc/ldap/slapd.d", "/etc/ldap/certs","/export-certs"]
|
VOLUME ["/var/lib/ldap", "/etc/ldap/slapd.d", "/etc/ldap/certs","/export-certs"]
|
||||||
@ -61,8 +64,10 @@ VOLUME ["/var/lib/ldap", "/etc/ldap/slapd.d", "/etc/ldap/certs","/export-certs"]
|
|||||||
# set correct permissions for openldap user
|
# set correct permissions for openldap user
|
||||||
#RUN chown -R openldap:openldap /var/lib/ldap /etc/ldap/slapd.d
|
#RUN chown -R openldap:openldap /var/lib/ldap /etc/ldap/slapd.d
|
||||||
|
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
# ENTRYPOINT ensures this sh file ALWAYS runs first before any CMD or command line instruction
|
# ENTRYPOINT ensures this sh file ALWAYS runs first before any CMD or command line instruction
|
||||||
ENTRYPOINT ["./entrypoint.sh"]
|
ENTRYPOINT ["./entrypoint.sh"]
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# CMD provides the default command (/bin/bash) which is passed as an argument to the ENTRYPOINT script
|
# CMD provides the default command (/bin/bash) which is passed as an argument to the ENTRYPOINT script
|
||||||
CMD ["/bin/bash"]
|
CMD ["/bin/bash"]
|
||||||
|
|||||||
@ -1,18 +1,20 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -euo pipefail
|
#set -euo pipefail
|
||||||
|
|
||||||
# Fix permissions
|
# Fix permissions
|
||||||
chown -R openldap:openldap /var/lib/ldap /etc/ldap/slapd.d /etc/ldap/certs 2>/dev/null || true
|
chown -R openldap:openldap /var/lib/ldap /etc/ldap/slapd.d /etc/ldap/certs 2>/dev/null || true
|
||||||
chmod -R 777 /export-certs 2>/dev/null || true
|
chmod -R 777 /export-certs 2>/dev/null || true
|
||||||
|
|
||||||
# Correct base DN from hostname
|
#──────────────────────────────────────────────────────────────
|
||||||
export LDAP_HOST="${LDAP_HOST:-example.com}"
|
# Correct base DN and hostname
|
||||||
export LDAP_BASE_DN=dc=$(echo "$LDAP_HOST" | sed 's/\./,dc=/g')
|
export LDAP_HOST="${LDAP_HOST:-$(hostname)}"
|
||||||
|
export LDAP_BASE_DN=$(echo "$LDAP_HOST" | sed 's/\.\([^.]*\)/,dc=\1/g; s/^/dc=/')
|
||||||
echo "--> Using LDAP base DN: ${LDAP_BASE_DN}"
|
echo "--> Using LDAP base DN: ${LDAP_BASE_DN}"
|
||||||
|
#──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
echo "--> Starting ldapdock 0.10"
|
echo "--> Starting ldapdock 0.10"
|
||||||
|
|
||||||
# Temporarily relax strict security on restart
|
# Temporarily "relax" strict security on start to configure stuff
|
||||||
if [ -d "/etc/ldap/slapd.d" ] && ls /etc/ldap/slapd.d/* >/dev/null 2>&1; then
|
if [ -d "/etc/ldap/slapd.d" ] && ls /etc/ldap/slapd.d/* >/dev/null 2>&1; then
|
||||||
echo "--> Temporarily relaxing security for init"
|
echo "--> Temporarily relaxing security for init"
|
||||||
slapd -h "ldap:/// ldapi:///" -u openldap -g openldap &
|
slapd -h "ldap:/// ldapi:///" -u openldap -g openldap &
|
||||||
@ -29,7 +31,7 @@ EOF
|
|||||||
sleep 2
|
sleep 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Start temporary slapd for population
|
# Start temporary slapd for Users and Groups addition
|
||||||
echo "--> Starting temporary slapd"
|
echo "--> Starting temporary slapd"
|
||||||
slapd -h "ldap:/// ldapi:///" -u openldap -g openldap &
|
slapd -h "ldap:/// ldapi:///" -u openldap -g openldap &
|
||||||
SLAPD_PID=$!
|
SLAPD_PID=$!
|
||||||
@ -73,14 +75,13 @@ homeDirectory: /home/marisa
|
|||||||
gecos: Marisa Kirisame
|
gecos: Marisa Kirisame
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
echo "--> Adding base structure"
|
echo "--> Adding base structure"
|
||||||
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -w admin -f /tmp/base.ldif || true
|
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -w admin -f /tmp/base.ldif || true
|
||||||
|
|
||||||
echo "--> Setting Marisa password to 'MarisaNewPass2025'"
|
#──────────────────────────────────────────────────────────────
|
||||||
slappasswd -h '{SSHA}' -s MarisaNewPass2025 | \
|
# TLS BLOCK
|
||||||
ldapmodify -Y EXTERNAL -H ldapi:/// >/dev/null 2>&1 || true
|
#──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# YOUR ORIGINAL TLS BLOCK — 100 % UNCHANGED
|
|
||||||
if [ ! -f "/export-certs/mycacert.crt" ]; then
|
if [ ! -f "/export-certs/mycacert.crt" ]; then
|
||||||
echo "--> No CA found → generating certificates..."
|
echo "--> No CA found → generating certificates..."
|
||||||
mkdir -p /etc/ldap/certs
|
mkdir -p /etc/ldap/certs
|
||||||
@ -137,32 +138,81 @@ EOF
|
|||||||
cp /etc/ldap/certs/ca-cert.pem /export-certs/mycacert.crt
|
cp /etc/ldap/certs/ca-cert.pem /export-certs/mycacert.crt
|
||||||
cp /etc/ldap/certs/ldap01_slapd_cert_full.pem /export-certs/server-cert.pem
|
cp /etc/ldap/certs/ldap01_slapd_cert_full.pem /export-certs/server-cert.pem
|
||||||
else
|
else
|
||||||
echo "--> Certificates already exist — skipping generation"
|
echo "--> Certificates already exist — skipping generation and using existing ones"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export LDAPTLS_REQCERT=allow
|
||||||
|
|
||||||
|
# ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
|
||||||
|
# NEW: Save and restore the LDIF — no changes to TLS block
|
||||||
|
if [ ! -f "/export-certs/certinfo.ldif" ]; then
|
||||||
|
echo "--> Saving TLS config LDIF for future restarts"
|
||||||
|
cp /tmp/certinfo.ldif /export-certs/certinfo.ldif
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "/export-certs/certinfo.ldif" ]; then
|
||||||
|
echo "--> Restoring TLS config LDIF from persistent volume"
|
||||||
|
cp /export-certs/certinfo.ldif /tmp/certinfo.ldif
|
||||||
|
fi
|
||||||
|
# ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
|
||||||
|
|
||||||
|
# Set Marisa password (full LDIF — so ldapmodify knows what to modify)
|
||||||
|
echo "--> Setting Marisa password to 'MarisaNewPass2025' using Admin Bind"
|
||||||
|
ADMIN_DN="cn=admin,${LDAP_BASE_DN}"
|
||||||
|
ADMIN_PW="admin"
|
||||||
|
slappasswd -h '{SSHA}' -s MarisaNewPass2025 | \
|
||||||
|
ldapmodify -x -D "$ADMIN_DN" -w "$ADMIN_PW" <<EOF >/dev/null 2>&1
|
||||||
|
dn: uid=marisa,ou=People,${LDAP_BASE_DN}
|
||||||
|
changetype: modify
|
||||||
|
replace: userPassword
|
||||||
|
userPassword: $(< /dev/stdin)
|
||||||
|
EOF
|
||||||
|
|
||||||
# Kill temporary slapd
|
# Kill temporary slapd
|
||||||
kill $SLAPD_PID 2>/dev/null || true
|
kill $SLAPD_PID 2>/dev/null || true
|
||||||
wait $SLAPD_PID 2>/dev/null || true
|
wait $SLAPD_PID 2>/dev/null || true
|
||||||
|
|
||||||
# Start OpenLDAP in background
|
# Kill any stray slapd that might be holding ports
|
||||||
|
pkill -9 slapd 2>/dev/null || true
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Start final OpenLDAP
|
||||||
echo "--> Starting final OpenLDAP (background)"
|
echo "--> Starting final OpenLDAP (background)"
|
||||||
slapd -h "ldap:/// ldaps:/// ldapi:///" -u openldap -g openldap -d 0 &
|
slapd -h "ldap:/// ldaps:/// ldapi:///" -u openldap -g openldap -d 0 &
|
||||||
SLAPD_PID=$!
|
SLAPD_PID=$!
|
||||||
|
sleep 8
|
||||||
|
|
||||||
# Start Apache in background
|
# Apply TLS config to final slapd
|
||||||
|
echo "--> Applying TLS config to final slapd"
|
||||||
|
ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/certinfo.ldif
|
||||||
|
|
||||||
|
# Restart slapd to load the new TLS config (required for OpenLDAP)
|
||||||
|
echo "--> Restarting slapd to load TLS config"
|
||||||
|
kill $SLAPD_PID 2>/dev/null || true
|
||||||
|
wait $SLAPD_PID 2>/dev/null || true
|
||||||
|
slapd -h "ldap:/// ldaps:/// ldapi:///" -u openldap -g openldap -d 0 &
|
||||||
|
SLAPD_PID=$!
|
||||||
|
sleep 8
|
||||||
|
|
||||||
|
# Make the container trust its own CA — every time
|
||||||
|
cp /etc/ldap/certs/ca-cert.pem /usr/local/share/ca-certificates/mycacert.crt 2>/dev/null || true
|
||||||
|
update-ca-certificates --fresh >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
# Start Apache inside APACHE_PID variable in background
|
||||||
echo "--> Starting Apache + PHP (background)"
|
echo "--> Starting Apache + PHP (background)"
|
||||||
apache2ctl -D FOREGROUND &
|
/usr/sbin/apache2ctl -D FOREGROUND &
|
||||||
APACHE_PID=$!
|
APACHE_PID=$!
|
||||||
|
|
||||||
# Victory message
|
# Victory message
|
||||||
echo "--> ldapdock ready — OpenLDAP + Apache + PHP running"
|
echo "--> ldapdock ready — OpenLDAP + Apache + PHP running"
|
||||||
echo " → LDAP: 389/636"
|
echo " → LDAP: 389/636"
|
||||||
echo " → Web: http://localhost/info.php"
|
echo " → PHPinfo: http://localhost/info.php"
|
||||||
echo " → Shell: you are here forever"
|
echo " → Shell: /bin/bash"
|
||||||
echo " → Stop with Ctrl+C"
|
echo " → Exit with CTRL+D or 'exit' command"
|
||||||
|
|
||||||
# THIS IS THE MAGIC LINE — explained below
|
# THIS IS THE MAGIC LINE THAT KILLS CHILD PROCESSES ON EXIT
|
||||||
trap 'echo "Stopping services..."; kill $SLAPD_PID $APACHE_PID 2>/dev/null; wait' SIGINT SIGTERM
|
trap 'echo "Stopping services..."; kill $SLAPD_PID $APACHE_PID 2>/dev/null; wait' SIGINT SIGTERM
|
||||||
|
|
||||||
# Give you your interactive shell — forever
|
# Give you your interactive shell — forever
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user