{"id":185,"date":"2015-05-20T16:33:21","date_gmt":"2015-05-20T15:33:21","guid":{"rendered":"http:\/\/eppesuigoccas.homedns.org\/wordpress\/?p=185"},"modified":"2015-05-21T11:12:45","modified_gmt":"2015-05-21T10:12:45","slug":"autenticazione-postgresql-tramite-pam","status":"publish","type":"post","link":"https:\/\/blog.sguazz.it\/index.php\/archives\/185","title":{"rendered":"Autenticazione postgresql tramite PAM per winbind e shadow"},"content":{"rendered":"<p>A volte si vuole far s\u00ec che gli utenti del database postgresql siano autenticati su un sistema esterno al database stesso. Per questo postgresql permette di verificare le credenziali tramite LDAP o kerberos o altro ancora, ma quando non c&#8217;\u00e8 un metodo direttamente implementato in postgresql \u00e8 possibile utilizzare PAM, che ha svariati connettori. In questo esempio prendiamo in considerazione l&#8217;autenticazione sul sistema operativo (utenti in <em>\/etc\/passwd<\/em> e password in <em>\/etc\/shadow<\/em>) e su dominio Windows (tramite winbind).<\/p>\n<p><em>Nel seguito verr\u00e0 assunto che l&#8217;autenticazione tramite PAM sia gi\u00e0 configurata e funzionante. I comandi sono riferiti ad un sistema Debian Jessie.<br \/>\n<\/em><!--more--><\/p>\n<p>La prima cosa da fare \u00e8 definire un database, per esempio <strong>alcione<\/strong>, e impostare l&#8217;autenticazione via PAM nel file <em>pg_hba.conf<\/em> di postgresql cos\u00ec:<\/p>\n<pre># TYPE DATABASE USER ADDRESS METHOD\r\nhost alcione all 127.0.0.1\/8 pam<\/pre>\n<p>Alcuni inseriscono qui 127.0.0.1\/32 che indica solo un indirizzo, mentre con il \/8 si intendono tutti i possibili indirizzi dell&#8217;interfaccia loopback di questa macchina. Per i nostri esempi questo non fa differenza.<\/p>\n<p>\u00c8 possibile specificare un ulteriore parametro dopo la parola <em>pam<\/em> per indicare quale file di <em>\/etc\/pam.d<\/em> utilizzare per la configurazione. Se non lo si indica verr\u00e0 utilizzato quello chiamato <em>postgresql<\/em>, se presente, o altrimenti quello <em>other<\/em>, che \u00e8 sempre presente. Su Debian quello <em>other<\/em> non fa altro che includere i vari <em>common-*<\/em>, ma l&#8217;unica impostazione che veramente serve \u00e8 quella <em>auth<\/em>. Se avete configurato winbind, ma non volete che gli utenti del dominio Windows accedano a Linux (ad esempio via ssh o X11), e volete che accedano solo a postgresql, allora copiate le istruzioni con winbind da <em>common-auth<\/em> e spostatele in <em>postgresql<\/em> e poi usate il comando pam-auth-update per disabilitare winbind dai metodi usati per l&#8217;accesso a Linux.<\/p>\n<p>Successivamente, <span style=\"text-decoration: underline;\">e questo \u00e8 il passaggio pi\u00f9 importante e meno documentato<\/span>, \u00e8 necessario bloccare il database e inserire il suo utente proprietario nel gruppo appropriato. Il proprietario del cluster che contiene il database si vede con il comando <em>pg_lsclusters<\/em>:<\/p>\n<pre># pg_lsclusters \r\nVer Cluster Port Status Owner Data directory Log file\r\n9.4 main 5432 online postgres \/var\/lib\/postgresql\/9.4\/main \/var\/log\/postgresql\/postgresql-9.4-main.log<\/pre>\n<p>Nel caso pi\u00f9 diffuso il proprietario \u00e8 un utente del sistema operativo chiamato <strong>postgres<\/strong>. Questo utente va aggiunto al gruppo <em>shadow<\/em> o al gruppo <em>winbindd_priv<\/em>, a seconda dell&#8217;autenticazione che si vuole attivare, con il comando:<\/p>\n<pre># adduser postgres winbindd_priv<\/pre>\n<p>oppure<\/p>\n<pre># adduser postgres shadow<\/pre>\n<p>Per verificare che il nome del gruppo sia proprio quello, potete controllare il gruppo del file <em>\/etc\/shadow<\/em> (nel caso vogliate l&#8217;autenticazione degli utenti locali), oppure della pipe <em>\/run\/samba\/winbindd_privileged<\/em>. (nel caso vogliate l&#8217;autenticazione dal dominio Windows)<\/p>\n<p>Il motivo per il quale va aggiunto al gruppo \u00e8 proprio per l&#8217;accesso al file <em>\/etc\/shadow<\/em> (dove \u00e8 memorizzata la password cifrata dell&#8217;utente locale) oppure per la comunicazione con winbind tramite la pipe (per la verifica completa delle credenziali).<\/p>\n<p>Il motivo per il quale si deve modificare proprio l&#8217;utente proprietario del cluster, \u00e8 che i processi linux che gestiscono quel cluster postgresql sono di quell&#8217;utente. Quindi \u00e8 quell&#8217;utente che deve poter accedere al file o alla pipe summenzionate.<\/p>\n<p>Una volta aggiunto l&#8217;utente al gruppo \u00e8 necessario riavviare il cluster postgresql con il comando:<\/p>\n<pre>pg_ctlcluster 9.4\/main restart<\/pre>\n<p>e, a questo punto, collegarsi al database con il proprio client preferito e le credenziali opportune.<\/p>\n<p>Nota: <em>se si cerca di fare il test delle credenziali tramite un client su un altro computer, allora la riga in pg_hba.conf dovr\u00e0 essere cambiata, o duplicata, in modo che l&#8217;indirizzo IP sia quello del client.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A volte si vuole far s\u00ec che gli utenti del database postgresql siano autenticati su un sistema esterno al database stesso. Per questo postgresql permette di verificare le credenziali tramite LDAP o kerberos o altro ancora, ma quando non c&#8217;\u00e8 un metodo direttamente implementato in postgresql \u00e8 possibile utilizzare PAM, che ha svariati connettori. In questo esempio prendiamo in considerazione l&#8217;autenticazione sul sistema operativo (utenti in \/etc\/passwd e password in \/etc\/shadow) e su dominio Windows (tramite winbind).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[13],"class_list":["post-185","post","type-post","status-publish","format-standard","hentry","category-sysadmin","category-computer","tag-itpug"],"_links":{"self":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/comments?post=185"}],"version-history":[{"count":11,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/185\/revisions"}],"predecessor-version":[{"id":196,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/185\/revisions\/196"}],"wp:attachment":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/media?parent=185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/categories?post=185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/tags?post=185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}