Übung 2 - Kein Root User
Kein Root User verwenden
Ziel
In dieser Übung geht des darum ein Dockerfile, welches den USER root
verwendet so umzubauen, dass der Container mit einem USER appuser arbeitet,
welcher nur Schreibrecht auf das WORKDIR "/app" hat.
Schritte
- Erstellen Sie eine Datei mit dem Namen
package.jsonund kopieren Sie den untenstehenden Inhalt hinein. In dieser Datei werden die Abhängigkeiten und weiteres gespeichert.
package.json
{
"name": "multistage-node-example",
"version": "1.0.0",
"description": "A simple Node.js web server using Express.js",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
- Kreieren Sie die Datei für den Server mit dem Namen
server.jsund kopieren Sie folgenden Code hinein:
server.js
const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send(
"Hello, World! This is a simple Node.js web server using Express.js."
);
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
- Erstellt ein
Dockerfilemit folgendem Inhalt:
FROM node:24
WORKDIR /app
COPY package*.json ./
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "server.js"]
- Baut das Image und startet es und öffnet http://localhost:3000 im Browser
docker build -t security:with-root .docker run --rm -d -p 3000:3000 --name with-root security:with-root.
- Öffnet eine Shell im Container mit
docker exec -it with-root /bin/bash. - Prüft den User mit dem Befehl
whoami. - Stoppt den Container mit
docker stop with-root. - Erstellt eine neue Datei
Dockerfile.norootund kopiert folgenden Inhalt hinein.
Dockerfile.noroot
FROM node:24
# Eigenen Benutzer und Gruppe anlegen und verwenden
RUN adduser --system --group --home /home/appuser appuser
WORKDIR /app
# Rechte setzen
RUN chown appuser:appuser /app
# User appuser verwenden
USER appuser
# Berechtigungen geben
COPY package*.json ./
COPY . .
RUN npm install
# App starten
CMD ["node", "server.js"]
- Baut das Image erneut und startet es.
docker build -f Dockerfile.noroot -t security:no-root .docker run --rm -d -p 3000:3000 --name no-root security:no-root.
- Öffnet eine Shell im Container mit
docker exec -it no-root /bin/bash. - Prüft den User mit dem Befehl
whoami. - Stoppt den Container mit
docker stop no-root