Samba4
Installazione
apt-get install build-essential python-dev python-crypto libgpgme11-dev python-gpgme heimdal-clients libacl1-dev libblkid-dev libreadline-dev libgnutls28-dev libbsd-dev pkg-config libsystemd-dev libpam0g-dev ./configure --with-gpgme --enable-debug --enable-gnutls --enable-selftest --with-quotas --with-systemd --prefix=/opt/samba make make install
bind9
apt-get install bind9
Modificare il file: /etc/bind/named.conf:
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/opt/samba-4.1.1/private/named.conf";
(cioé aggiungere l'ultima riga che è sarà citata nel comando di provisioning)
Modificare il file: /etc/bind/named.conf.options
options { directory "/var/cache/bind"; forwarders { 155.185.1.2; 155.185.1.5; }; allow-query {155.185.0.0/16;}; # dnssec-validation auto; tkey-gssapi-keytab "/opt/samba/private/dns.keytab"; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { none; }; };
Prove del bind
host -t SRV _ldap._tcp.ad.unimore.it.
nsupdate
francesco@ateneo:~$ nsupdate -g -v > server ateneo.ad.unimore.it > zone ad.unimore.it > update delete wimpyshell.ad.unimore.it A > show Outgoing update query: ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0 ;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 ;; ZONE SECTION: ;ad.unimore.it. IN SOA ;; UPDATE SECTION: wimpyshell.ad.unimore.it. 0 ANY A > send
Oppure, piu' semplice: scrivere i comandi nel file nsupdate.cmd e lanciare:
nsupdate -g -v nsupdate.cmd
Provision
Il nome del dominio deve essere diverso da quanto risulta da hostname -s sul pdc.
sudo ./bin/samba-tool domain provision --dns-backend=BIND9_DLZ --host-ip=155.185.253.28 \ --realm=ATENEO.AD --domain=ATENEOAD --use-rfc2307 --adminpass=k2zL16ekuJs --server-role=dc
In cui domain è il dominio a cui gli utenti windows fanno il join, mentre realm è un dominio DNS fittizio creato per l'inserimento dei record ddns dei client.
Configurazione del resolv.conf
domain ateneo.ad nameserver 127.0.0.1 nameserver 155.185.1.2 nameserver 155.185.1.5
Controllare anche in /etc/network/interfaces che non ci siano gli IP statici dei nameserver.
Modifica del smb.conf
Aggiungere le righe (in global):
#dns forwarder = 155.185.1.2 interfaces = eth0, lo log level = 3 log file = /var/log/samba/log.%m
Firewall
- Dns 53/UDP 53/TCP
- LDAP 389/TCP e 389/UDP
- Samba 137/UDP, 138/UDP, 139/TCP, 445/TCP
- Kerberos 88/TCP e 88/UDP
- Kadmin 1024/TCP
- 3268/TCP
- RPC: 49152:65535/TCP
Errori
- kinit: krb5_get_init_creds: Server (krbtgt/ATENEO.AD@ATENEO.AD) unknown
Il nome del realm è diverso da quello atteso. Nel caso in oggetto il provisioning era con il nome in minuscolo o forse era unimore.it. In ogni caso la soluzione è stata cancellare l'intero albero di installazione di samba4, rifare make install e rifare il provisioning
- TSIG error with server: tsig verify failure
Non funziona il ddns. Ho risolto passando dal dns builtin al bind9.8. Forse invece la soluzione era il interfaces = eth0
- Server not found in Kerberos database
Un client non riesce a fare un ldapsearch -Y GSSAPI e riceve questo errore: accertarsi di avere il pacchetto libsasl2-modules-gssapi-heimdal e non libsasl2-modules-gssapi-mit
- i client non riescono a risolvere in ipv6 il nome del PDC:
host ateneo.ateneo.ad ateneo.dmz-int.unimo.it Using domain server: Name: ateneo.dmz-int.unimo.it Address: 155.185.253.28#53 Aliases: ateneo.ateneo.ad has address 155.185.253.28 ateneo.ateneo.ad has IPv6 address ::1
Cancellare la entry ipv6 sbagliata (temporaneamente):
sudo ./bin/samba-tool dns query 155.185.253.28 ateneo.ad ateneo AAAA sudo ./bin/samba-tool dns delete localhost ateneo.ad ateneo AAAA 0000:0000:0000:0000:0000:0000:0000:0001
Cancellare la entry ipv6 sbagliata (definitivamente): editare il file: private/dns_update_list e togliere le righe AAAA
Gestione
Creazione delle username
./bin/samba-tool user create francesco ./bin/smbpasswd francesco ./bin/samba-tool group addmembers 'Domain Admins' francesco ./bin/samba-tool user setexpiry --noexpiry francesco ./bin/samba-tool group listmembers 'Domain Admins' ./bin/samba-tool domain passwordsettings show ./bin/samba-tool domain passwordsettings set --complexity=off ./bin/samba-tool domain passwordsettings set --min-pwd-length=5 ./bin/samba-tool domain passwordsettings set --max-pwd-age=999
DNS
./bin/samba-tool dns query addc.unimore.it unimore.it ldap ALL ./bin/samba-tool dns zonecreate addc.unimore.it 253.185.155.in-addr.arpa ./bin/samba-tool dns add localhost 253.185.155.in-addr.arpa 17 PTR ldap.unimore.it -U francesco sudo ./bin/samba-tool dns add localhost ad.unimore.it pod A 155.185.89.2 -Ufrancesco sudo ./bin/samba-tool dns zonecreate localhost 89.185.155.in-addr.arpa -Ufrancesco sudo ./bin/samba-tool dns add localhost 89.185.155.in-addr.arpa 1 PTR ateneo.ad.unimore.it -Ufrancesco ./bin/samba-tool dns add ateneo.ad.unimore.it ad.unimore.it vic20 A 155.185.89.3 -k yes ./bin/samba-tool dns add ateneo.ad.unimore.it 89.185.155.in-addr.arpa 3 PTR vic20.ad.unimore.it -k yes
Query ldap
Da fare (tenere d'occhio i log in /var/log/auth.log):
sudo apt-get install libsasl2-modules-gssapi-heimdal
ldbsearch -H ldap://addc.unimore.it -U administrator ldbsearch -k yes -H ldap://addc.unimore.it # se uso -k yes (= kerberos) non posso usare lo switch -U
ldapsearch -N -Y GSSAPI -b dc=unimore,dc=it -H ldap://addc.unimore.it 'cn=malvezzi' # -N significa non fare il reverse lookup: è fondamentale
controllare che il nome del server sia quello delle AD, non l'equivalente dns.
Server ssh
Fare login su una macchina linux con le credenziali kerberos di samba4.
Su ateneo.ad:
cd /opt/samba sudo ./bin/samba-tool user create --random-password OMNIBUS$ sudo ./bin/samba-tool spn add host/omnibus.dmz-int.unimo.it OMNIBUS$ sudo ./bin/samba-tool spn list OMNIBUS$ sudo ./bin/samba-tool domain exportkeytab ~/krb5.keytab.omnibus --principal=host/omnibus.dmz-int.unimo.it sudo ./bin/samba-tool domain exportkeytab ~/krb5.keytab.omnibus --principal=OMNIBUS$
Questo crea un spn per il server ssh omnibus.dmz-int.unimo.it; il keytab deve contenere anche OMNIBUS$ se si conta di essere un client nfsv4. Trasferire il file krb5.keytab su server ssh e metterlo in /etc (root:root)
Sul server ssh:
sudo apt-get install heimdal-clients
modificare il file /etc/ssh/sshd_config:
KerberosAuthentication yes GSSAPIAuthentication yes
Sul client ssh:
sudo apt-get install heimdal-clients kinit ssh ...
nel file /etc/ssh/ssh_config l'impostazione:
GSSAPIAuthentication yes
e' gia' corretta in Debian
NFSv4
Montare una share:
sudo mount -t nfs4 -o sec=krb5 kmaster.dmz-int.unimo.it:/floppy /floppy/
apache2
sudo apt-get install libapache2-mod-auth-kerb
su ateneo creare il principal per HTTP/fqdn@REALM:
cd /opt/samba sudo ./bin/samba-tool spn add HTTP/omnibus.dmz-int.unimo.it OMNIBUS$ sudo ./bin/samba-tool domain exportkeytab ~/apache2.keytab --principal=HTTP/omnibus.dmz-int.unimo.it
portare il keytab sul server apache in /etc/apache2, dare la ownership a www-data, poi creare una risorsa protetta tipo:
<Location /kerberos> AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms AD.UNIMORE.IT Krb5KeyTab /etc/apache2/apache2.keytab # require valid-user # tutti gli utenti require malvezzi@AD.UNIMORE.IT # uno o piu' utenti </Location>
Da risolvere
- connessione ldap alle AD in chiaro: non riesco a compilare samba4 con le gnutls
28/11/2013: risolto: c'era bisogno di pkg-config
- aggiunta di schemi a samba4: il comando di ldbmodify aggiunge gli schemi, che non sono recepiti
28/11/2013: risolto: sbagliavo ad aggiungere lo schema allo sam.tdb (lo aggiungevo a sam_tdb).
- msktutil da linux non funziona
2/12/2013: funziona se il dns primario e' 155.185.89.1
- bisogna creare le pagine man dei comandi samba4