I computer sono inutili, possono dare solo risposte.

— Pablo Picasso

ArchLinux Small Business Server (12) - File Server (5)

http://www.stenoweb.it/files/blog/archlogo.png E' giunta l' ora del servizio Samba finalmente. Configuriamolo a dovere e avviamo il servizio. Vediamo anche una (breve) spiegazione dei parametri principali applicati al nostro smb.conf

Parametri globali

Andiamo ad editare il file di configurazione di Samba:

sudo nano /etc/samba/smb.conf

e vediamo cosa scriverci ...

Nella sezione [global] abbiamo i parametri generali del server, soffermiamoci solo su quelli (per me) significativi. Alla fine c'e' il file completo per un comodo copia/incolla. Per il resto rimando alla guida.
Il nome del dominio:

workgroup = MEDE

Il nome del server :
netbios name = ARCHI

Samba rimane in ascolto solo sulle interfacce specificate, la eth0 che è rivolta all'esterno verso internet naturalmente non viene servita. O vogliamo dare servizi di file server al mondo ? :)
interfaces = eth1, lo
bind interfaces only = Yes

Diciamo a Samba che il repository di utenti, gruppi e password è il server LDAP specificato.
passdb backend = ldapsam:ldap://archi.mede.it

Ordine con cui vengono risolti i nomi delle workstation. Broadcast per ultimo off course.
name resolve order = wins host dns bcast

Script richiamati da Samba quando da Windows tento le operazioni citate. Questo mi permette di usare tools windows per gestire utenti e gruppi, oltre che ad eseguire la join al dominio.
add user script = /bin/netuseradd -a -m '%u'
delete user script = /bin/netuserdel '%u'
add group script = /bin/netgroupadd -a -p '%g'
delete group script = /bin/netgroupdel '%g'
add user to group script = /bin/netgroupmod -m '%u' '%g'
delete user from group script = /bin/netgroupmod -x '%u' '%g'
set primary group script = /bin/netusermod -g '%g' '%u'
add machine script = /bin/netuseradd -w '%u'

Script di login eseguiti dagli utenti quando si collegano. %U viene trasformata nel nome utente. Ad esempio l' utente tecnico1 eseguirà (se esiste) lo script tecnico1.bat che si trova in netlogon.
logon script = %U.bat

Non voglio i profili roaming, quindi metto a null questi parametri. Attenzione che i parametri userSmbHome e userProfile specificati in /etc/smbldap-tools/smbldap.conf hanno la precedenza su questi !
logon path =
logon home =

Il mio server è un domain controller :)
domain logons = Yes

Eleggiamo il nostro server ad autorità maxima, facciamolo diventare master browser per il segmento della nostra rete.
domain master = yes
preferred master = Yes
os level = 65

Il nostro server è anche server wins
wins support = Yes

Parametri dell'albero LDAP a cui Samba si collega. In questo modo si indica a Samba dove trovare utenti, gruppi, computer e il nome utente da utilizzare per connettersi (cn=Manager). Ricordiamo che la password la abbiamo memorizzata con il comando smbpasswd -w nell'articolo precedente.
ldap suffix = dc=mede,dc=it
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=Manager,dc=mede,dc=it
idmap backend = ldap:ldap://archi.mede.it
idmap uid = 10000-20000
idmap gid = 10000-20000
ldap passwd sync = Yes
ldap ssl = no

Il tipo di autenticazione da usare (IMPORTANTISSIMO!).
security = user

Ho specificato dei parametri aggiuntivi che vedete alla fine del post, lascio a voi il compito di interpretarli ;).
Ora passiamo alla sezione condivisioni.

Condivisioni

Abbiamo visto nell' articolo precedente quali condivisioni andiamo a realizzare, vediamo come sono state tradotte sul file di configurazione. Non le espongo tutte, ma solo quelle che hanno qualche parametro significativo da spiegare. La versione completa del file smb.conf la trovate alla fine del post.

public

Nome e percorso condivisione

comment = "L: - Cartella Pubblica Utenti"
path = /samba/public

Scrivibile:
writeable = yes

La vedo nel browsing della rete:
browseable = Yes

Nascondi i file e le cartelle che l'utente non può leggere. Questo è utile, in questa condivisione un utente vedrà solo quello che gli serve anzichè chiedersi cosa ci sia "dentro" una cartella che non riesce ad aprire... :)
hide unreadable = Yes

