
Mein Team hatte kürzlich eine Show-and-Tell-Veranstaltung und ich präsentierte meine Erkenntnisse zuDocker. Ich habe erklärt, wie Sie Docker installieren können mit:
curl -sSL https://get.docker.com/ | sh
sudo
Ich habe dann erklärt, dass Sie bei dieser Installation allen Docker-Befehlen (zB ) voranstellen müssen sudo docker info
, es sei denn, Sie führen Folgendes aus:
sudo usermod -aG docker myUser
Sobald Sie dies getan haben, können Sie einfach beispielsweise Folgendes ausführen: docker info
.
Ein anderer Junior-Ingenieur fragte mich, wie dieser usermod
Befehl funktioniert, und ich erklärte ihn so, wie ich ihn für Linux-Benutzer/-Gruppen verstehe:
- Alle Docker-Binärdateien werden auf dem System installiert und gehören zu einer Gruppe namens
docker
- Da
myUser
es standardmäßig kein Mitglied von istdocker
, hat es keine RWX-Berechtigungen, irgendetwas mit den Docker-Binärdateien zu tun. - Die Lösung besteht also darin, entweder zu verwenden
sudo
, was Ihnen Root-Berechtigungen für den angegebenen Befehl gibt, odermyUser
die Mitgliedschaft in derdocker
Gruppe zu erteilen
Als ich es so erklärte, sagte mir ein leitender Ingenieur sehr abrupt, dass ich falsch liege und dass „es ist ein bisschen komplizierter."
Daher frage ich: Missverstehe ich hier das Sicherheitsmodell von Linux und hat der leitende Ingenieur recht? Wenn ja, was übersehe ich (und was zum Teufel ist „so kompliziert“)? Oder habe ich recht, und kann mir in diesem Fall jemand eine solide Dokumentation zeigen, die das beweist?
Antwort1
Alle Docker-Binärdateien sind auf dem System installiert und gehören zu einer Gruppe mit dem Namen Docker
Falsch. docker
Eigentümer der Binärdatei ist root:root
:
$ stat `which docker`
File: ‘/usr/bin/docker’
Size: 16296881 Blocks: 31832 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 143202 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Da myUser standardmäßig kein Mitglied von Docker ist, verfügt es nicht über RWX-Berechtigungen, um irgendetwas mit den Docker-Binärdateien zu tun.
Die Binärdateien sind für jeden lesbar und ausführbar.
Die Lösung besteht also darin, entweder sudo zu verwenden, das Ihnen Root-Berechtigungen für den angegebenen Befehl gibt, oder myUser die Mitgliedschaft in der Docker-Gruppe zu erteilen.
Der Docker-Dienst verwendet einen Socket, um auf Befehle zu warten. Der Socket ist normalerweise:
- befindet sich
/var/run/docker.sock
- gehört
root:docker
- und für die Gruppe beschreibbar, aber nicht für andere lesbar oder beschreibbar:
Zum Beispiel:
$ stat /var/run/docker.sock
File: ‘/var/run/docker.sock’
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 10h/16d Inode: 13619 Links: 1
Access: (0660/srw-rw----) Uid: ( 0/ root) Gid: ( 997/ docker)
DasDeshalb docker
können Sie als Mitglied der Gruppe Befehle ausführen docker
.
Beachten Sie, dass Sie als Parameter für den docker
Dienst angeben können, welche Gruppe verwendet werden soll. Von man docker
:
-G, --group=""
Group to assign the unix socket specified by -H when running in dae‐
mon mode.
use '' (the empty string) to disable setting of a group. Default is
docker.
Es ist also nichthabenzu sein docker
, ist aber docker
standardmäßig so.
Antwort2
Wenn Sie darüber sprechen, wie sicher Linux ist und welche Schwachstellen es haben kann, dann ja. Wenn ich Ihre Frage richtig verstehe, lautet die Antwort für Sie ja. Meine Erklärung ist, dass Linux meines Wissens unabhängig von der Distribution wie jedes andere Betriebssystem Viren bekommen kann, je nachdem, was Sie installieren oder nicht. Nehmen Sie zum Beispiel Flash Player, der selbst unter Windows viele Sicherheitslücken im Betriebssystem aufweist und es dadurch anfälliger macht als vor der Veröffentlichung.
Wenn Sie Linux ohne Desktop und all diese anderen tollen Privilegien ausführen würden, wäre es, wenn ich mich nicht irre, sicherer als mit all unseren Lieblings-Apps und dergleichen. Ich weiß nicht, ob meine Antwort geholfen hat, aber ich hoffe, das hat geholfen