{"id":515,"date":"2022-12-22T17:33:42","date_gmt":"2022-12-22T16:33:42","guid":{"rendered":"https:\/\/blog.sguazz.it\/?p=515"},"modified":"2022-12-22T17:34:34","modified_gmt":"2022-12-22T16:34:34","slug":"samba-sssd-e-selinux-su-red-hat","status":"publish","type":"post","link":"https:\/\/blog.sguazz.it\/index.php\/archives\/515","title":{"rendered":"Samba, SSSD e SELinux su Red Hat"},"content":{"rendered":"\n<p>Di recente ho dovuto installare un server Red Hat Enterprise Linux 7, si tratta di una macchina che ospita un database Oracle, ma mi \u00e8 stato chiesto di attivare anche alcune condivisioni tramite samba. Ho fatto tutti i passaggi consueti per l&#8217;installazione e configurazione, ma non funzionava nulla. Dopo due giorni di lavoro ho sistemato la macchina, superando vari ostacoli. Elenco qui i problemi pi\u00f9 grossi e le relative soluzioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Autenticazione<\/h2>\n\n\n\n<p>La macchina \u00e8 stata messa in dominio Windows per poter accettare connessioni dai computer aziendali. Per farlo \u00e8 stato installato il server <a href=\"https:\/\/sssd.io\/\">SSSD<\/a> che permette l&#8217;integrazione con il dominio Windows e la mappatura di utenze e gruppi di dominio. Samba \u00e8 stato configurato copiando il tutto da un&#8217;altra macchina, SunOS, che ospitava precedentemente le cartelle di rete. Quel samba usava Winbind per l&#8217;integrazione con il dominio, sicch\u00e9 anche qui \u00e8 stato usato winbind.<br \/>Nelle utenze sul dominio Windows non sono presenti userid e groupid come su Linux, sicch\u00e9 tutti i programmi di interfaccia con il dominio fanno una mappatura che parte dal SID dell&#8217;utenza Windows e arrivare a userid e groupid di Linux. Ovviamente per un determinato utente la mappatatura deve essere sempre eguale, sicch\u00e9 questa associazione viene memorizzata in un file. Il file \u00e8 diverso se si usa SSSD o se si usa Winbind. Ma la cosa che non sapevo \u00e8 che anche l&#8217;algoritmo di mappatura \u00e8 diverso, quindi quando samba riceve una richiesta di connessione, effettua l&#8217;autenticazione con Kerberos e poi mappa il SID dell&#8217;utenza Windows su una utenza locale, che per\u00f2 qui non veniva trovata. L&#8217;errore era:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[2022\/12\/22 10:37:04.668145, 1] ..\/..\/source3\/auth\/token_util.c:561(add_local_groups)\nSID S-1-5-21-990198401-320236572-313593124-1040 -&gt; getpwuid(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">11040<\/mark>) failed<\/pre>\n\n\n\n<p>in effetti l&#8217;utenza in questione aveva un uid diverso: 1092201040 anzich\u00e9 11040<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[linux]# <strong>id 'azienda\\nome.utente'<\/strong>\nuid=<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">1092201040<\/mark>(nome.utente@azienda.dom) gid=1092200513(domain users@azienda.dom) gruppi=1092200513(domain users@azienda.dom)<\/pre>\n\n\n\n<p>mentre sul vecchio server era proprio 11040:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[SunOS] # <strong>id 'azienda\\nome.utente'<\/strong>\nuid=<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">11040<\/mark>(AZIENDA\\nome.utente) gid=10513(AZIENDA\\domain users)<\/pre>\n\n\n\n<p>Per sistemare questa cosa ci sono due diverse possibilit\u00e0. La pi\u00f9 diffusa, ma secondo me peggiore, \u00e8 di fare usare winbind anche a NSS, cambiando le tre righe nel file <code>\/etc\/nssswitch.conf<\/code> da<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">passwd: files sss<br \/>group: files sss<br \/>shadow: files sss<\/pre>\n\n\n\n<p>a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">passwd: files winbind<br \/>group: files winbind<br \/>shadow: files winbind<\/pre>\n\n\n\n<p>la seconda \u00e8 di cambiare l&#8217;algoritmo usato da SSSD per generare userid e groupid. Questo si fa nel file <a href=\"https:\/\/www.systutorials.com\/docs\/linux\/man\/5-sssd.conf\/\">\/etc\/sssd\/sssd.conf<\/a>, dove, per il dominio in questione, ci sar\u00e0 scritto che il backend \u00e8 proprio il dominio tramite la configurazione <code>id_provider=ad<\/code>. Questo vuol dire che si possono usare anche le configurazioni di <a href=\"https:\/\/www.systutorials.com\/docs\/linux\/man\/5-sssd-ad\/\">sssd-ad<\/a> come quella che ci interessa: <code>ldap_idmap_autorid_compat<\/code>. Il valore predefinito \u00e8 false, ma se viene aggiunta al file di configurazione e impostata a true, risolve il problema.<\/p>\n\n\n\n<p>Una volta fatto questo, l&#8217;autenticazione dovrebbe cominciare a funzionare.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Accesso al file system<\/h2>\n\n\n\n<p>Quando si accede tramite samba, l&#8217;utenza sulla quale si viene mappati deve avere l&#8217;accesso alle directory e ai file da utilizzare. Se, ad esempio, la condivisione utilizza la directory <code>\/s6\/work1\/samba<\/code>, allora sar\u00e0 necessario che l&#8217;utente possa arrivarci. Per farlo \u00e8 necessario che la directory e quelle padre, cio\u00e8 <code>\/s6<\/code>, <code>\/s6\/work1<\/code> e <code>\/s6\/work1\/samba <\/code>abbiano tutte i bit &#8220;r&#8221; e &#8220;x&#8221; accesi, cio\u00e8 che siano leggibili (&#8220;r&#8221;) e che ci si possa spostare in quella directory (&#8220;x&#8221;).<\/p>\n\n\n\n<p>Una volta fatto questo, si ottiene ancora l&#8217;errore:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[2022\/12\/22 12:23:30.517028, 0] ..\/..\/source3\/smbd\/service.c:784(make_connection_snum)<br \/>make_connection_snum: canonicalize_connect_path failed for service CARTELLA, path \/s6\/work1\/samba<\/pre>\n\n\n\n<p>Questo perch\u00e9 \u00e8 attivo SELinux. Quando samba lavora su un sistema con SELinux \u00e8 necessario fare alcune operazioni in pi\u00f9:<\/p>\n\n\n\n<p>indicare che la directory in questione deve essere accessibile a samba per una condivisione. Questo si fa con la policy samba_share_t. Il comando da usare per fare una prova \u00e8;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[linux]# <strong>chcon --recursive --type samba_share_t \/s6\/work1\/samba<\/strong><\/pre>\n\n\n\n<p>mentre quelli per rendere il tutto permanente sono;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[linux]# <strong>semanage fcontext --add --type samba_share_t \"\/s6\/work1\/samba(\/.*)?\"<\/strong>\n[linux]# <strong>restorecon -R -v \/s6\/work1\/samba\/<\/strong><\/pre>\n\n\n\n<p>Per verificare che il tutto abbia funzionato, date il comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[linux]# <strong>ls -ldZ \/s6\/work1\/samba\/ \/s6\/work1\/ \/s6\/<\/strong>\ndrwxr-xr-x. root root unconfined_u:object_r:default_t:s0 \/s6\/\ndrwxr-xr-x. root root unconfined_u:object_r:default_t:s0 \/s6\/work1\/\ndrwxrwxrwx+ root root unconfined_u:object_r:samba_share_t:s0 \/s6\/work1\/samba\/<\/pre>\n\n\n\n<p>A questo punto samba potr\u00e0 accedere a quella directory e ai file ivi contenuti senza che SELinux la blocchi. Ma, se cercate di collegarvi ottenete ancora lo stesso errore:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[2022\/12\/22 14:05:14.602571, 0] ..\/..\/source3\/smbd\/service.c:784(make_connection_snum)<br \/>make_connection_snum: canonicalize_connect_path failed for service CARTELLA, path \/s6\/work1\/samba<\/pre>\n\n\n\n<p>Ora per\u00f2 il problema \u00e8 un altro, sempre legato a SELinux: ci sono delle attivit\u00e0 che sono completamente inibite in samba a meno di attivare tramite la configurazione di SELinux. Perch\u00e9 sia possibile condividere una qualsiasi directory in lettura va usato il parametro <code>samba_export_all_ro<\/code>, perch\u00e9 sia possibile farlo anche in scrittura va usato il parametro <code>samba_export_all_rw<\/code>. I due si attivano in questo modo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[linux]# <strong>setsebool -P samba_export_all_ro=1 samba_export_all_rw=1<\/strong>\n[linux]# <strong>getsebool -a| grep samba<\/strong>\nsamba_create_home_dirs --&gt; off\nsamba_domain_controller --&gt; off\nsamba_enable_home_dirs --&gt; off\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">samba_export_all_ro --&gt; on\nsamba_export_all_rw --&gt; on<\/mark>\nsamba_load_libgfapi --&gt; off\nsamba_portmapper --&gt; off\nsamba_run_unconfined --&gt; off\nsamba_share_fusefs --&gt; off\nsamba_share_nfs --&gt; off\nsanlock_use_samba --&gt; off\ntmpreaper_use_samba --&gt; off\nuse_samba_home_dirs --&gt; off\nvirt_use_samba --&gt; off\n[linux]# <strong>systemctl restart smb nmb winbind<\/strong><\/pre>\n\n\n\n<p>A questo punto tutto <em>dovrebbe<\/em> funzionare.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Di recente ho dovuto installare un server Red Hat Enterprise Linux 7, si tratta di una macchina che ospita un database Oracle, ma mi \u00e8 stato chiesto di attivare anche alcune condivisioni tramite samba. Ho fatto tutti i passaggi consueti per l&#8217;installazione e configurazione, ma non funzionava nulla. Dopo due giorni di lavoro ho sistemato [&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-515","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\/515","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=515"}],"version-history":[{"count":2,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/515\/revisions"}],"predecessor-version":[{"id":517,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/515\/revisions\/517"}],"wp:attachment":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/media?parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/categories?post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/tags?post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}