{"id":58,"date":"2007-11-30T19:49:15","date_gmt":"2007-11-30T17:49:15","guid":{"rendered":"http:\/\/www.instruyete.org\/?p=58"},"modified":"2007-11-30T19:49:15","modified_gmt":"2007-11-30T17:49:15","slug":"multiuser-umgebung-und-subversion","status":"publish","type":"post","link":"https:\/\/www.instruyete.org\/?p=58","title":{"rendered":"Multiuser Umgebung und subversion"},"content":{"rendered":"<p>Multisuser Umgebungen sind nun in der UNIX Welt Sachen aus einer Zeit in der ich geboren wurde &#8211; dennoch ist bis zum heutigen Tag die Sache nicht ganz unproblematisch.<\/p>\n<h2>Subversion (svn) &#8211; Multiuseraccess auf Repository und Working Directory<\/h2>\n<p>Das Repository kann auf 4 Arten angesprochen werden:<\/p>\n<ol>\n<li>svn client auf regul\u00e4rem (lokalen) Filesystem<\/li>\n<li>ssh-spawned svnserve Prozess<\/li>\n<li>svnserve Prozess<\/li>\n<li>Apache HTTP Prozess<\/li>\n<\/ol>\n<p>Methode 1+2 laufen mit normeln Benutzerkennungen auf den Maschinen. Daher macht es Sinn f\u00fcr jedes Repository eine Gruppe zu definieren, welche Schreibberechtigung hat.<br \/>\nWenn man eine normale POSIX Rechtestruktur zugrundelegt (keine ACL&#8217;s), dann m\u00fcssen folgende Schritte ausgef\u00fchrt werden.<\/p>\n<p>1. Dem angelegten Repository Verzeichnis &#8211; meist auf dem svn Server unter <strong>\/var\/svn<\/strong> &#8211; m\u00fcssen rekursiv alle Gruppenrechte (-bits) gegeben werden.<\/p>\n<p><code>chmod -R g+rw \/var\/svn\/&lt;REPOSITORY&gt;<\/code><\/p>\n<p>2. Das <strong>sgid<\/strong> bit muss f\u00fcr dieses Respository etabliert werden, da die Benutzer unterschiedliche prim\u00e4re Gruppen haben k\u00f6nnen.<\/p>\n<p><code>chmod -R g+s \/var\/svn\/&lt;REPOSITORY&gt;<\/code><\/p>\n<p>3. Die <strong>umask<\/strong> muss auf dem subversion Server so eingestellt sein, dass die Gruppe immer Schreibrecht hat, bspw:<\/p>\n<p><code>umask 0002<\/code><\/p>\n<p>Damit funktionieren die beiden ersten Zugriffsmethoden. Die dritte und vierte Methode (HTTP) f\u00fchrt die Operationen immer mit der <em>Benutzerkennung des D\u00e4monenprozesses durch<\/em>. Der Benutzer muss sich an diesem Prozess authentifizieren &#8211; seine Kennung wird innerhalb der svn Files mitdurchgeschleust (<strong>svn blame<\/strong> zeigt damit immer den richtigen Author an).<\/p>\n<p>Somit erfordern diese Zugriffsarten nochmals Anpassungen<\/p>\n<p>4. Die Ownership des Repositories wird auf den Owner der HTTP\/svnserver D\u00e4monen angepasst. Dieser Benutzer muss allerdings auch Mitglied der Gruppe sein, die Schreibzugriff auf das Repository hat.<\/p>\n<p>5. Bei HTTP muss man ev. die Benutzerkennung des Prozesses anpassen (siehe 4.). Falls mehrere HTTP Dienste laufen, weicht man auf einen <em>virtuellen Host<\/em> aus, der auf einem gesonderten Port l\u00e4uft.<\/p>\n<p>6.  Die D\u00e4monen m\u00fcssen ebenfalls die unter 3. genannte umask respektieren &#8211; oder Sie muss angepasst werden durch \u00e4ndern der <strong>AP_SUEXEC_UMASK<\/strong> Variable<\/p>\n<p>Das war&#8217;s auf Repository Seite &#8211; ich bin der Meinung, die Einschr\u00e4nkungen pro Repository sollten reichen, falls aber eine noch filigranere Abstufung der Rechte (h\u00e4ndisches ACL) gew\u00fcnscht ist, muss man die <em>Path-Based Authorizations<\/em>  in <strong>svnserve.conf<\/strong> benutzen.<\/p>\n<p>Diese greifen beim Zugriff mit den Methoden 1-3 automatisch wenn auch kostspielig was die Performance betrifft.<\/p>\n<p>F\u00fcr den HTTP Zugriff muss serverseitig das Modul <strong>mod_authz_svn<\/strong> geladen und in der Konfiguration <strong>AuthzSVNAccessFile<\/strong> eingetragen werden.<\/p>\n<h2>Beim Zugriff auf das Working Directory wird&#8217;s undefinierter<\/h2>\n<p>Eigentlicht ist das working directory eher pro user gedacht auch wenn dies nie explizit erw\u00e4hnt wird.<\/p>\n<p>In einem Working Directory auf einem POSIX (UNIX) Rechner macht der svn client  folgendes:<\/p>\n<ul>\n<li>Die Struktur im .svn Unterverzeichnis (zeigt den Zustand des <em>working directories<\/em> an) wird  unabh\u00e4ngig von der umask angelegt, d.h. zentrale Dateien habe immer nur ein Leseflag.<\/li>\n<li>Wenn die Rechtestruktur im working directory ebenfalls so angelegt ist, dass Mitglieder einer Gruppe immer Schreiben k\u00f6nnen, sollte es zum Konflikt kommen wenn Dateien im .svn Verzeichnis ge\u00e4ndert werden&#8230;.<\/li>\n<li>&#8230; denn bei einem svn commit wechselt die Ownership einiger Dateien im .svn Verzeichnis auf denjeniegen der diese Operation durchgef\u00fcht hat.  Der svn UNIX client macht folgendes:<\/li>\n<\/ul>\n<ol>\n<li>betreffende Datei kopieren (..tmp)<\/li>\n<li>diese Datei dann beschreiben.<\/li>\n<li>die zu ersetzende Datei l\u00f6schen<\/li>\n<li>die tempor\u00e4re Datei wieder zur\u00fcckzukopieren (mv Operation)<\/li>\n<\/ol>\n<p>All  diese Punkte erfordern nur die Schreibberechtigung auf dem .svn Verzeichnis<\/p>\n<p>Schwieriger wird&#8217;s bei einem Windows svn client (Tortoise oder Kommandotool)<\/p>\n<p>die oben genannten 4 Punkte greifen nicht, denn unter Windows haben wir statt dem einfachen POSIX Rechtemodell die Windows ACL&#8217;s.<\/p>\n<p>Daher muss gew\u00e4hrleistet sein, dass alle Benutzer der zugreifenden Gruppe die ACL&#8217;s<\/p>\n<ol>\n<li>Take Ownership<\/li>\n<li>Change Permissions<\/li>\n<\/ol>\n<p>gesetzt haben &#8211; Schreibberechtigung sowieso vorrausgesetzt.<\/p>\n<p>Dann geht es auch hier &#8211; dieses Verfahren hat aber seine Grenzen wenn das working directory auf einem SAMBA Server liegt, <em>der nur einfache POSIX Rechte auf Windows ACL&#8217;s mappt<\/em> und somit diese beiden ACL Flags nicht setzen kann.<\/p>\n<p>Hier k\u00f6nnte h\u00f6chstens noch ein Samba Server mit aktivierten ACL&#8217;s helfen. Allerdings w\u00e4re die <em>Kompatibilit\u00e4t<\/em> zwischen <strong>Windows &#8211; POSIX und NFS4  ACL&#8217;s<\/strong> zu testen. Eventuell werden <em>die neuen NFS4 ACL&#8217;s der neue POSIX Standard<\/em>, was wegen der besseren Kompatibilit\u00e4t zu den Windows ACL&#8217;s zu begr\u00fc\u00dfen w\u00e4re.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Multisuser Umgebungen sind nun in der UNIX Welt Sachen aus einer Zeit in der ich geboren wurde &#8211; dennoch ist bis zum heutigen Tag die Sache nicht ganz unproblematisch. Subversion (svn) &#8211; Multiuseraccess auf Repository und Working Directory Das Repository kann auf 4 Arten angesprochen werden: svn client auf regul\u00e4rem (lokalen) Filesystem ssh-spawned svnserve Prozess &hellip; <a href=\"https:\/\/www.instruyete.org\/?p=58\" class=\"more-link\"><span class=\"screen-reader-text\">Multiuser Umgebung und subversion<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-unix"],"_links":{"self":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=58"}],"version-history":[{"count":0,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}