{"id":285,"date":"2017-05-08T17:04:23","date_gmt":"2017-05-08T16:04:23","guid":{"rendered":"http:\/\/eppesuigoccas.homedns.org\/wordpress\/?p=285"},"modified":"2017-05-09T11:03:31","modified_gmt":"2017-05-09T10:03:31","slug":"operare-manualmente-sulla-mappatura-uidsid-di-winbind","status":"publish","type":"post","link":"https:\/\/blog.sguazz.it\/index.php\/archives\/285","title":{"rendered":"Operare manualmente sulla mappatura UID\/SID di winbind nel formato tdb2"},"content":{"rendered":"<p>Per collegare una macchina unix o Linux ad una Windows per l&#8217;autenticazione, si pu\u00f2 utilizzare il <a href=\"https:\/\/www.samba.org\/samba\/docs\/man\/Samba-HOWTO-Collection\/winbind.html\">winbind<\/a>, cio\u00e8 quella parte di <a href=\"https:\/\/www.samba.org\/\">samba<\/a> che permette di autenticare gli utenti tramite le loro credenziali di dominio. Una volta che l&#8217;utente \u00e8 autenticato, viene creato una utenza corrispettiva a quella Windows anche su Unix. La nuova utenza avr\u00e0 un proprio UID e un GID generati al volo da winbind, ma quando l&#8217;utente torner\u00e0 una seconda volta a fare l&#8217;accesso a Unix, sar\u00e0 meglio che trovi gli stessi UID e GID, cos\u00ec da avere gli stessi diritti che aveva al primo accesso. Per far s\u00ec che UID e GID siano mantenuti, questi vengono memorizzati da qualche parte e associati al SID (cio\u00e8 all&#8217;UID per Windows).<\/p>\n<p>Nel caso che si debbano avere pi\u00f9 macchine unix collegate allo stesso dominio Windows, \u00e8 il caso di memorizzare queste informazioni in un luogo accessibile a tutte le macchine, come ad esempio il dominio Windows stesso (utilizzando l&#8217;estensione SFU), oppure in un LDAP, oppure in alcuni file che possono essere periodicamente copiati dalla macchina unix principale alle secondarie. Invece, se la macchina unix \u00e8 una sola, allora si possono semplicemente utilizzare dei file sul server unix stesso.<\/p>\n<p>Per dire a winbind quale percorso seguire, vanno impostati i \u00abbackend\u00bb della mappatura degli identificatori, detta idmap. Nel mio caso ho utilizzato il backend tdb2, cio\u00e8 la nuova versione del <a href=\"https:\/\/tdb.samba.org\/\">tdb<\/a> (\u00abTrivial DataBase\u00bb, che in italiano significa \u00abbase dati <em>elementare<\/em>\u00bb). Nel file di configurazione di samba, ho scritto:<\/p>\n<pre>idmap config *:backend = tdb2\r\nidmap config *:range = 4000-4100<\/pre>\n<p>Che vuol dire: per le utenze di qualsiasi dominio Windows, memorizza le associazioni SID\/UID e SID\/GID tramite il backend tdb2. Inoltre crea gli UID e GID nell&#8217;intervallo da 4000 a 4100,&nbsp; in modo da essere sicuro che non si sovrappongano a UID e GID gi\u00e0 presenti sul sistema unix locale. (Nota: l&#8217;intervallo per UID e GID locali \u00e8 definito in <code>\/etc\/login.defs<\/code>.)<\/p>\n<p>Per tutti quelli che usano <a href=\"https:\/\/www.debian.org\/\">Debian GNU\/Linux<\/a> (state gi\u00e0 usando tutti Debian, vero?), tdb2 andr\u00e0 a creare il suo database nella directory <code>\/var\/lib\/samba<\/code> e lo chiamer\u00e0 <code>idmap2.tdb<\/code>.<\/p>\n<p>Questo database \u00e8 \u2014 appunto \u2014 elementare: cio\u00e8 \u00e8 capace di inserire solo dati nella forma chiave\/valore. Per vedere quali chiavi sono memorizzate, si pu\u00f2 usare il comando tdbtool in questo modo:<\/p>\n<pre>root@miura:~# tdbtool \/var\/lib\/samba\/idmap2.tdb keys\r\nkey 9 bytes: GID 4037\r\nkey 43 bytes: S-1-5-21-1142429371-1648316-403635728-1131\r\nkey 9 bytes: GID 4024\r\nkey 9 bytes: UID 4043\r\nkey 43 bytes: S-1-5-21-1142429371-1648316-403635728-1136\r\n[...]<\/pre>\n<p>come si vede, le chiavi sono a volte un UID a volte un GID, a volte un SID. Non \u00e8 scritto nella documentazione online, ma l&#8217;informazione su quanto sia lunga la chiave \u00e8 di grande aiuto: la chiave &#8220;UID 4043&#8221; \u00e8 lunga 9 byte, ma sono solo 8 caratteri, quindi c&#8217;\u00e8 qualcos&#8217;altro. Idem per le altre chiavi.<\/p>\n<p>Per sapere a cosa \u00e8 associata una certa chiave potremmo usare lo stesso comando, con argomenti diversi. Proviamo:<\/p>\n<pre>root@miura:~# tdbtool \/var\/lib\/samba\/idmap2.tdb show 'GID 4037'\r\nfetch failed<\/pre>\n<p>L&#8217;errore \u00e8 criptico, ma ricordando il messaggio precedente sulla lunghezza della chiave, e con un po&#8217; di fantasia (o leggendo il codice sorgente), si pu\u00f2 trovare il comando corretto, con l&#8217;aggiunta di un byte 0 alla fine della chiave:<\/p>\n<pre>root@miura:~# tdbtool \/var\/lib\/samba\/idmap2.tdb show 'GID 4037\\0'\r\n\r\nkey 9 bytes\r\nGID 4037\r\ndata 43 bytes\r\n[000] 53 2D 31 2D 35 2D 32 31  2D 31 31 34 32 34 32 39  S-1-5-21 -1142429\r\n[010] 33 37 31 2D 31 36 34 38  33 31 36 2D 34 30 33 36  371-1648 316-4036\r\n[020] 33 35 37 32 38 2D 31 31  38 35 00                 35728-11 85\r\n<\/pre>\n<p>bene, adesso non ci sono errori: alla chiave GID 4043 \u00e8 associato il SID S-1-5-21-1142429371-1648316-403635728-1185, e viceversa:<\/p>\n<pre>root@miura:~# tdbtool \/var\/lib\/samba\/idmap2.tdb show \\\r\n'S-1-5-21-1142429371-1648316-403635728-1185\\0'\r\n\r\nkey 43 bytes\r\nS-1-5-21-1142429371-1648316-403635728-1185\r\ndata 9 bytes\r\n[000] 47 49 44 20 34 30 33 37  00                       GID 4037<\/pre>\n<p>Lo stesso comando permette anche di cancellare un&#8217;associazione, ma questa operazione \u2014 ora che abbiamo capito che winbind scrive due record per ogni associazione \u2014 va fatta per entrambe le chiavi. Il comando in questo caso non fornisce nessun messaggio riguardo l&#8217;esito, nel miglior stile unix:<\/p>\n<pre>root@miura:~# tdbtool \/var\/lib\/samba\/idmap2.tdb delete \\\r\n'S-1-5-21-1142429371-1648316-403635728-1185\\0'\r\nroot@miura:~# tdbtool \/var\/lib\/samba\/idmap2.tdb delete 'GID 4037\\0'\r\n<\/pre>\n<p>Chiudo cos\u00ec questo breve excursus sul trivial database, che nel mio caso \u00e8 il frutto dello studio dovuto ad un problema, su un server, che presentava due utenti con lo stesso UID. Erano difatti due diverse associazioni memorizzate nel tdb di winbind: una era riferita ad una utenza effettivamente presente sul dominio, mentre l&#8217;altra era una associazione rimasta memorizzata nonostante l&#8217;utenza sul dominio fosse stata cancellata. Ah, gi\u00e0, dimenticavo: winbind non cancella mai le associazioni locali SID\/UID.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per collegare una macchina unix o Linux ad una Windows per l&#8217;autenticazione, si pu\u00f2 utilizzare il winbind, cio\u00e8 quella parte di samba che permette di autenticare gli utenti tramite le loro credenziali di dominio. Una volta che l&#8217;utente \u00e8 autenticato, viene creato una utenza corrispettiva a quella Windows anche su Unix. La nuova utenza avr\u00e0 [&hellip;]<\/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,11,10],"tags":[],"class_list":["post-285","post","type-post","status-publish","format-standard","hentry","category-sysadmin","category-computer","category-debian","category-open-source"],"_links":{"self":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/285","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=285"}],"version-history":[{"count":9,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/285\/revisions"}],"predecessor-version":[{"id":294,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/285\/revisions\/294"}],"wp:attachment":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/media?parent=285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/categories?post=285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/tags?post=285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}