Newsgroup: it.comp.os.linux.sys
Titolo: Samba : Gruppi locali e utenti Active Directory

Ciao a tutti,
Ho configurato SAMBA afifnchè effettui il join con la rete ADs del
posto in cui lavoro e tutto funziona a meraviglia, nel senso che con
"getent passwd" vedo tutti gli utenti locali e quelli della rete ADS.
Sono inoltre in grado di loggarmi all'interno della mia macchina via
ssh utilizzando il modulo pam pam_winbind module ed ho configurato
inoltre anche alcune directories in samba che sono di proprietà di
utenti ADs e riesco ad accedere anche a queste.
Quel che voglio fare ora è di garantire i permessi di scrittura in una
directory locale ad un gruppo locale (quindi con mask 770) composto
però da ADs users.
La directory è così inserita nel file smb.conf :
[TEST]
 comment = TEST
 path = /samba/TEST
 browseable = No
 public = No
 read only = Yes
 write list = @ADGROUP
ho creato il gruppo :
#groupadd ADGROUP
a questo punto è impossibile modificare l'utente ADs con usermod per
includerlo in nel gruppo locale in questo modo :
# usermod -G ADGROUP MYDOMAIN+myuser0
usermod: MYDOMAIN+myuser0 not found in /etc/passwd
E questo mi è quasi chiaro, poichè se usermod cerca in solo nel file
/etc/passwd non troverà nulla. Ho quindi aggiunto a mano l'entry
all'interno del file /etc/group :
# tail -1 /etc/group
ADGROUP:x:1004:MYDOMAIN+myuser0,MYDOMAIN+myuser1,MYDOMAIN+myuser2
Questo sembra funzionare, in quanto se lancio questo comando :
# groups MYDOMAIN+myuser0
MYDOMAIN+myuser0 : MYDOMAIN+group1 ADGROUP
Ricevo quel che mi aspetto di ricevere.
I permessi sulla directory sono come detto questi :
drwxrwx---   2 root ADGROUP 4096 May 26 11:48 TEST
Ma una volta restartato samba, non sono in grado di accedere a questa
directory da una macchina remota con l'utente ADs.
Il problema a cosa può essere dovuto ? E' una buona soluzione fare
quello che ho fatto visto che non ho accesso al server AD oppure
esistono vie più semplici/intelligenti ?
Ciao e grazie,
--
RaSca
rasc...@tiscali.it

 perň da ADs users.
Basta un semplice chmod/chown, per cose piů evolute usa setfacl (fs 
permettendo).

 permettendo).
Ehm...Non credo di capire...
Ti faccio un esempio : Ho 3 utenti ADs che non sono associati in nessun
gruppo ADs.
Ora vorrei che di questi 3 utenti uno potesse scrivere, gli altri due
leggere e gli estranei non vedere nulla.
Considera che ho creato come ho detto un gruppo locale al quale
appartengono i 3 utenti.
Sono daccordo con te che con chmod dovrei settare 750 nei permessi ed
in samba dare read list al gruppo e write solo all'utente, ma il punto
è che per l'utente (remoto) va, ma per il gruppo (che è locale) no !
Se mi sono spiegato bene dovresti aver capito il mio problema.
Cosa ne pensi ?
--
RaSca
rasc...@tiscali.it

 Cosa ne pensi ?
che potresti fare come suggerito.

 che potresti fare come suggerito.
Proverò a leggermi il man di setfacl ed a vedere di cavarne qualcosa.
Ciao !
--
RaSca
rasc...@tiscali.it

 legate...
Allora usa la clausola valid users nella share samba.

Gordon Freeman ha scritto:

