In principio era il nulla, poi Dio disse: "Extract Universo.zip"

— Tassemsak

Rispondi al commento

ArchLinux Small Business Server (13) - File Server (6)

http://www.stenoweb.it/files/blog/archlogo.png Ora che finalmente abbiamo avviato Samba, facciamo la join del server al nostro dominio nuovo fiammante, controlliamo che funzioni e creiamo un paio di script bash utili per la manutenzione del sistema

Join al dominio

Per prima cosa dobbiamo unire il nostro server al dominio (che traduzione orrenda: diciamo che dobbiamo fare la join...), con il comando :

sudo net rpc join -S ARCHI -U Administrator

dopo aver digitato la password dovreste vedere il messaggio:
Joined domain MEDE.

In questa fase Samba ha creato l'account workstation per il vostro server nel suo backend LDAP nel formato nomemacchina$. Andiamo a vedere se è vero con il comando getent:
sudo getent passwd

Alla fine dovrei vedere il mio server :
archi$:*:5004:515:Computer:/dev/null:/bin/false

Ottimo. Passiamo oltre.

Funziona ?

Controlliamo subito. Facciamolo con i comandi di Samba, così siamo sicuri che sia lui a rispondere alle nostre richeste:

sudo pdbedit -L

Dovrebbe mostrarmi la lista degli utenti, tipo questa:
Administrator:0:Administrator
guest:5000:guest
commerciale1:5001:commerciale1
tecnico1:5002:tecnico1
archi$:5004:Computer

e ora controlliamo anche le condivisioni :
sudo smbclient -L localhost -U administrator

e dopo la password dovrei vedere una cosa del tipo :
Domain=[MEDE] OS=[Unix] Server=[Samba 3.0.28]

Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (archi PDC (3.0.28))
print$ Disk Printer Drivers
apps Disk Y: - Applicazioni
rootdir Disk Cartella globale, solo per amministrazione e backup
public Disk L: - Cartella Pubblica Utenti
Administrator Disk K: - Cartella privata di administrator, Administrator
Domain=[MEDE] OS=[Unix] Server=[Samba 3.0.28]

Server Comment
--------- -------
ARCHI archi PDC (3.0.28)

Workgroup Master
--------- -------
MEDE ARCHI


Wow! Ce l'abbiamo fatta, il nostro domain controller è pronto ad accogliere le vostre workstation Windows (e Linux off course) tra le sue forti braccia.

purge

Nella puntata precedente abbiamo abilitato il plugin Samba per gestire il cestino del server: ogni utente che cancella i file in realtà li sposta nella cartella .cestino/nomeutente che abbiamo definito. Capirete anche voi che non possiamo lasciarli lì per sempre ma abbiamo bisogno di purgare i cestini di tanto in tanto per mantenere il sistema pulito dalla spazzatura.
Chi ha conosciuto Novell Netware non può non ricordare il comando purge che svolgeva egregiamente questa funzione, purtroppo qui non abbiamo niente di simile, e dobbiamo arrangiarci con bash. Tranquilli, ci ho già pensato io qualche anno fa, niente di eclatante ma svolge la sua funzione in modo preciso. Creiamo il file:

sudo nano /bin/purge

e inseriamoci quanto segue:
#!/bin/bash

  1. purge
  2. Vuota il cestino degli utenti e di sistema
  3. by steno 2005-2007
  1. Controlla i parametri

