Skip to content

Commit ca2996d

Browse files
committed
Run nginx as unprevileged user
1 parent 9f701e3 commit ca2996d

2 files changed

Lines changed: 33 additions & 2 deletions

File tree

src/bci_build/package/appcontainers.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,14 @@ def _get_nginx_kwargs(os_version: OsVersion):
271271
parse_version=ParseVersion.MINOR,
272272
)
273273
],
274-
"package_list": ["gawk", "nginx", "findutils", _envsubst_pkg_name(os_version)],
274+
"package_list": [
275+
"gawk",
276+
"nginx",
277+
"findutils",
278+
_envsubst_pkg_name(os_version),
279+
"sed",
280+
"grep",
281+
],
275282
"entrypoint": ["/usr/local/bin/docker-entrypoint.sh"],
276283
"from_target_image": generate_from_image_tag(os_version, "bci-micro"),
277284
"cmd": ["nginx", "-g", "daemon off;"],
@@ -289,8 +296,15 @@ def _get_nginx_kwargs(os_version: OsVersion):
289296
COPY index.html /srv/www/htdocs/
290297
{DOCKERFILE_RUN} chmod +x /docker-entrypoint.d/*.sh /usr/local/bin/docker-entrypoint.sh
291298
{DOCKERFILE_RUN} install -d -o nginx -g nginx -m 750 /var/log/nginx; \
299+
install -d /var/cache/nginx /var/run; \
292300
ln -sf /dev/stdout /var/log/nginx/access.log; \
293-
ln -sf /dev/stderr /var/log/nginx/error.log
301+
ln -sf /dev/stderr /var/log/nginx/error.log; \
302+
chown -R nginx:nginx /var/cache/nginx; \
303+
chown -R nginx:nginx /etc/nginx; \
304+
chown -R nginx:nginx /var/run; \
305+
install -d -o nginx -g nginx /tmp/client_temp /tmp/proxy_temp /tmp/fastcgi_temp /tmp/uwsgi_temp /tmp/scgi_temp; \
306+
chown -R nginx:nginx /tmp; \
307+
chmod -R g+w /var/cache/nginx /var/log/nginx /etc/nginx /var/run /tmp
294308
STOPSIGNAL SIGQUIT"""),
295309
}
296310

src/bci_build/package/nginx/docker-entrypoint.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,21 @@ if [ "$1" = "nginx" ] || [ "$1" = "nginx-debug" ]; then
4444
fi
4545
fi
4646

47+
CURRENT_UID=$(id -u)
48+
if [ "$CURRENT_UID" -gt "0" ]; then
49+
# Running as Unprivileged User
50+
entrypoint_log "$0: Running as unprivileged user (UID: $CURRENT_UID). Configuring for unprivileged mode (Port 8080)."
51+
52+
# Remove the 'user' directive
53+
sed -i '/^user/d' /etc/nginx/nginx.conf
54+
entrypoint_log "$0: Removed 'user' directive for unprivileged worker."
55+
56+
# Ensure PID path is set to /tmp/nginx.pid
57+
sed -i 's,^#\?\s*pid\s\+.*;$,pid /tmp/nginx.pid;,' /etc/nginx/nginx.conf
58+
sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf
59+
sed -i 's/listen \(.*\)80;/listen \18080;/' /etc/nginx/conf.d/default.conf 2>/dev/null || \
60+
sed -i 's/listen \(.*\)80;/listen \18080;/' /etc/nginx/nginx.conf 2>/dev/null || true
61+
entrypoint_log "$0: Listening on port 8080."
62+
fi
63+
4764
exec "$@"

0 commit comments

Comments
 (0)