====== Installazione NIS server ====== Installato il pacchetto **nis**, si è specificato come nome di dominio il dominio DNS dell'host, in questo esempio **mydomain.org**. Viene salvato in ''**/etc/defaultdomain**'' (vedi avanti come cambiarlo). Fare attenzione al contenuto dei seguenti file: * **/etc/defaultdomain** * **/etc/default/nis** * **/etc/hosts** * **/etc/ypserv.securenets** Conviene che in **''/etc/hosts''** i nomi dei server NIS siano presenti sia nella versione breve che in quella completa, qualcosa del tipo: 127.0.0.1 localhost.localdomain localhost 10.0.1.47 nisserver.mydomain.org nisserver Poiché vogliamo essere **NIS master server**, in ''**/etc/default/nis**'' si imposta NISSERVER=master Per decidere chi ha accesso al server NIS si mette in ''**/etc/ypserv.securenets**'' una riga come segue (commentando la riga che garantisce accesso a tutti): 255.255.255.0 10.0.1.0 **NOTA:** se il server NIS ha più di una interfaccia di rete e si vuole rispondere a richieste broadcast da parte dei client, è opportuno aggiungere in ''**/etc/ypserv.securenets**'' anche tutti gli indirizzi alternativi del server NIS, oltre all'indirizzo loopback: # Always allow access for localhost 255.0.0.0 127.0.0.0 # Allow access from localhost (when proxying broadcast requests?) # See Debian bugs: # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=280537 # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=126177 # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329382 255.255.255.255 192.168.144.2 infatti pare che ''ypserv'' - in risposta ad una richiesta broadcast di un client - inoltri a sé stesso una richiesta broadcast utilizzando l'indirizzo IP aggiuntivo che non è nelle securenets, facendo fallire la richiesta del client e generando questo errore in syslog: ypserv[9960]: refused connect from 192.168.144.2:46594 to procedure ypproc_domain_nonack (mydomain.org,;0) Bisogna **inizializzare il database** del dominio NIS, che verrà tenuto nella directory **''/var/yp/mydomain.org/''**. Si usa il comando /usr/lib/yp/ypinit -m Per testare il corretto funzionamento del server si può usare il comando ''**ypcat passwd**''. Mostra tutte le voci del database "passwd" presente nel server NIS. Quali database ci sono sul server NIS lo si vede dal file ''/var/yp/nicknames''. Per es. le shadow password si vedono con **''ypcat shadow.byname''**. Per modificare il nome del dominio NIS da //mydomain.org// a //newdomain.org//: /etc/init.d/nis stop vi /etc/defaultdomain rm -r /var/yp/mydomain.org domainname newdomain.org /usr/lib/yp/ypinit -m /etc/init.d/nis start ====== Utenti NIS separati da quelli di sistema ====== Invece di usare i file in **''/etc/''** (passwd, group, ...), si vogliono usare delle copie in **''/var/yp/ypfiles''**. Modificare ''**/var/yp/Makefile**'': YPSRCDIR = /var/yp/ypfiles YPPWDDIR = /var/yp/ypfiles Si deve editare anche **''/etc/default/nis''**: YPPWDDIR=/var/yp/ypfiles Per fare in modo che **ypinit** riesca a generare i database necessari bisogna creare i seguenti file nella directory **/var/yp/ypfiles/**: ^ group | Inizialmente vuoto. | ^ hosts | Contiene almeno una riga per 127.0.0.1 localhost. | ^ netgroup | Copiato da ''/etc/netgroup''. | ^ passwd | Inizialmente vuoto. | ^ protocols | Copiato da ''/etc/protocols''. | ^ rpc | Copiato da ''/etc/rpc''. | ^ services | Copiato da ''/etc/services''. | ^ shadow | Inizialmente vuoto. | Dopo aver modificato il contenuto di tali file bisogno aggiornare lo stato del server NIS: make -C /var/yp Per far partecipare gli utenti NIS a gruppi di sistema (ad esempio plugdev, lpadmin, ecc. di Ubuntu) bisogna aggiungere le voci opportune in **''/var/yp/ypfiles/group''** e modificare il valore di **''MINGID''** in ''/var/yp/Makefile'' in modo che tali gruppi siano esportati via NIS. ====== NIS client ====== Si installa il pacchetto **nis**. Chiunque voglia essere NIS client (eventualmente anche il NIS server stesso) deve impostare **''NISCLIENT=true''** nel file **''/etc/default/nis''**. ===== Name Service Switch ===== La **GNU C Library** fornisce i servizi ad esempio per avere l'elenco degli utenti. Bisogna **integrare** gli utenti standard **Unix** con quelli **NIS**, il file di configurazione da verificare è **/etc/nsswitch.conf**. === Integrazione in modalità "compat" === Per integrare gli utenti e i gruppi NIS in quelli standard unix si devono modificare i file **''/etc/passwd''**, **''/etc/shadow''** e **''/etc/group''** aggiungendo le seguenti righe rispettivamente: +:::::: +:::::::: +::: Verificare nel file **/etc/nsswitch.conf** che i servizi **passwd**, **group**, e **shadow** includano la sorgente **compat**, che significa utilizzare la sorgente **files** (i tradizionali file Unix ''/etc/passwd'', ecc) con l'estensione NIS dovuta alle righe aggiuntive vista sopra. === Integrazione in modalità "nis" === In alternativa si può indicare in **/etc/nsswitch.conf** la sorgente **files** ed esplicitamente la sorgente **nis**, in questo caso le righe aggiuntive con il prefisso **+** non sono necessarie. In questo caso il file **/etc/nsswitch.conf** contiene qualcosa del genere: passwd: files systemd nis group: files systemd nis shadow: files nis :!: **ATTENZIONE**: Questa modalità non è compatibile con il demone **accountsservice** utilizzato ad esempio da **Ubuntu 20.4**. In questo caso l'elenco degli utenti non viene integrato con le informazioni NIS e quindi **gli utenti NIS non vengono elencati** nel greeter di **LightDM**. ===== Ricerca del server NIS ===== La ricerca del NIS server avviene tramite richieste broadcast sulla rete locale. Per evitarle (potrebbero fallire per regole di firewall) si dichiarano esplicitamente i server in **''/etc/yp.conf''**: # We states NIS servers explicitly to avoid broadcast requests. ypserver bianca.rigacci.org ypserver neve.rigacci.org Un altro motivo per cui la **richiesta broadcast potrebbe fallire** è se il server NIS è **multihomed** (ha più di una interfaccia di rete), vedi la nota sopra riguardo ''ypserv.securenets''. L'utente autenticato via NIS può cambiare la propria password con **''yppasswd''**. Durante il cambio password **il server NIS indica al client il nome dello stesso server**, quindi il client deve poterlo **risolvere in indirizzo IP**. Verificare le opportune impostazioni di **/etc/hosts**, ecc. ====== NIS slave server ====== Configurare l'host che dovrà essere **slave server** come se fosse un NIS client, quindi mettere in **''/etc/default/nis''** la riga **''NISSERVER=slave''**. Sul **master** modificare **''/var/yp/Makefile''** mettendo **''NOPUSH="false"''**, quindi eseguire **''/usr/lib/yp/ypinit -m''**. Riavviare NIS sullo slave ed eseguire **''/usr/lib/yp/ypinit -s ''** per trasferire il contenuto dei file. Le repliche dovrebbero avvenire automaticamente dal master allo slave. Nel caso qualcosa vada storto è opportuno configurare un **cron job** sullo **slave** come suggerito dal file nis.debian.howto: 20 * * * * root /usr/lib/yp/ypxfr_1perhour >/dev/null 2>&1 40 6 * * * root /usr/lib/yp/ypxfr_1perday >/dev/null 2>&1 55 6,18 * * * root /usr/lib/yp/ypxfr_2perday >/dev/null 2>&1 ====== Firewall ====== Se il server NIS è protetto da firewall che filtra in base al numero di porta si deve avere l'accortezza di impostare i vari server su porte predefinite (non su porte dinamiche come sarebbe l'impostazione predefinita) ed aprire di conseguenza il firewall. Come per il servizio NFS la gestione delle porte è affidata a **portmapper**, vedere in proposito la [[nfs|pagina relativa]]. In particolare si devono indicare le porte per **ypserv**, **yppasswdd**, FIXME ypbind, fypxfrd. In un sistema Debian vedere **''/etc/default/nis''**: YPSERVARGS="--port 808" YPPASSWDDARGS="--port 600" ====== Directory home su NFS ====== Attenzione al percorso delle home directory, se si sceglie qualcosa di diverso da **''/home/''** potrebbe essere necessario aggiustare qualcosa, come la configurazione di **''apparmor''** nelle recenti versioni Ubuntu GNU/Linux (es. 12.04). Il rischio è di incappare in errori "Permission denied" nella lettura o scrittura di file della propria home directory, nonostante che i permessi sembrino a posto, vedere ad esempio il [[https://bugs.launchpad.net/ubuntu/+source/evince/+bug/778638|bug 778638]]. Ad esempio se le home directory sono state montate su **''/nfshome/''**, lanciando **''evince''** si può notare l'errore: (evince:21345): Gtk-WARNING **: Attempting to read the recently used resources file at `/nfshome/francesco/.local/share/recently-used.xbel', but the parser failed: Failed to open file '/nfshome/francesco/.local/share/recently-used.xbel': Permission denied. contestualmente il kernel logga: Jan 9 11:35:02 nisclient kernel: [ 5422.898561] type=1400 audit(1357727702.213:1085): apparmor="DENIED" operation="chmod" parent=12077 profile="/usr/bin/evince" name="/nfshome/francesco/.local/share/recently-used.xbel" pid=12470 comm="evince" requested_mask="w" denied_mask="w" fsuid=1003 ouid=1003 In questo caso è sufficiente modificare il file **''/etc/apparmor.d/tunables/home''** impostando: @{HOMEDIRS}=/home/ /nfshome/ ====== NSCD Name Service Cache Daemon ====== Sui client NIS è opportuno installare il pacchetto **nscd** che tiene in cache le informazioni nsswitch (passwd, group, ecc.) senza doverle richiedere continuamente al server NIS. Potrebbe capitare che sul server viene cambiato un UID oppure un GID e il client non se ne accorge immediatamente; la cache di NSCD resiste anche al reboot perché viene salvata in **/var/cache/nscd/** Per invalidare la cache di nscd su un particolare database (es. passwd) si può usare il comando: nscd -i passwd Si può anche configurare il time to live e la persistenza della cache intervenendo su **/etc/nscd.conf** sulle righe del tipo: positive-time-to-live passwd 600 persistent passwd yes ====== Login Time Too Long in Ubuntu 18.04 ====== After installing an **Ubuntu 18.04 as a NIS client** with home directories mounted over NFS, we noticed very long times required to complete the login. Even on the tty1 console, there was a **wait time of about 25 seconds** after typing the passowrd, before to get the command line prompt. The only apparent error message found in the **syslog** was: systemd-logind[2133]: do_ypcall: clnt_call: RPC: Unable to send; errno = Operation not permitted A nice solution was to **install the nscd package**. The complete story was a bit more complicated, the right direction was found in the following posts: * **[[https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1774417|systemd-logind: do_ypcall: clnt_call: RPC: Unable to send; errno = Operation not permitted]]** * **[[https://github.com/systemd/systemd/issues/7074|systemd-logind's IP sandbox breaks nss-nis and suchlike #7074]]** One user pointed out that the bug affects also what is reported in **/run/user/**, where the NIS user logged-in (after the long wait) was missing. Other users suggested to edit the file **/lib/systemd/system/systemd-logind.service**, commentig-out a line from the **[Service]** section: IPAddressDeny=any