From 9b43974c96cbfae5c7ecba758f2e76fb5a959747 Mon Sep 17 00:00:00 2001 From: zekeriya Date: Fri, 1 Mar 2019 10:42:11 +0300 Subject: [PATCH] [Policyd] Added policyd Dockerfile [Compose] Added policyd Service [Postfix] Added policyd for check_policy_service to main.cf --- data/Dockerfiles/policyd/Dockerfile | 19 ++ .../etc/supervisor/conf.d/apache-2.4.conf | 12 ++ .../etc/supervisor/conf.d/cbpolicyd.conf | 12 ++ .../50_install_cluebringer_db | 48 +++++ .../supervisord-pre.d/51_configure_policyd | 14 ++ .../tmpl/cluebringer/cluebringer-webui.conf | 16 ++ .../files/tmpl/cluebringer/cluebringer.conf | 192 ++++++++++++++++++ .../policyd/files/var/www/html/.htaccess | 4 + data/conf/postfix/main.cf | 2 +- docker-compose.yml | 27 +++ generate_config.sh | 12 ++ 11 files changed, 357 insertions(+), 1 deletion(-) create mode 100644 data/Dockerfiles/policyd/Dockerfile create mode 100644 data/Dockerfiles/policyd/files/etc/supervisor/conf.d/apache-2.4.conf create mode 100644 data/Dockerfiles/policyd/files/etc/supervisor/conf.d/cbpolicyd.conf create mode 100644 data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/50_install_cluebringer_db create mode 100644 data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/51_configure_policyd create mode 100644 data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer-webui.conf create mode 100644 data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer.conf create mode 100644 data/Dockerfiles/policyd/files/var/www/html/.htaccess diff --git a/data/Dockerfiles/policyd/Dockerfile b/data/Dockerfiles/policyd/Dockerfile new file mode 100644 index 00000000..3990f9f2 --- /dev/null +++ b/data/Dockerfiles/policyd/Dockerfile @@ -0,0 +1,19 @@ +FROM docker.io/1and1internet/ubuntu-16-apache-php-7.1:latest +ARG DEBIAN_FRONTEND=noninteractive +COPY files / +RUN \ + groupadd cbpolicyd && \ + useradd -g cbpolicyd cbpolicyd && \ + apt-get update && \ + apt-get -o Dpkg::Options::=--force-confdef -y install gettext-base postfix-cluebringer postfix-cluebringer-mysql postfix-cluebringer-webui -y && \ + apt-get -y clean && \ + rm -rf /var/lib/apt/lists/* /etc/cluebringer && \ + mkdir --mode=0775 /etc/cluebringer && \ + cp /usr/share/doc/postfix-cluebringer/database/policyd-db.mysql.gz /tmp/ && \ + cp -r /usr/share/postfix-cluebringer-webui/webui/* /var/www/html/ && \ + gunzip /tmp/policyd-db.mysql.gz && \ + sed -i -e 's/TYPE=InnoDB/ENGINE=InnoDB/g' /tmp/policyd-db.mysql && \ + chmod -R 0755 /hooks && \ + chmod -R 0777 /var/www/html && \ + chmod 0666 /var/log/cbpolicyd.log +EXPOSE 10031 8080 8443 diff --git a/data/Dockerfiles/policyd/files/etc/supervisor/conf.d/apache-2.4.conf b/data/Dockerfiles/policyd/files/etc/supervisor/conf.d/apache-2.4.conf new file mode 100644 index 00000000..d5409158 --- /dev/null +++ b/data/Dockerfiles/policyd/files/etc/supervisor/conf.d/apache-2.4.conf @@ -0,0 +1,12 @@ +[program:apache-2.4] +command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" +autostart=true +autorestart=true +startretries=3 + +# Redirect output so we can see it using "docker logs" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + diff --git a/data/Dockerfiles/policyd/files/etc/supervisor/conf.d/cbpolicyd.conf b/data/Dockerfiles/policyd/files/etc/supervisor/conf.d/cbpolicyd.conf new file mode 100644 index 00000000..53f78cf7 --- /dev/null +++ b/data/Dockerfiles/policyd/files/etc/supervisor/conf.d/cbpolicyd.conf @@ -0,0 +1,12 @@ +[program:cbpolicyd] +command=/usr/sbin/cbpolicyd --fg --config=/etc/cluebringer/cluebringer.conf +autostart=true +autorestart=true +startretries=3 + +# Redirect output so we can see it using "docker logs" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + diff --git a/data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/50_install_cluebringer_db b/data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/50_install_cluebringer_db new file mode 100644 index 00000000..4c53f15b --- /dev/null +++ b/data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/50_install_cluebringer_db @@ -0,0 +1,48 @@ +#!/bin/bash +set -eo pipefail + +# Password protect webui +echo Creating webui user +echo $WEBUI_PASSWORD | htpasswd -ci /var/www/html/.htpasswd webui + +# Checking for DB liveness before continuing with DB set up. +count=0 +while [ $count -lt 4 ]; do + if [[ $(mysql -h$CLUEBRINGER_DB_HOST -uroot -p$MYSQL_ROOT_PASSWORD -e "select 1" &>/dev/null ; echo $?) -ne 0 ]]; then + echo "Waiting for DB to be ready." + sleep 15 + let count+=1 + else + echo "DB appears to be ready." + break + fi +done +# Die if DB doesn't come up in time. +if [ $count -eq 4 ]; then + echo "!!!WARNING!!! DB didn't come up in time." + exit 0 +fi + +# Set up DB if it's empty. +if [[ $(mysql -N -h$CLUEBRINGER_DB_HOST -uroot -p$MYSQL_ROOT_PASSWORD -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '$MYSQL_DATABASE';") == 0 ]]; then + echo "Setting up cluebringer DB." + + # Set up DB and User + if [[ $(mysql -N -h$CLUEBRINGER_DB_HOST -uroot -p$MYSQL_ROOT_PASSWORD -e "create database $MYSQL_DATABASE;use $MYSQL_DATABASE;CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD';GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%';") -ne 0 ]]; then + echo "Can't create DB and Policyd DB user!" + exit 0 + fi + + # Add our policys from sql if they exist. + if [[ -e /tmpl/cluebringer/import/policy.sql ]]; then + echo "Importing our configuration." + mysql -h$CLUEBRINGER_DB_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /tmpl/cluebringer/import/policy.sql + echo "Done." + else + echo "Additional sql configuration no found importing standart configuration." + mysql -h$CLUEBRINGER_DB_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /tmp/policyd-db.mysql + fi +else + echo "Cluebringer DB not empty, exiting." + exit 0 +fi diff --git a/data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/51_configure_policyd b/data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/51_configure_policyd new file mode 100644 index 00000000..1983b4a5 --- /dev/null +++ b/data/Dockerfiles/policyd/files/hooks/supervisord-pre.d/51_configure_policyd @@ -0,0 +1,14 @@ +#!/bin/bash + +set -eu + +export DOLLAR=$ +export MYSQL_DATABASE=${MYSQL_DATABASE} +export MYSQL_USER=${MYSQL_USER} +export MYSQL_PASSWORD=${MYSQL_PASSWORD} +export CLUEBRINGER_DB_BACKEND=${CLUEBRINGER_DB_BACKEND} +export CLUEBRINGER_DB_PORT=${CLUEBRINGER_DB_PORT} +export CLUEBRINGER_DB_HOST=${CLUEBRINGER_DB_HOST} + +envsubst < /tmpl/cluebringer/cluebringer.conf > /etc/cluebringer/cluebringer.conf +envsubst < /tmpl/cluebringer/cluebringer-webui.conf > /etc/cluebringer/cluebringer-webui.conf diff --git a/data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer-webui.conf b/data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer-webui.conf new file mode 100644 index 00000000..a68f5a61 --- /dev/null +++ b/data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer-webui.conf @@ -0,0 +1,16 @@ + diff --git a/data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer.conf b/data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer.conf new file mode 100644 index 00000000..4686f1e2 --- /dev/null +++ b/data/Dockerfiles/policyd/files/tmpl/cluebringer/cluebringer.conf @@ -0,0 +1,192 @@ +# +# Server configuration +# +[server] + +# Protocols to load +protocols=<