From 53775585ace0d0c0bdbc0389a826dc530d9154e0 Mon Sep 17 00:00:00 2001 From: Quentin Duchemin <quentinduchemin@tuta.io> Date: Sun, 22 Dec 2019 14:44:44 +0100 Subject: [PATCH] Re-add jq for default config generation, ignore CVE --- pica-mattermost/Dockerfile | 1 + pica-mattermost/README.md | 14 +++++----- pica-mattermost/clair-whitelist.yml | 2 ++ pica-mattermost/entrypoint.sh | 42 +++++++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/pica-mattermost/Dockerfile b/pica-mattermost/Dockerfile index 4f87f6b0..2e6507d3 100644 --- a/pica-mattermost/Dockerfile +++ b/pica-mattermost/Dockerfile @@ -13,6 +13,7 @@ ARG PGID=5000 RUN apk add --no-cache \ ca-certificates \ curl \ + jq \ libc6-compat \ libffi-dev \ libcap \ diff --git a/pica-mattermost/README.md b/pica-mattermost/README.md index cbc62d19..210c1dbf 100644 --- a/pica-mattermost/README.md +++ b/pica-mattermost/README.md @@ -13,16 +13,16 @@ Aussi, on n'utilise pas le système de sauvegarde `WAL-e`, ce qui nous permet d' Enfin, le Docker Compose est adapté à notre configuration. -### Utilisation +### Création d'une nouvelle instance -Assurez-vous que les volumes suivants existent (`docker volume`). Sinon, créez-les avec `docker volume create`. -* mattermost-config -* mattermost-db -* mattermost-data -* mattermost-plugins +Assurez-vous que les volumes suivants existent (`docker volume ls`). Sinon, créez-les avec `docker volume create`. +* `mattermost-config` +* `mattermost-db` +* `mattermost-data` +* `mattermost-plugins` -qduchemi@pica01-test:~/dockerfiles/pica-mattermost$ docker volume create mattermost-plugins Copier `secrets/mattermost-db.secrets.example` dans `secrets/mattermost-db.secrets` et remplacer les valeurs des identifiants. + Lancer `docker-compose up -d`. On notera l'utilisation de la variable `DB_HOST` dans le fichier Docker Compose, qui ne devrait pas avoir à être modifiée si on ne touche pas le nom du service de base de données. ### Procédure de mise à jour diff --git a/pica-mattermost/clair-whitelist.yml b/pica-mattermost/clair-whitelist.yml index e69de29b..519b80a6 100644 --- a/pica-mattermost/clair-whitelist.yml +++ b/pica-mattermost/clair-whitelist.yml @@ -0,0 +1,2 @@ +generalwhitelist: + CVE-2016-4074: jq -> pas de contre mesure, pas utilisé par Mattermost mais juste par l'entrypoint, pas de risque en remote diff --git a/pica-mattermost/entrypoint.sh b/pica-mattermost/entrypoint.sh index 7d14b183..437e24ae 100644 --- a/pica-mattermost/entrypoint.sh +++ b/pica-mattermost/entrypoint.sh @@ -11,11 +11,49 @@ if [ "${1:0:1}" = '-' ]; then fi if [ "$1" = 'mattermost' ]; then + # Check CLI args for a -config option + for ARG in $@; + do + case "$ARG" in + -config=*) + MM_CONFIG=${ARG#*=};; + esac + done + + if [ ! -f $MM_CONFIG ] + then + # If there is no configuration file, create it with some default values + echo "No configuration file" $MM_CONFIG + echo "Creating a new one" + # Copy default configuration file + cp /config.json.save $MM_CONFIG + # Substitue some parameters with jq + jq '.ServiceSettings.ListenAddress = ":8000"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.LogSettings.EnableConsole = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.LogSettings.ConsoleLevel = "ERROR"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.FileSettings.Directory = "/mattermost/data/"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.FileSettings.EnablePublicLink = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.FileSettings.PublicLinkSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.SendEmailNotifications = false' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.FeedbackEmail = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.SMTPServer = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.SMTPPort = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.InviteSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.PasswordResetSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.RateLimitSettings.Enable = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.SqlSettings.DriverName = "postgres"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.SqlSettings.AtRestEncryptKey = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.PluginSettings.Directory = "/mattermost/plugins/"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + else + echo "Using existing config file" $MM_CONFIG + fi + # Configure database access if [[ -z "$MM_SQLSETTINGS_DATASOURCE" && ! -z "$MM_USERNAME" && ! -z "$MM_PASSWORD" ]] then - echo -ne "Configure database connection..." - export MM_SQLSETTINGS_DATASOURCE="postgres://$MM_USERNAME:$MM_PASSWORD@$DB_HOST:$DB_PORT_NUMBER/$MM_DBNAME?sslmode=disable&connect_timeout=10" + # URLEncode the password, allowing for special characters + ENCODED_PASSWORD=$(printf %s $MM_PASSWORD | jq -s -R -r @uri) + export MM_SQLSETTINGS_DATASOURCE="postgres://$MM_USERNAME:$ENCODED_PASSWORD@$DB_HOST:$DB_PORT_NUMBER/$MM_DBNAME?sslmode=disable&connect_timeout=10" echo OK else echo "Using existing database connection" -- GitLab