Questa serie di parametri corrispondono ad una serie di tentativi per fare in modo che questa condivisione funzioni a dovere. Ora non me la sento di cambiare qualcosa. Chi lascia la vecchia strada ...
directory mask = 0775
create mask = 0775
force create mode = 0775
force directory mode = 6775
security mask = 0777
force security mode = 0
directory security mask = 0777
force directory security mode = 0

I vfs objects sono un utile "plugin" di Samba. In questo caso usiamo l'oggetto recycle per realizzare un cestino di rete. I file eliminati non andranno eliminati immediatamente ma finiranno in una cartella nascosta .cestino/nomeutente. Poi faremo uno script di purge per vuotare i cestini ogni tanto. I parametri aggiuntivi servono per dire a samba di non salvare i file temporanei e di backup e di non applicare il versioning ai file di office (creano problemi con il salvataggio automatico di quest'ultimo).
vfs objects = recycle
recycle:repository = .cestino/%U
recycle:keeptree = yes
recycle:touch = yes
recycle:versions= yes
recycle:exclude = *.tmp *.bak ~$*
recycle:exclude_dir = /tmp /temp /cache
recycle:noversions = *.doc *.xls *.ppt

netlogon

Questa condivisione di "servizio" è fondamentale per la gestione degli script di logon degli utenti.
Intanto la nascondiamo dal browsing della rete.
browseable = No

Nel momento in cui l'utente accede alla condivisione (e tutti gli utenti di un dominio lo fanno) viene eseguito /etc/samba/logon.pl a cui vengono passati dei parametri tipo il nome utente che ha richiamato lo script, il gruppo, l'orario ecc.. Cosa fà questo programmino ? Semplice, crea lo script di logon dell'utente "al volo" secondo le regole definite in logon.pl. Ad esempio viene creato tecnico1.bat per l'utente tecnico1. Potrei omettere questo parametro e creare a mano lo script, ma così è molto più comodo e vedremo perché.
root preexec = /etc/samba/logon.pl "%U" "%G" "%L" "%T" "%m" "%a"

E ora vediamo come è fatto questo logon.pl.
sudo nano /etc/samba/logon.pl

e impostiamolo così:
 #!/usr/bin/perl
#

open LOG, ">>/var/log/samba/netlogon.log";
print LOG "$ARGV[3] - Utente $ARGV[0] collegato a $ARGV[2]\n";
close LOG;

  1. Elenco utenti per share

$APPS ="-tecnico1-tecnico2-";
$NOLOGON ="-administrator-";
$DELMAP ="-winnt-win2k-win2k3-winxp-";
$ADMIN ="administrator";

  1. Inizio generazione script

open LOGON, ">/samba/netlogon/$ARGV[0].bat";
print LOGON "\@ECHO OFF\r\n";
print LOGON "ECHO ARCHI logon script\r\n";
print LOGON "ECHO.\r\n";

  1. Sincronizza orario con il server

print LOGON "NET TIME \\\\ARCHI /SET /YES\r\n";

  1. Se piattaforma PC in lista $DELMAP cancella i vecchi mappaggi

if (index($DELMAP,"-".lc($ARGV[5])."-") >=0)
{
print LOGON "NET USE * /DEL /YES\r\n";
}

  1. Esci se utente in lista $NOLOGON altrimenti applica i mappaggi comuni

if (index($NOLOGON,"-".lc($ARGV[0])."-") == -1)
{
# Disco L: (PUBLIC)
print LOGON "NET USE L: \\\\ARCHI\\public /YES\r\n";
# Disco K: (HOME)
print LOGON "NET USE K: \\\\ARCHI\\$ARGV[0] /YES\r\n";

# Disco X: (APPS)
if (index($APPS,"-".lc($ARGV[0])."-") >=0)
{
print LOGON "NET USE X: \\\\ARCHI\\apps /YES\r\n";
}
}

  1. Chiudi il file.
close LOGON;

Possiamo vedere che condizioniamo la creazione dello script in base a delle variabili in testa. Ad esempio solo la lista degli utenti specificata in $APPS (tecnico1 e tecnico2 separati con "-") avranno la mappatura X:, e gli utenti listati in $NOLOGON (administrator) non avranno alcuno script. Tutto chiaro ?
Questo script può essere modificato ed esteso con semplicità seguendo questo schema di esempio, e ha il pregio di semplificare la gestione degli script di logon. Voglio che anche l'utente "commerciale1" mappi la X: per \\archi\apps ? Basta aggiungerlo nella lista $APPS e la prossima volta che si collega al server avrà il suo script aggiornato "al volo". In più ho anche un file di log in /var/log/samba/netlogon.log che mi informa dell'orario di collegamento degli utenti.

