{"id":226,"date":"2021-05-12T08:00:00","date_gmt":"2021-05-12T06:00:00","guid":{"rendered":"https:\/\/pascal-korz.de\/blog\/?p=226"},"modified":"2021-04-18T22:33:34","modified_gmt":"2021-04-18T20:33:34","slug":"freeipa-sudo-regel-fuer-den-ansible-benutzer","status":"publish","type":"post","link":"https:\/\/pascal-korz.de\/blog\/2021\/05\/12\/freeipa-sudo-regel-fuer-den-ansible-benutzer\/","title":{"rendered":"FreeIPA: sudo-Regel f\u00fcr den Ansible-Benutzer"},"content":{"rendered":"\n<p>Ansible basiert auf dem SSH-Zugriff auf entfernte Rechner. Normalerweise soll Ansible auch administrative T\u00e4tigkeiten im Netzwerk wahrnehmen, und daf\u00fcr bedarf es Administratorrechte, die auf Linux-Rechnern \u00fcblicherweise nicht direkt \u00fcber den oft gar nicht existenten oder nicht aktivierten root-Benutzer, sondern \u00fcber das Programm sudo verliehen werden. Wer welche Proramme in wessen Namen ausf\u00fchren darf, bestimmt die Datei <code>\/etc\/sudoers<\/code>. In einer Dom\u00e4ne mit zahlreichen Mitgliedern w\u00e4re es aber m\u00fchselig, die sudoers-Datei auf allen Rechnern einzeln zu ver\u00e4ndern, um jemandem erh\u00f6hte Rechte zu geben \u2013 und vor allem, sie wieder zu entziehen. FreeIPA bietet die M\u00f6glichkeit, sudo-Rechte mit sogenannten sudo-Regeln zentral zu steuern.<\/p>\n\n\n\n<div class=\"wp-block-group has-green-background-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Diese Anleitung kann f\u00fcr sich genommen hilfreich sein, baut aber auf den folgenden Beitr\u00e4gen auf:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/pascal-korz.de\/blog\/2018\/12\/08\/freeipa-installation-eines-domain-controllers\/\" data-type=\"post\" data-id=\"130\" target=\"_blank\">FreeIPA: Installation eines Domain Controllers<\/a><\/li><li><a href=\"https:\/\/pascal-korz.de\/blog\/2021\/05\/12\/ansible-in-einer-freeipa-domaene-einrichten\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ansible in einer FreeIPA-Dom\u00e4ne einrichten<\/a><\/li><\/ul>\n<\/div><\/div>\n\n\n\n<p>Zuerst gebe ich dem Benutzer Root-Rechte auf allen Rechnern, die Mitglied der Dom\u00e4ne sind:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kinit admin\nipa sudorule-add ansible --hostcat=all --cmdcat=all --runasusercat=all --runasgroupcat=all\nipa sudorule-add-user ansible --users ansible.ssh<\/code><\/pre>\n\n\n\n<p>Wenn man sich nun mit dem Ansible-Benutzer \u00fcber SSH an einem Rechner, der Mitglied der Dom\u00e4ne ist, anmeldet, kann man sich die geltenden sudo-Rechte f\u00fcr diesen Benutzer anzeigen lassen und die Richtlinie auf diese Weise testen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -l<\/code><\/pre>\n\n\n\n<p>Die Ausgabe sollte nach Eingabe des Passworts lauten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Der Benutzer ansible.ssh darf die folgenden Befehle auf cgn-ansible01 ausf\u00fchren:\n    (ALL : ALL) ALL<\/code><\/pre>\n\n\n\n<p>Sollte stattdessen wiederholt nach dem Passwort gefragt werden, obwohl das Passwort stimmt, verbieten wahrscheinlich die Host-Based-Access-Control-Regeln von FreeIPA die Nutzung von sudo. Erst wenn HBAC-Regeln sudo im Allgemeinen erlauben, wird die oben erstellte sudo-Regel angewendet. Um speziell den Ansible-Benutzer f\u00fcr sudo auf allen Rechnern zu berechtigen, f\u00fchre ich folgende Befehle aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kinit admin\nipa hbacrule-add allow_ansible_sudo --hostcat=all --desc=\"Allow ansible.ssh sudo access to all hosts.\"\nipa hbacrule-add-user allow_ansible_sudo --users=ansible.ssh\nipa hbacrule-add-service allow_ansible_sudo --hbacsvcs=sudo<\/code><\/pre>\n\n\n\n<p>Nun sollte die Anzeige der sudo-Rechte mit dem Ansible-Benutzer funktionieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -l<\/code><\/pre>\n\n\n\n<p>Mit der Kombination von sudo-Rechten und SSH-Zugriff ist Ansible in der Lage, die Rechner der Dom\u00e4ne zu konfigurieren, Software zu installieren, Updates einzuspielen und vieles andere mehr zu tun. In meiner Testumgebung nutze ich f\u00fcr meine Ansible-Playbooks der Einfachheit halber einen einzigen Benutzer mit umfassenden Rechten. Es ist aber nat\u00fcrlich m\u00f6glich und sehr zu empfehlen, f\u00fcr unterschiedliche Aufgaben unterschiedliche Benutzer mit unterschiedlichen SSH-Schl\u00fcsseln zu verwenden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ansible basiert auf dem SSH-Zugriff auf entfernte Rechner. Normalerweise soll Ansible auch administrative T\u00e4tigkeiten im Netzwerk wahrnehmen, und daf\u00fcr bedarf es Administratorrechte, die auf Linux-Rechnern \u00fcblicherweise nicht direkt \u00fcber den oft gar nicht existenten oder nicht aktivierten root-Benutzer, sondern \u00fcber das Programm sudo verliehen werden. Wer welche Proramme in wessen Namen ausf\u00fchren darf, bestimmt die&hellip; <a class=\"more-link\" href=\"https:\/\/pascal-korz.de\/blog\/2021\/05\/12\/freeipa-sudo-regel-fuer-den-ansible-benutzer\/\"><span class=\"screen-reader-text\">FreeIPA: sudo-Regel f\u00fcr den Ansible-Benutzer<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":6,"featured_media":290,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,12,6,8],"tags":[102],"class_list":["post-226","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ansible","category-freeipa","category-gruppenrichtlinien","category-linux","tag-artikelreihe-testumgebung","entry"],"_links":{"self":[{"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/posts\/226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/comments?post=226"}],"version-history":[{"count":7,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/posts\/226\/revisions"}],"predecessor-version":[{"id":477,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/posts\/226\/revisions\/477"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/media\/290"}],"wp:attachment":[{"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/media?parent=226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/categories?post=226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pascal-korz.de\/blog\/wp-json\/wp\/v2\/tags?post=226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}