Skip to content

Commit 56a92e5

Browse files
committed
Run as root by default
Optionally run as another user/group only if the env vars are specified. Should give flexibility to those who need to run processes as root and open ports without having to request additional priveleges
1 parent d5ed70d commit 56a92e5

File tree

8 files changed

+86
-49
lines changed

8 files changed

+86
-49
lines changed

docker/docker-compose.ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ services:
3333
LE_STAGING: 'true'
3434
FORCE_COLOR: 1
3535
DB_SQLITE_FILE: '/data/mydb.sqlite'
36+
PUID: 1000
37+
PGID: 1000
3638
volumes:
3739
- npm_data:/data
3840
expose:

docker/rootfs/bin/common.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,19 @@ RED='\E[1;31m'
99
RESET='\E[0m'
1010
export CYAN BLUE YELLOW RED RESET
1111

12+
PUID=${PUID:-0}
13+
PGID=${PGID:-0}
14+
15+
if [[ "$PUID" -ne '0' ]] && [ "$PGID" = '0' ]; then
16+
# set group id to same as user id,
17+
# the user probably forgot to specify the group id and
18+
# it would be rediculous to intentionally use the root group
19+
# for a non-root user
20+
PGID=$PUID
21+
fi
22+
23+
export PUID PGID
24+
1225
log_info () {
1326
echo -e "${BLUE}${CYAN}$1${RESET}"
1427
}

docker/rootfs/etc/s6-overlay/s6-rc.d/backend/run

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,28 @@ set -e
55

66
. /bin/common.sh
77

8-
log_info 'Starting backend ...'
8+
cd /app || exit 1
99

10-
if [ "$DEVELOPMENT" == "true" ]; then
11-
cd /app || exit 1
12-
# If yarn install fails: add --verbose --network-concurrency 1
13-
s6-setuidgid npmuser yarn install
14-
exec s6-setuidgid npmuser bash -c 'export HOME=/tmp/npmuserhome;node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js'
10+
if [ "${DEVELOPMENT:-}" = "true" ]; then
11+
if [ "$PUID" = '0' ]; then
12+
log_info 'Starting backend development ...'
13+
yarn install
14+
node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js
15+
else
16+
log_info "Starting backend development as npmuser ($PUID) ..."
17+
s6-setuidgid npmuser yarn install
18+
exec s6-setuidgid npmuser bash -c 'export HOME=/tmp/npmuserhome;node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js'
19+
fi
1520
else
16-
cd /app || exit 1
1721
while :
1822
do
19-
s6-setuidgid npmuser bash -c 'export HOME=/tmp/npmuserhome;node --abort_on_uncaught_exception --max_old_space_size=250 index.js'
23+
if [ "$PUID" = '0' ]; then
24+
log_info 'Starting backend ...'
25+
node --abort_on_uncaught_exception --max_old_space_size=250 index.js
26+
else
27+
log_info "Starting backend as npmuser ($PUID) ..."
28+
s6-setuidgid npmuser bash -c 'export HOME=/tmp/npmuserhome;node --abort_on_uncaught_exception --max_old_space_size=250 index.js'
29+
fi
2030
sleep 1
2131
done
2232
fi

docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/run

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,20 @@ set -e
88
if [ "$DEVELOPMENT" == "true" ]; then
99
. /bin/common.sh
1010
cd /app/frontend || exit 1
11-
log_info 'Starting frontend ...'
1211
HOME=/tmp/npmuserhome
1312
export HOME
1413
mkdir -p /app/frontend/dist
15-
chown -R npmuser:npmuser /app/frontend/dist
16-
# If yarn install fails: add --verbose --network-concurrency 1
17-
s6-setuidgid npmuser yarn install
18-
exec s6-setuidgid npmuser yarn watch
14+
chown -R "$PUID:$PGID" /app/frontend/dist
15+
16+
if [ "$PUID" = '0' ]; then
17+
log_info 'Starting frontend ...'
18+
yarn install
19+
exec yarn watch
20+
else
21+
log_info "Starting frontend as npmuser ($PUID) ..."
22+
s6-setuidgid npmuser yarn install
23+
exec s6-setuidgid npmuser yarn watch
24+
fi
1925
else
2026
exit 0
2127
fi

docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ set -e
55

66
. /bin/common.sh
77

8-
log_info 'Starting nginx ...'
9-
10-
exec s6-setuidgid npmuser nginx
8+
if [ "$PUID" = '0' ]; then
9+
log_info 'Starting nginx ...'
10+
exec nginx
11+
else
12+
log_info "Starting nginx as npmuser ($PUID) ..."
13+
exec s6-setuidgid npmuser nginx
14+
fi

docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/10-npmuser.sh

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33

44
set -e
55

6-
PUID=${PUID:-911}
7-
PGID=${PGID:-911}
8-
9-
log_info 'Configuring npmuser ...'
6+
if [ "$PUID" = '0' ]; then
7+
log_info 'Skipping npmuser configuration'
8+
else
9+
log_info 'Configuring npmuser ...'
10+
groupmod -g 1000 users || exit 1
1011

11-
groupmod -g 1000 users || exit 1
12+
if id -u npmuser; then
13+
# user already exists
14+
usermod -u "$PUID" npmuser || exit 1
15+
else
16+
# Add npmuser user
17+
useradd -u "$PUID" -U -d /tmp/npmuserhome -s /bin/false npmuser || exit 1
18+
fi
1219

13-
if id -u npmuser; then
14-
# user already exists
15-
usermod -u "${PUID}" npmuser || exit 1
16-
else
17-
# Add npmuser user
18-
useradd -u "${PUID}" -U -d /tmp/npmuserhome -s /bin/false npmuser || exit 1
20+
usermod -G users npmuser || exit 1
21+
groupmod -o -g "$PGID" npmuser || exit 1
22+
# Home for npmuser
23+
mkdir -p /tmp/npmuserhome
24+
chown -R npmuser:npmuser /tmp/npmuserhome
1925
fi
20-
21-
usermod -G users npmuser || exit 1
22-
groupmod -o -g "${PGID}" npmuser || exit 1
23-
# Home for npmuser
24-
mkdir -p /tmp/npmuserhome
25-
chown -R npmuser:npmuser /tmp/npmuserhome

docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ log_info 'Setting ownership ...'
99
chown root /tmp/nginx
1010

1111
# npmuser
12-
chown -R npmuser:npmuser /data
13-
chown -R npmuser:npmuser /etc/letsencrypt
14-
chown -R npmuser:npmuser /run/nginx
15-
chown -R npmuser:npmuser /tmp/nginx
16-
chown -R npmuser:npmuser /var/cache/nginx
17-
chown -R npmuser:npmuser /var/lib/logrotate
18-
chown -R npmuser:npmuser /var/lib/nginx
19-
chown -R npmuser:npmuser /var/log/nginx
12+
chown -R "$PUID:$PGID" /data \
13+
/etc/letsencrypt \
14+
/run/nginx \
15+
/tmp/nginx \
16+
/var/cache/nginx \
17+
/var/lib/logrotate \
18+
/var/lib/nginx \
19+
/var/log/nginx
2020

2121
# Don't chown entire /etc/nginx folder as this causes crashes on some systems
22-
chown -R npmuser:npmuser /etc/nginx/nginx
23-
chown -R npmuser:npmuser /etc/nginx/nginx.conf
24-
chown -R npmuser:npmuser /etc/nginx/conf.d
22+
chown -R "$PUID:$PGID" /etc/nginx/nginx \
23+
/etc/nginx/nginx.conf \
24+
/etc/nginx/conf.d

docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/90-banner.sh

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ echo "-------------------------------------
1010
| \| | |_) | |\/| |
1111
| |\ | __/| | | |
1212
|_| \_|_| |_| |_|
13-
-------------------------------------
14-
User UID: $(id -u npmuser)
15-
User GID: $(id -g npmuser)
16-
-------------------------------------
17-
"
13+
-------------------------------------"
14+
if [[ "$PUID" -ne '0' ]]; then
15+
echo "User UID: $(id -u npmuser)"
16+
echo "User GID: $(id -g npmuser)"
17+
echo "-------------------------------------"
18+
fi
19+
echo

0 commit comments

Comments
 (0)