Alla fine ho optato per le ACL, ma ho esagerato :-) Nel senso che mi
sono creato uno script che legge il file di configurazione di SAMBA e
costruisce le ACL sulle directory dichiarate in esso, in questo modo ho
da gestire un file solo (e cioè smb.conf). Ogni volta che aggiorno
questo e restarto samba è necessario che lanci anche lo script
riportato qui sotto.
Ovvio che è ben lungi dall'essere perfetto, ma fa quello che chiedo e
tanto basta e cioè leggere smb.conf ricavare i path e gli utenti e
settare le acl di conseguenza. E' da notare che i "valid users" vengono
abilitati in scrittura, mentre se un utente deve avere l'accesso in
sola lettura va indicato anche nella read list :
#!/bin/bash
# RaSca (
rasc...@tiscali.it
) - 2006/05/30 :
# Questo script è direttamente collegato al file di configurazione
# di SAMBA /etc/samba/smb.conf dal quale ricava i dati per
# effettuare il riassegnamento dei permessi attraverso le acl.
SMBCONF=/etc/samba/smb.conf
setfacl=/usr/bin/setfacl
aree="`grep -n "\[" $SMBCONF | grep -v "\[global\]" | cut -d: -f1` `cat
$SMBCONF | wc -l`"
j=0
for i in $aree
do
 if [ $j -ne 0 ]
  then
   d=`expr $i - $j`
   w=`expr $i - 1`
   area=`head -$w $SMBCONF | tail -$d`
   nome_area=`head -$w $SMBCONF | tail -$d | grep "\[" | awk '{print
$1}'`
   path=`head -$w $SMBCONF | tail -$d | grep "path" | awk -F"=" '{print
$2}'`
   valid_users=`head -$w $SMBCONF | tail -$d | grep "valid users" | awk
-F"=" '{print $2}'`
   read_list=`head -$w $SMBCONF | tail -$d | grep "read list" | awk
-F"=" '{print $2}'`
   echo "Processo area $nome_area"
   # Azzero le acl sul path ricavato
   echo -n "Azzero le precedenti acl in $path ... "
   $setfacl -b $path
   if [ $? -eq 0 ]
    then
     echo "Ok."
     # Processo ciascuno degli utenti elencati
     for user in `echo $valid_users | sed 's/,//g'`
     do
      echo -n "Setto i permessi di lettura/scrittura per l'utente $user
su $path ..."
      $setfacl -m user:"$user":rwx $path
      if [ $? -eq 0 ]
       then
        echo "Ok."
       else
        echo
        echo "Errore sul comando : $setfacl -m user:\"$user\":rwx
$path"
      fi
     done
     # Processo ciascuno degli utenti elencati
     for user in `echo $read_list | sed 's/,//g'`
     do
      echo -n "Setto i permessi di lettura per l'utente $user su $path
..."
      $setfacl -m user:"$user":r-x $path
      if [ $? -eq 0 ]
       then
        echo "Ok."
       else
        echo
        echo "Errore sul comando : $setfacl -m user:\"$user\":r-x
$path"
      fi
     done
    else
     echo "Errore !"
   fi
   echo "******************"
 fi
 j=$i
done
exit 0
<EOF>
Sperando che a qualcuno possa tornare utile...


> Alla fine ho optato per le ACL, ma ho esagerato :-)
Non ho letto molto attentamente tutto ma credo che una possibile 
miglioria possa essere fatta: usare smbcacls per leggere/settare ACL 
credo sia molto più elegante.


Da quel che ho capito smbcacls controlla solo le NT Access Control
Lists mentre a me interessa qualcosa sul filesystem stesso... Se avessi
voluto il controllo solo a livello di samba sarebbero state sufficienti
le opzioni di smb.conf (come hai detto tu i valid users etc.)
Il problema è che le utenze ADs possono loggarsi nella mia macchina
via ssh, quindi si autenticano con winbind e poi sono sul filesystem,
quindi in questo senso bypasserebbero samba e non posso controllarne i
permessi sul filesystem locale...
Poi magari mi sfugge qualche tipo di utilizzo di smbcacl... Sicuramente
alla fine di questa storia mi sarà chiaro il concetto di acl...
Ciao e grazie ancora,
--
RaSca
rasc...@tiscali.it

 Lists mentre a me interessa qualcosa sul filesystem stesso...
Certo, per quello c'è sempre setfacl - smbcacls è per rendere più 
utile/bello lo script.
In pratica leggi i permessi della share con smbcacls e poi setti i 
permessi con setfacl al volo (molto più comodo e pulito che tritare un 
file).