Ein Linux-Container kann eine Datei "authorized_keys" außerhalb meines Ausgangsverzeichnisses verwenden, kurzlebige Container, die darauf basieren, jedoch nicht. Warum?

10

In Ubuntu 12.10 habe ich mit dem Dienstprogramm lxc-create einen LXC vom Typ 'ubuntu' erstellt. Ich erstelle dann kurzlebige Container basierend auf diesem Container mit dem Dienstprogramm lxc-start-ephemeral und muss mit ssh ohne Kennwort eine Verbindung zu diesen herstellen. Ich muss jedoch die Ordner / home / ubuntu makellos halten, damit ich die übliche .ssh / autorisierte_keys-Datei dort nicht ablegen kann.

Der ‚verschlüsselte Home - Verzeichnis‘ Abschnitt hier sagt mir , wie authorized_keys aus dem Home - Verzeichnis zu verschieben. Nachdem ich diese Anweisungen aus dem Basiscontainer heraus befolgt habe, kann ich ohne Angabe eines Passworts in den Basiscontainer ssh.

Wenn ich jedoch einen kurzlebigen Container vom Basiscontainer aus starte, kann ich ohne Kennwort nicht einschalten. (Verwirrenderweise funktioniert passwortloses ssh für den kurzlebigen Container , wenn sich autorisierte Schlüssel an der üblichen Stelle in /home/ubuntu/.ssh befinden.) Wie kann ich das beheben?

Folgendes hat ssh -v gesagt, beginnend mit dem Akzeptieren des Host-Schlüssels:

debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/ubuntu/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/ubuntu/.ssh/id_dsa
debug1: Trying private key: /home/ubuntu/.ssh/id_ecdsa
debug1: Next authentication method: password

Hier sind die relevanten Teile von /var/log/auth.log im kurzlebigen Container:

Apr 11 00:06:52 test-temp-SNeWevO sshd[306]: Authentication refused: bad ownership or modes for directory /
Apr 11 00:06:54 test-temp-SNeWevO sshd[306]: Accepted password for ubuntu from 10.0.3.1 port 59677 ssh2
Apr 11 00:06:54 test-temp-SNeWevO sshd[306]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory
Apr 11 00:06:54 test-temp-SNeWevO sshd[306]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)

Ich habe diesen Test an einer neuen AWS-Mikroinstanz durchgeführt, die auf dem Standard-Ubuntu 12.10 AMI basiert, und kann detaillierte Anweisungen zur Reproduktion geben, wenn dies hilft.

Anand
quelle
Update: Ich dachte, das Problem könnten die seltsamen Dateisysteme sein, die lxc-start-ephemeral verwendet, also habe ich einige Änderungen vorgenommen. Ich habe zuerst OVERLAY_DIR und EPHEMERAL_BIND_DIR daran gehindert, tmpfs zu sein, jetzt sind sie nur noch Verzeichnisse. Das hat es nicht behoben. Ich habe dann das Root-Dateisystem des kurzlebigen Containers von einem Overlayfs in ein einfaches Bind-Mount geändert. Das hat es behoben. Leider löst das mein Problem nicht, weil ich die Overlays brauche.
Anand

Antworten:

1

Dies ist eine alte Frage, aber sie taucht immer noch in Google auf ...

Authentication refused: bad ownership or modes for directory /

wird dadurch verursacht, dass der sshd-Dienst strenge Berechtigungsanforderungen für das Verzeichnis hat, in dem autorisierte Schlüssel gefunden werden. Sie sind sich nicht sicher, wie Sie es geschafft haben, dass das Stammverzeichnis (/) vermutlich etwas mit der Art und Weise zu tun hat, wie Sie Container konfigurieren.

Wenn Sie die Berechtigungen von / nicht ändern können, was in diesem Fall wahrscheinlich erscheint, können Sie festlegen

StrictModes no

in sshd_config.
Vorausgesetzt, Sie haben nicht mehrere Benutzer, die auf den Server zugreifen, hat dies nur geringe Auswirkungen auf die Sicherheit.

Teknopaul
quelle