Wow. A volte le cose semplici sono le più importanti. Come compito a casa mi fate lo script che scrive nel log l'orario in cui si scollegano usando il parametro root postexec. ;)

Tengo a precisare che i parametri root preexec (e root postexec che viene eseguito allo "scollegamento") non sono una prerogativa di netlogon. Possono essere usati con qualunque condivisione per eseguire "qualcosa" al momento del collegamento (e/o dello scollegamento).

Ricordiamoci di rendere eseguibile lo script perl :

sudo chmod 775 /etc/samba/logon.pl

smb.conf

E dulcis in fundo ecco il file di configurazione completo da spulciare e studiare. Posso, ad esempio, notare che ho gestito il cestino anche sulle home e autorizzato solo i membri del gruppo "Domain Admins" ad accedere alla condivisione di "servizio" rootdir.

 [global]
workgroup = MEDE
netbios name = ARCHI
server string = %h PDC (%v)
interfaces = eth1, lo
bind interfaces only = Yes
passdb backend = ldapsam:ldap://archi.mede.it
enable privileges = yes
log level = 0
log file = /var/log/samba/%m
max log size = 50
smb ports = 139 445
hide dot files = yes
name resolve order = wins host dns bcast
time server = Yes
guest account = guest
show add printer wizard = No
add user script = /bin/netuseradd -a -m '%u'
delete user script = /bin/netuserdel '%u'
add group script = /bin/netgroupadd -a -p '%g'
delete group script = /bin/netgroupdel '%g'
add user to group script = /bin/netgroupmod -m '%u' '%g'
delete user from group script = /bin/netgroupmod -x '%u' '%g'
# Disabilitare quando a fare il join al dominio è un Windows NT
set primary group script = /bin/netusermod -g '%g' '%u'
add machine script = /bin/netuseradd -w '%u'
logon script = %U.bat
# Profili Roaming
#logon path = \\%L\profiles\%U
logon path =
logon home =
logon drive = K:
domain logons = Yes
domain master = yes
preferred master = Yes
os level = 65
wins support = Yes
# LDAP
ldap suffix = dc=mede,dc=it
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=Manager,dc=mede,dc=it
idmap backend = ldap:ldap://archi.mede.it
idmap uid = 10000-20000
idmap gid = 10000-20000
ldap passwd sync = Yes
#ldap ssl = start tls
ldap ssl = no
map acl inherit = Yes
#printing = cups
lock directory = /var/lock/samba
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
security = user
template shell = /bin/false

[public]
comment = "L: - Cartella Pubblica Utenti"
path = /samba/public
writeable = yes
browseable = Yes
hide unreadable = Yes
directory mask = 0775
create mask = 0775
force create mode = 0775
force directory mode = 6775
security mask = 0777
force security mode = 0
directory security mask = 0777
force directory security mode = 0
#inherit acls = yes
#inherit permissions = yes
vfs objects = recycle
recycle:repository = .cestino/%U
recycle:keeptree = yes
recycle:touch = yes
recycle:versions= yes
recycle:exclude = *.tmp *.bak ~$*
recycle:exclude_dir = /tmp /temp /cache
recycle:noversions = *.doc *.xls *.ppt

[homes]
comment = "K: - Cartella privata di %U, %u"
writeable = yes
create mask = 0700
directory mask = 0775
browseable = No
force user = %U
vfs objects = recycle
recycle:repository = .cestino
recycle:keeptree = yes
recycle:touch = yes
recycle:versions= yes
recycle:exclude = *.tmp *.bak ~$*
recycle:exclude_dir = /tmp /temp /cache
recycle:noversions = *.doc *.xls *.ppte_dir = /tmp /temp /cache
recycle:noversions = *.doc *.xls *.ppt

[rootdir]
comment = Cartella globale, solo per amministrazione e backup
path = /samba
writeable = yes
browseable = yes
directory mask = 0770
create mask = 0775
force create mode = 0775
force directory mode = 6775
security mask = 0777
force security mode = 0
directory security mask = 0777
admin users = Administrator
valid users = "@Domain Admins"
force create mode = 0644
force directory mode = 6775

