{"id":1832,"date":"2021-05-15T11:56:10","date_gmt":"2021-05-15T09:56:10","guid":{"rendered":"https:\/\/my.stargazer.at\/?p=1832"},"modified":"2021-05-15T11:56:10","modified_gmt":"2021-05-15T09:56:10","slug":"yubikey-for-system-auth","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2021\/05\/15\/yubikey-for-system-auth\/","title":{"rendered":"Mit dem Yubikey anmelden"},"content":{"rendered":"<p>Linux ist schon ein wunderbares System mit vielen Dingen, die sich unendlich anpassen lassen &#8211; zumindest f\u00fchlt es sich immer jedesmal aufs Neue so an, wenn ich an meinem System ein neues Feature einbaue, das mir das Leben leichter macht. Heute: Login mit dem Yubikey<\/p>\n<p>Unter Linux ist es dank PAM sehr einfach, sich am System &#8222;irgendwie&#8220; zu authentifizieren und auch diese Methoden zu kombinieren. In meinem Fall war ich es leid, beim Befehl &#8217;su&#8216; oder &#8217;sudo&#8216; immer wieder mein Passwort eingeben zu m\u00fcssen und habe mir das U2F Modul namens <a href=\"https:\/\/github.com\/Yubico\/pam-u2f.git\">pam_u2f.so<\/a> geholt. F\u00fcr Debian und Gentoo habe ich das Gl\u00fcck, dass das Modul als Paket verf\u00fcgbar ist.<\/p>\n<p>Die Konfiguration ist erschreckend einfach:<\/p>\n<p>In \/etc\/pam.d\/ finden sich diverse Services mit deren Modul-Konfigurationen &#8211; Manche davon sind Symlinks, aber das macht ja nichts. Man bekommt relativ schnell eine Idee, welche Config f\u00fcr welchen Dienst zust\u00e4ndig ist. Ich f\u00fcr meinen Teil habe mich f\u00fcr &#8217;su&#8216; entschieden, da ich das am lokalen System &#8211; wie oben beschrieben &#8211; doch sehr h\u00e4ufig brauche.<\/p>\n<p>Der Inhalt der Datei ist in meinem Fall sehr einfach gestrickt<\/p>\n<pre>auth \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sufficient \u00a0\u00a0\u00a0\u00a0\u00a0pam_rootok.so \r\nauth \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0required \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pam_wheel.so use_uid \r\nauth \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0include \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system-auth \r\naccount \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0include \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system-auth \r\npassword \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0include \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system-auth \r\nsession \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0include \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system-auth \r\nsession \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0required \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pam_env.so \r\nsession \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0optional \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pam_xauth.so\r\n<\/pre>\n<p>Zugegeben, es ist der Standard-Inhalt der Datei unter Gentoo, den ich bislang nicht wirklich angefasst habe.\u00a0 Hier finden sich die einzelnen Module mit &#8217;sufficient&#8216; bis &#8218;required&#8216;, was die Regeln der PAM Module in der letzten Spalte festlegt. F\u00fcr meine Zwecke reicht es mir aus, dass ich eine Zeile in der auth-Sektion einf\u00fcge:<\/p>\n<pre>auth \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sufficient \u00a0\u00a0\u00a0\u00a0\u00a0pam_u2f.so cue<\/pre>\n<p>Durch diese Zeile gebe ich an. dass es &#8218;ausreichend&#8216; ist, wenn ich mich mit dem Yubikey anmelde, und den zugeh\u00f6rigen PIN eingebe. Durch die Verwendung von &#8218;required&#8216; anstelle von &#8217;sufficient&#8216; kann man nat\u00fcrlich auch die Authentifizierung zus\u00e4tzlich zum Passwort verlangen, um das System noch sicherer zu gestalten, wovon ich bei der ersten Einrichtung tunlichst abrate um sich nicht aus dem System zu sperren!<\/p>\n<p>Der Parameter &#8218;cue&#8216; sagt dem PAM Modul, dass es eine Nachricht ausgeben soll, wenn der Key gedr\u00fcckt werden sollte. Alle weiteren Parameter finden sich unter https:\/\/developers.yubico.com\/pam-u2f\/<\/p>\n<p>Nun haben wir zwar PAM gesagt dass es den Yubikey verwenden soll, aber das Ganze ist noch nicht fertig. Das System ben\u00f6tigt noch eine Registrierung der einzelnen Schl\u00fcssel und die Zuordnung zu den Benutzern: Dies passiert entweder in der Datei \/etc\/u2f_mappings oder f\u00fcr jeden User in ~\/.ssh\/u2f_keys<\/p>\n<p>Die Dateien sind \u00e4hnlich und wie folgt aufgebaut:<\/p>\n<pre>&lt;username1&gt;:&lt;KeyHandle1&gt;,&lt;UserKey1&gt;,&lt;Options1&gt;:&lt;KeyHandle2&gt;,&lt;UserKey2&gt;,&lt;Options2&gt;:...\r\n&lt;username2&gt;:&lt;KeyHandle1&gt;,&lt;UserKey1&gt;,&lt;Options1&gt;:&lt;KeyHandle2&gt;,&lt;UserKey2&gt;,&lt;Options2&gt;:...<\/pre>\n<p>Die Key-Handles bekommen wir durch<\/p>\n<pre>pamu2fcfg -uusername -opam:\/\/myorigin -ipam:\/\/myappid<\/pre>\n<p>Damit bekommen wir die eindeutige ID des Schl\u00fcssels und k\u00f6nnen sie so dem Benutzer zuordnen.<\/p>\n<p>Um das Ganze zu testen ist es nicht n\u00f6tig zu rebooten oder irgendetwas neu zu laden, da PAM seine Konfigurationen bei jedem Login liest.<\/p>","protected":false},"excerpt":{"rendered":"<p>Linux ist schon ein wunderbares System mit vielen Dingen, die sich unendlich anpassen lassen &#8211; zumindest f\u00fchlt es sich immer jedesmal aufs Neue so an, wenn ich an meinem System ein neues Feature einbaue, das mir das Leben leichter macht. Heute: Login mit dem Yubikey Unter Linux ist es dank PAM sehr einfach, sich am System &#8222;irgendwie&#8220; zu [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1833,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[39,22,751,750],"class_list":["post-1832","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-related-stuff","category-security","tag-gentoo","tag-linux","tag-pam","tag-yubikey"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=1832"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1832\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media\/1833"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=1832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=1832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=1832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}