Commit aabc22d7d2101d0a89908c02eb6e169a9066a02f

Authored by VoBa
Committed by GitHub
1 parent d68ef233

Non root docker user (#2460)

* Non root docker user

* Fixes for user - signle user for all services

* Base image changed

* Fixes for pvc removal

* Moved to be in sync with PE

* Changed to TB repository
Showing 45 changed files with 113 additions and 58 deletions
... ... @@ -2,8 +2,8 @@
2 2
3 3 set -e
4 4
5   -chown -R ${pkg.name}: ${pkg.logFolder}
6   -chown -R ${pkg.name}: ${pkg.installFolder}
  5 +chown -R ${pkg.user}: ${pkg.logFolder}
  6 +chown -R ${pkg.user}: ${pkg.installFolder}
7 7 systemctl --no-reload enable ${pkg.name}.service >/dev/null 2>&1 || :
8 8
9 9 exit 0
... ...
... ... @@ -2,21 +2,21 @@
2 2
3 3 set -e
4 4
5   -if ! getent group ${pkg.name} >/dev/null; then
6   - addgroup --system ${pkg.name}
  5 +if ! getent group ${pkg.user} >/dev/null; then
  6 + addgroup --system ${pkg.user}
7 7 fi
8 8
9   -if ! getent passwd ${pkg.name} >/dev/null; then
  9 +if ! getent passwd ${pkg.user} >/dev/null; then
10 10 adduser --quiet \
11 11 --system \
12   - --ingroup ${pkg.name} \
  12 + --ingroup ${pkg.user} \
13 13 --quiet \
14 14 --disabled-login \
15 15 --disabled-password \
16 16 --home ${pkg.installFolder} \
17 17 --no-create-home \
18 18 -gecos "Thingsboard application" \
19   - ${pkg.name}
  19 + ${pkg.user}
20 20 fi
21 21
22 22 exit 0
\ No newline at end of file
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5
6 6 if [ $1 -eq 1 ] ; then
7 7 # Initial installation
... ...
... ... @@ -3,7 +3,7 @@ Description=${pkg.name}
3 3 After=syslog.target
4 4
5 5 [Service]
6   -User=${pkg.name}
  6 +User=${pkg.user}
7 7 ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
8 8 SuccessExitStatus=143
9 9
... ...
... ... @@ -44,7 +44,7 @@ installDir=${pkg.installFolder}/data
44 44
45 45 source "${CONF_FOLDER}/${configfile}"
46 46
47   -run_user=${pkg.name}
  47 +run_user=${pkg.user}
48 48
49 49 su -s /bin/sh -c "java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
50 50 -Dinstall.data_dir=${installDir} \
... ...
... ... @@ -43,7 +43,7 @@ installDir=${pkg.installFolder}/data
43 43
44 44 source "${CONF_FOLDER}/${configfile}"
45 45
46   -run_user=${pkg.name}
  46 +run_user=${pkg.user}
47 47
48 48 su -s /bin/sh -c "java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
49 49 -Dinstall.data_dir=${installDir} \
... ...
... ... @@ -17,6 +17,13 @@ In order to set database type change the value of `DATABASE` variable in `.env`
17 17
18 18 **NOTE**: According to the database type corresponding docker service will be deployed (see `docker-compose.postgres.yml`, `docker-compose.cassandra.yml` for details).
19 19
  20 +Execute the following command to create log folders for the services and chown of these folders to the docker container users.
  21 +To be able to change user, **chown** command is used, which requires sudo permissions (script will request password for a sudo access):
  22 +
  23 +`
  24 +$ ./docker-create-log-folders.sh
  25 +`
  26 +
20 27 Execute the following command to run installation:
21 28
22 29 `
... ...
  1 +#!/bin/bash
  2 +#
  3 +# Copyright © 2016-2020 The Thingsboard Authors
  4 +#
  5 +# Licensed under the Apache License, Version 2.0 (the "License");
  6 +# you may not use this file except in compliance with the License.
  7 +# You may obtain a copy of the License at
  8 +#
  9 +# http://www.apache.org/licenses/LICENSE-2.0
  10 +#
  11 +# Unless required by applicable law or agreed to in writing, software
  12 +# distributed under the License is distributed on an "AS IS" BASIS,
  13 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 +# See the License for the specific language governing permissions and
  15 +# limitations under the License.
  16 +#
  17 +
  18 +mkdir -p tb-node/log/ && sudo chown -R 799:799 tb-node/log/
  19 +
  20 +mkdir -p tb-transports/coap/log && sudo chown -R 799:799 tb-transports/coap/log
  21 +
  22 +mkdir -p tb-transports/http/log && sudo chown -R 799:799 tb-transports/http/log
  23 +
  24 +mkdir -p tb-transports/mqtt/log && sudo chown -R 799:799 tb-transports/mqtt/log
\ No newline at end of file
... ...
... ... @@ -39,5 +39,5 @@ spec:
39 39 volumeMounts:
40 40 - mountPath: /config
41 41 name: tb-node-config
42   - command: ['sh', '-c', 'while [ ! -f /install-finished ]; do sleep 2; done;']
  42 + command: ['sh', '-c', 'while [ ! -f /tmp/install-finished ]; do sleep 2; done;']
43 43 restartPolicy: Never
... ...
... ... @@ -15,4 +15,6 @@
15 15 # limitations under the License.
16 16 #
17 17
18   -kubectl -n thingsboard delete svc,sts,deploy,pv,pvc,cm,po,ing --all
  18 +kubectl -n thingsboard delete svc,sts,deploy,cm,po,ing --all
  19 +
  20 +kubectl -n thingsboard get pvc --no-headers=true | awk '//{print $1}' | xargs kubectl -n thingsboard delete --ignore-not-found=true pvc
\ No newline at end of file
... ...
... ... @@ -22,7 +22,7 @@ function installTb() {
22 22 kubectl apply -f tb-node-configmap.yml
23 23 kubectl apply -f database-setup.yml &&
24 24 kubectl wait --for=condition=Ready pod/tb-db-setup --timeout=120s &&
25   - kubectl exec tb-db-setup -- sh -c 'export INSTALL_TB=true; export LOAD_DEMO='"$loadDemo"'; start-tb-node.sh; touch /install-finished;'
  25 + kubectl exec tb-db-setup -- sh -c 'export INSTALL_TB=true; export LOAD_DEMO='"$loadDemo"'; start-tb-node.sh; touch /tmp/install-finished;'
26 26
27 27 kubectl delete pod tb-db-setup
28 28
... ...
... ... @@ -38,6 +38,6 @@ fi
38 38
39 39 kubectl apply -f database-setup.yml &&
40 40 kubectl wait --for=condition=Ready pod/tb-db-setup --timeout=120s &&
41   -kubectl exec tb-db-setup -- sh -c 'export UPGRADE_TB=true; export FROM_VERSION='"$fromVersion"'; start-tb-node.sh; touch /install-finished;'
  41 +kubectl exec tb-db-setup -- sh -c 'export UPGRADE_TB=true; export FROM_VERSION='"$fromVersion"'; start-tb-node.sh; touch /tmp/install-finished;'
42 42
43 43 kubectl delete pod tb-db-setup
... ...
... ... @@ -58,6 +58,8 @@ spec:
58 58 env:
59 59 - name: POSTGRES_DB
60 60 value: "thingsboard"
  61 + - name: POSTGRES_PASSWORD
  62 + value: "postgres"
61 63 - name: PGDATA
62 64 value: /var/lib/postgresql/data/pgdata
63 65 volumeMounts:
... ...
... ... @@ -14,7 +14,7 @@
14 14 # limitations under the License.
15 15 #
16 16
17   -FROM debian:stretch
  17 +FROM thingsboard/base
18 18
19 19 COPY start-js-executor.sh ${pkg.name}.deb /tmp/
20 20
... ... @@ -25,4 +25,6 @@ RUN dpkg -i /tmp/${pkg.name}.deb
25 25
26 26 RUN update-rc.d ${pkg.name} disable
27 27
  28 +USER ${pkg.user}
  29 +
28 30 CMD ["start-js-executor.sh"]
... ...
... ... @@ -26,4 +26,6 @@ identity=${pkg.name}
26 26
27 27 source "${CONF_FOLDER}/${configfile}"
28 28
29   -su -s /bin/sh -c "$mainfile"
  29 +cd ${pkg.installFolder}/bin
  30 +
  31 +exec /bin/sh -c "$mainfile"
... ...
... ... @@ -36,7 +36,6 @@
36 36 <main.dir>${basedir}/../..</main.dir>
37 37 <pkg.name>tb-js-executor</pkg.name>
38 38 <docker.name>tb-js-executor</docker.name>
39   - <pkg.user>thingsboard</pkg.user>
40 39 <pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder>
41 40 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
42 41 <pkg.linux.dist>${project.build.directory}/package/linux</pkg.linux.dist>
... ...
... ... @@ -25,4 +25,8 @@ RUN dpkg -i /tmp/${pkg.name}.deb
25 25
26 26 RUN systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :
27 27
  28 +RUN chown -R ${pkg.user}:${pkg.user} /tmp
  29 +
  30 +USER ${pkg.user}
  31 +
28 32 CMD ["start-tb-node.sh"]
... ...
... ... @@ -18,12 +18,14 @@
18 18 CONF_FOLDER="/config"
19 19 jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
20 20 configfile=${pkg.name}.conf
21   -run_user=${pkg.name}
  21 +run_user=${pkg.user}
22 22
23 23 source "${CONF_FOLDER}/${configfile}"
24 24
25 25 export LOADER_PATH=/config,${LOADER_PATH}
26 26
  27 +cd ${pkg.installFolder}/bin
  28 +
27 29 if [ "$INSTALL_TB" == "true" ]; then
28 30
29 31 if [ "$LOAD_DEMO" == "true" ]; then
... ...
... ... @@ -36,7 +36,6 @@
36 36 <main.dir>${basedir}/../..</main.dir>
37 37 <pkg.name>thingsboard</pkg.name>
38 38 <docker.name>tb-node</docker.name>
39   - <pkg.user>thingsboard</pkg.user>
40 39 <pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder>
41 40 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
42 41 </properties>
... ...
... ... @@ -38,7 +38,6 @@
38 38 <tb.docker.name>tb</tb.docker.name>
39 39 <tb-postgres.docker.name>tb-postgres</tb-postgres.docker.name>
40 40 <tb-cassandra.docker.name>tb-cassandra</tb-cassandra.docker.name>
41   - <pkg.user>thingsboard</pkg.user>
42 41 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
43 42 <pkg.upgradeVersion>2.4.2</pkg.upgradeVersion>
44 43 </properties>
... ...
... ... @@ -25,4 +25,6 @@ RUN dpkg -i /tmp/${pkg.name}.deb
25 25
26 26 RUN update-rc.d ${pkg.name} disable
27 27
  28 +USER ${pkg.user}
  29 +
28 30 CMD ["start-tb-coap-transport.sh"]
... ...
... ... @@ -25,6 +25,8 @@ export LOADER_PATH=/config,${LOADER_PATH}
25 25
26 26 echo "Starting '${project.name}' ..."
27 27
  28 +cd ${pkg.installFolder}/bin
  29 +
28 30 exec java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.coap.ThingsboardCoapTransportApplication \
29 31 -Dspring.jpa.hibernate.ddl-auto=none \
30 32 -Dlogging.config=/config/logback.xml \
... ...
... ... @@ -36,7 +36,6 @@
36 36 <main.dir>${basedir}/../../..</main.dir>
37 37 <pkg.name>tb-coap-transport</pkg.name>
38 38 <docker.name>tb-coap-transport</docker.name>
39   - <pkg.user>thingsboard</pkg.user>
40 39 <pkg.logFolder>/var/log/${pkg.name}</pkg.logFolder>
41 40 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
42 41 </properties>
... ...
... ... @@ -25,4 +25,6 @@ RUN dpkg -i /tmp/${pkg.name}.deb
25 25
26 26 RUN update-rc.d ${pkg.name} disable
27 27
  28 +USER ${pkg.user}
  29 +
28 30 CMD ["start-tb-http-transport.sh"]
... ...
... ... @@ -25,6 +25,8 @@ export LOADER_PATH=/config,${LOADER_PATH}
25 25
26 26 echo "Starting '${project.name}' ..."
27 27
  28 +cd ${pkg.installFolder}/bin
  29 +
28 30 exec java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.http.ThingsboardHttpTransportApplication \
29 31 -Dspring.jpa.hibernate.ddl-auto=none \
30 32 -Dlogging.config=/config/logback.xml \
... ...
... ... @@ -36,7 +36,6 @@
36 36 <main.dir>${basedir}/../../..</main.dir>
37 37 <pkg.name>tb-http-transport</pkg.name>
38 38 <docker.name>tb-http-transport</docker.name>
39   - <pkg.user>thingsboard</pkg.user>
40 39 <pkg.logFolder>/var/log/${pkg.name}</pkg.logFolder>
41 40 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
42 41 </properties>
... ...
... ... @@ -25,4 +25,6 @@ RUN dpkg -i /tmp/${pkg.name}.deb
25 25
26 26 RUN update-rc.d ${pkg.name} disable
27 27
  28 +USER ${pkg.user}
  29 +
28 30 CMD ["start-tb-mqtt-transport.sh"]
... ...
... ... @@ -25,6 +25,8 @@ export LOADER_PATH=/config,${LOADER_PATH}
25 25
26 26 echo "Starting '${project.name}' ..."
27 27
  28 +cd ${pkg.installFolder}/bin
  29 +
28 30 exec java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.mqtt.ThingsboardMqttTransportApplication \
29 31 -Dspring.jpa.hibernate.ddl-auto=none \
30 32 -Dlogging.config=/config/logback.xml \
... ...
... ... @@ -36,7 +36,6 @@
36 36 <main.dir>${basedir}/../../..</main.dir>
37 37 <pkg.name>tb-mqtt-transport</pkg.name>
38 38 <docker.name>tb-mqtt-transport</docker.name>
39   - <pkg.user>thingsboard</pkg.user>
40 39 <pkg.logFolder>/var/log/${pkg.name}</pkg.logFolder>
41 40 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
42 41 </properties>
... ...
... ... @@ -14,7 +14,7 @@
14 14 # limitations under the License.
15 15 #
16 16
17   -FROM debian:stretch
  17 +FROM thingsboard/base
18 18
19 19 COPY start-web-ui.sh ${pkg.name}.deb /tmp/
20 20
... ... @@ -25,4 +25,6 @@ RUN dpkg -i /tmp/${pkg.name}.deb
25 25
26 26 RUN update-rc.d ${pkg.name} disable
27 27
  28 +USER ${pkg.user}
  29 +
28 30 CMD ["start-web-ui.sh"]
... ...
... ... @@ -26,4 +26,6 @@ identity=${pkg.name}
26 26
27 27 source "${CONF_FOLDER}/${configfile}"
28 28
29   -su -s /bin/sh -c "$mainfile"
  29 +cd ${pkg.installFolder}/bin
  30 +
  31 +exec /bin/sh -c "$mainfile"
... ...
... ... @@ -36,7 +36,6 @@
36 36 <main.dir>${basedir}/../..</main.dir>
37 37 <pkg.name>tb-web-ui</pkg.name>
38 38 <docker.name>tb-web-ui</docker.name>
39   - <pkg.user>thingsboard</pkg.user>
40 39 <pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder>
41 40 <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
42 41 <pkg.linux.dist>${project.build.directory}/package/linux</pkg.linux.dist>
... ...
... ... @@ -29,6 +29,7 @@
29 29
30 30 <properties>
31 31 <main.dir>${basedir}</main.dir>
  32 + <pkg.user>thingsboard</pkg.user>
32 33 <spring-boot.version>2.1.3.RELEASE</spring-boot.version>
33 34 <spring.version>5.1.5.RELEASE</spring.version>
34 35 <spring-security.version>5.1.4.RELEASE</spring-security.version>
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5 update-rc.d ${pkg.name} defaults
6 6
... ...
1 1 #!/bin/sh
2 2
3   -if ! getent group ${pkg.name} >/dev/null; then
4   - addgroup --system ${pkg.name}
  3 +if ! getent group ${pkg.user} >/dev/null; then
  4 + addgroup --system ${pkg.user}
5 5 fi
6 6
7   -if ! getent passwd ${pkg.name} >/dev/null; then
  7 +if ! getent passwd ${pkg.user} >/dev/null; then
8 8 adduser --quiet \
9 9 --system \
10   - --ingroup ${pkg.name} \
  10 + --ingroup ${pkg.user} \
11 11 --quiet \
12 12 --disabled-login \
13 13 --disabled-password \
14 14 --home ${pkg.installFolder} \
15 15 --no-create-home \
16 16 -gecos "Thingsboard application" \
17   - ${pkg.name}
  17 + ${pkg.user}
18 18 fi
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5
6 6 if [ $1 -eq 1 ] ; then
7 7 # Initial installation
... ...
... ... @@ -3,7 +3,7 @@ Description=${pkg.name}
3 3 After=syslog.target
4 4
5 5 [Service]
6   -User=${pkg.name}
  6 +User=${pkg.user}
7 7 ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
8 8 SuccessExitStatus=143
9 9
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5 update-rc.d ${pkg.name} defaults
6 6
... ...
1 1 #!/bin/sh
2 2
3   -if ! getent group ${pkg.name} >/dev/null; then
4   - addgroup --system ${pkg.name}
  3 +if ! getent group ${pkg.user} >/dev/null; then
  4 + addgroup --system ${pkg.user}
5 5 fi
6 6
7   -if ! getent passwd ${pkg.name} >/dev/null; then
  7 +if ! getent passwd ${pkg.user} >/dev/null; then
8 8 adduser --quiet \
9 9 --system \
10   - --ingroup ${pkg.name} \
  10 + --ingroup ${pkg.user} \
11 11 --quiet \
12 12 --disabled-login \
13 13 --disabled-password \
14 14 --home ${pkg.installFolder} \
15 15 --no-create-home \
16 16 -gecos "Thingsboard application" \
17   - ${pkg.name}
  17 + ${pkg.user}
18 18 fi
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5
6 6 if [ $1 -eq 1 ] ; then
7 7 # Initial installation
... ...
... ... @@ -3,7 +3,7 @@ Description=${pkg.name}
3 3 After=syslog.target
4 4
5 5 [Service]
6   -User=${pkg.name}
  6 +User=${pkg.user}
7 7 ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
8 8 SuccessExitStatus=143
9 9
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5 update-rc.d ${pkg.name} defaults
6 6
... ...
1 1 #!/bin/sh
2 2
3   -if ! getent group ${pkg.name} >/dev/null; then
4   - addgroup --system ${pkg.name}
  3 +if ! getent group ${pkg.user} >/dev/null; then
  4 + addgroup --system ${pkg.user}
5 5 fi
6 6
7   -if ! getent passwd ${pkg.name} >/dev/null; then
  7 +if ! getent passwd ${pkg.user} >/dev/null; then
8 8 adduser --quiet \
9 9 --system \
10   - --ingroup ${pkg.name} \
  10 + --ingroup ${pkg.user} \
11 11 --quiet \
12 12 --disabled-login \
13 13 --disabled-password \
14 14 --home ${pkg.installFolder} \
15 15 --no-create-home \
16 16 -gecos "Thingsboard application" \
17   - ${pkg.name}
  17 + ${pkg.user}
18 18 fi
... ...
1 1 #!/bin/sh
2 2
3   -chown -R ${pkg.name}: ${pkg.logFolder}
4   -chown -R ${pkg.name}: ${pkg.installFolder}
  3 +chown -R ${pkg.user}: ${pkg.logFolder}
  4 +chown -R ${pkg.user}: ${pkg.installFolder}
5 5
6 6 if [ $1 -eq 1 ] ; then
7 7 # Initial installation
... ...
... ... @@ -3,7 +3,7 @@ Description=${pkg.name}
3 3 After=syslog.target
4 4
5 5 [Service]
6   -User=${pkg.name}
  6 +User=${pkg.user}
7 7 ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar
8 8 SuccessExitStatus=143
9 9
... ...