Skip to content

Commit

Permalink
More secure Dockerfile
Browse files Browse the repository at this point in the history
* Drop privileges and run as `nobody:nobody`.
* Chroot into `/var/www/htdocs`.
* Compile with hardening options.
  • Loading branch information
kugland authored and emikulic committed Dec 6, 2022
1 parent defc1e8 commit 6d5299e
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
27 changes: 24 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,35 @@ FROM alpine AS build
RUN apk add --no-cache build-base
WORKDIR /src
COPY . .

# Hardening GCC opts taken from these sources:
# https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/
# https://security.stackexchange.com/q/24444/204684
ENV CFLAGS=" \
-static \
-O2 \
-flto \
-D_FORTIFY_SOURCE=2 \
-fstack-clash-protection \
-fstack-protector-strong \
-pipe \
-Wall \
-Werror=format-security \
-Werror=implicit-function-declaration \
-Wl,-z,defs \
-Wl,-z,now \
-Wl,-z,relro \
-Wl,-z,noexecstack \
"
RUN make darkhttpd-static \
&& strip darkhttpd-static

# Just the static binary
FROM scratch
WORKDIR /var/www/htdocs
COPY --from=build /src/darkhttpd-static /darkhttpd
COPY --from=build --chown=0:0 /src/darkhttpd-static /darkhttpd
COPY --chown=0:0 passwd /etc/passwd
COPY --chown=0:0 group /etc/group
EXPOSE 80
ENTRYPOINT ["/darkhttpd"]
CMD ["."]

CMD [".", "--chroot", "--uid", "nobody", "--gid", "nobody"]
1 change: 1 addition & 0 deletions group
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nobody:x:65534:
1 change: 1 addition & 0 deletions passwd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nobody:x:65534:65534:nobody:/var/www/htdocs:/darkhttpd

0 comments on commit 6d5299e

Please sign in to comment.