if [ $# = 0 ]
then
echo "uso: purge {all|}"
exit;
else
if [ $1 = 'all' ]
then
DIR=`ls /home -F | awk '/\/$/ {sub( /\/$/,""); print}'`;
else
DIR=$1;
fi;
fi;

  1. Vuota il cestino privato degli utenti

for user in $DIR; do
if [ -e /home/$user/.cestino ];
then
X="`(cd /home/$user/.cestino ; echo *)`";
if [ ! "$X" = "*" ] ; then
echo "Elimina file dal cestino utente <$user>";
rm /home/$user/.cestino/* -r;
else
echo "Cestino personale utente <$user> vuoto";
fi;
fi;
done;

  1. Vuota il cestino globale di "public"

DIR=`ls /samba/public/.cestino -F | awk '/\/$/ {sub( /\/$/,""); print}'`;

for user in $DIR; do
X="`(cd /samba/public/.cestino/$user ; echo *)`";
if [ ! "$X" = "*" ] ; then
echo "Elimina file dal cestino globale utente <$user>" ;
rm /samba/public/.cestino/$user -R;
else
echo "Cestino globale utente <$user> vuoto";
fi

done;


Come vedete possiamo "purgare" tutto con il parametro all o limitarci ad uno specifico utente. Lo script è poi suddiviso in due parti, la prima si occupa del cestino di ogni singola home/user, la seconda del cestino della share principale public.
Rendiamo eseguibile lo script:
sudo chmod 755 /bin/purge

e creiamo il Cestino globale dando i permessi corretti alla cartella:
sudo mkdir /samba/public/.cestino
sudo chmod 770 /samba/public/.cestino
sudo chgrp "Domain Users" /samba/public/.cestino

Ora basta digitare purge all da shell per avviare le pulizie di primavera :), purge tecnico1 per il cestino del solo utente tecnico1. Prendiamo anche in considerazione la possibilità di schedularlo con crontab per avviarlo automaticamente al "calar della notte".

setchown

Questo script si usa meno del precedente, ma in alcuni casi è molto utile. Cosa fà lo script ? Semplice, corregge i permessi su file e directory delle home degli utenti. A volte magari, come amministratore, si ripristinano, copiano o spostano dei file da una cartella di un utente ad un altro e poi dobbiamo manualmente lavorare di chown e chmod per sistemare il tutto. Lo script setchown lo fa da solo spazzolando tutte le home degli utenti (con i parametro all) correggendo permessi e proprietà. Creiamo il file:

sudo nano /bin/setchown

e inseriamoci quanto segue:
#!/bin/bash

  1. setchown
  2. Setta il proprietario della home dir e dei file allo user
  3. escludi dal processo le home listate nella var "exclude"

exclude="httpd ftp amavis";

  1. Controlla i parametri

if [ $# = 0 ]
then
echo "uso: setchown {all|}"
exit;
else
if [ $1 = 'all' ]
then
DIR=`ls /home -F | awk '/\/$/ {sub( /\/$/,""); print}'`;
else
DIR=$1;
fi;
fi;

for user in $DIR; do
mask=${exclude#*$user};
if [ "$mask" = "$exclude" ]
then
chown $user /home/$user -R
chmod 700 /home/$user
echo "Permessi corretti in /home/$user";
fi
done


Anche qui vediamo che possiamo digitare setchown all per tutte le home oppure setchown tecnico1 per la singola home.
Non dimentichiamoci di rendere eseguibile lo script:
sudo chmod 755 /bin/setchown

Tenete presente anche la variabile $exclude nello script, in cui dobbiamo inserire la lista delle cartelle in home da non processare. Ho messo "httpd" e "ftp" che Archlinux ha la malaugurata idea di creare in home (ma /var faceva schifo ?).

Firewall

Ora possiamo riabilitare il firewall. Prima modifichiamo il file rules:

sudo nano /etc/shorewall/rules

e aggiungiamo le nuove regole:
SMB/ACCEPT $FW loc
SMB/ACCEPT loc $FW

Per riavviare il servizio usiamo il comando shorewall, così vediamo se abbiamo commesso sbagli:

sudo shorewall start

Abbiamo finito ?

In teoria sì, in pratica no. Per domini semplici da pochi utenti potreste essere già ok, ma la realtà è ben diversa dalla teoria e nel prossimo post scoprirete uno dei perché con un semplice esempio.

A presto.

Rispondi

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.