[apps]
comment = "Y: - Applicazioni"
path = /samba/apps
writeable = yes
browseable = Yes
directory mask = 0770
create mask = 0775
security mask = 0777
force security mode = 0
directory security mask = 0777
force directory security mode = 0
hide unreadable = Yes
force create mode = 0775
force directory mode = 6775
[netlogon]
comment = Network Logon Service
path = /samba/netlogon
guest ok = Yes
locking = No
browseable = No
root preexec = /etc/samba/logon.pl "%U" "%G" "%L" "%T" "%m" "%a"
#root postexec = /etc/samba/logoff.pl "%U" "%G" "%L" "%T"
[profiles]
comment = Profile Share
path = /samba/profiles
writeable = yes
profile acls = Yes
browsable = No

Avvio del servizio

Quasi me ne dimenticavo :)

sudo /etc/rc.d/samba start

e mettiamolo nella lista dei nostri deamons:
DAEMONS=(... ... ... ... ... samba ... ... ...)

Alla prossima con due utili script di "manutenzione" e le (quasi) conclusioni della lunga e impegnativa sezione "File Server".

Признателен за убийственное изложение.
Вчитал ценную мы. Как написано выше, что продвинуться уже завтра невозможно?

Неприятно поражен.

After all I've a specific plan in mind and I have to
speak to my new internet hosting company to see how finest to
realize it.

Благодарю за нестандартное изложение.
Воткнул не по детски в безценную мы.
Как видно из текста, что продвинуться в этом деле невозможно?
Озадачен.

This program is actually for the folks which realize the earnings potential for the Internet,
and they are ready to LEARN the ways that they can make money online and, and in addition find out how
Youtube can sky-rocket their particular progress 100% free, & most significantly, the individuals thatn't afraid of a little WORK!

Ola un mio amiϲo mi ha twittato lɑ uurl dii queѕto blog e ѕono passаta
a vedere se ѕuⅼ serio merita. Mi piace ampiаmente. Subito aggiunto tra i
preferiti. Magnifico blog e templaate magnifico!!!

Ola un mio ɑmico mi ha inviato l'indiriᴢzo di questo sito
e sono passato a vedere se effettivamente merita.
Mi piace enormemente. Subito mеsso tra i preferiti. Bellissimo sito ᥱ tempⅼate spettacoloso!!!

Ѕоno dieci giorni che naviǥo e ԛuesto sito
è lla sola cosa apprеzzabile cche trovo. Veramentᥱ apprezzabilе.
Se tutte le persone che creano post badasssero a produrre materiale convincente come il tuo la rete ѕarebbe ceгtɑmente pіù facile da viѕitare.
Ti ringrazio!!!

Sono una settimana chᥱ navigo e questo post è la sola cosa convincente che leggo.
Effettіνamentе convincente. Sе tutte le persone
che creano siti web si preoccupasseгo di offrire materiale appгezzabile come il tuo la гete saгebbe sicuramente molto più piacᥱvolᥱ da leggere.
Ti ringrazio!!!

The other day, while I was at work, my sister stole my iPad
and tested to see if it can survive a 30 foot drop,
just so she can be a youtube sensation. My apple ipad
is now broken and she has 83 views. I know this is entirely off topic but I had to share it with someone!

Sono una settimana che ceгco е qusto post è lla sola
cosa convincente che vedo. Proρrio convincente. Se tutte ⅼe perѕone che creano
blog facеssereo attenzione di offrire materiale apprezzabile
come questo la rete sarebbе certamentе molto
più facile dа leggere. Grazie!

è da tгe oгe che cerco e il tuo sіto è la sola cosa brillante
che ho lеtto. Realmente interessante. Se tutte le persone chee creano pagine web si preoccupassero
di offrire mаterialе cⲟnvincente come questo il web ѕarebbe di sicurⲟ molto più utile.
Grazie!!

Thanks for finally talking about >Reply to comment | Il blog di steno

Sono cіnque giorni chhe navugo e il tuo articolⲟ è la sola cosa brillante сhe vedo.
Davveгo affascinante. Se tutte lе persone che crеano contenuti si preoccupasero di produrre materiale cⲟnvincеnte come quᥱsto il web sarebbe
certamente più fruibile. Grazie