La domanda
Hai una directory del disco condivisa tra i client Linux e Microsoft Windows. Più utenti devono accedere a questa condivisione di directory, ma quando i file vengono creati o modificati dai client Linux vengono applicate le autorizzazioni dei file Linux rendendo difficile o impossibile per i client Windows accedere a questi file.
Vorresti condividere queste risorse del disco in modo omogeneo.
La soluzione
A seconda della tua strategia di manutenzione generale, potrebbe essere utilizzata una delle seguenti tecniche.
1. Forzare la proprietà dell'utente o del gruppo
Nel file /etc/samba/smb.conf puoi usare la direttiva:
force user = [user] force group = [group]
Ciò sovrascriverà i normali attributi di proprietà del file per l'accesso a file o directory. Per impostazione predefinita, vengono utilizzate le credenziali utente effettive. Utilizzando una (o entrambe) delle direttive precedenti, la credenziale associata può essere forzata a un valore specifico. Pertanto, tutti gli accessi ai file verranno eseguiti come se il processo di accesso fosse in esecuzione con le credenziali specificate.
Se la direttiva assume la forma:
force group = +[group]
quindi solo gli utenti Linux che sono già membri di [gruppo] avranno il loro gruppo principale cambiato in [gruppo] per la durata dell'accesso. Gli utenti Linux che non sono già membri del [gruppo] non sono interessati da questa direttiva.
2. Usa le autorizzazioni di accesso alla directory
Considera il director /tmp:è uno scratchpad che consente a più utenti di creare, modificare o eliminare file. Per impedire all'utente A di eliminare un file di proprietà dell'utente B, nella directory è impostato lo sticky bit:
$ ls -ld /tmp drwxrwxrwt 14 root root 360 Mar 19 08:25 /tmp
Nota la t flag dei permessi:indica il “sticky ” è impostato per la directory. Qualsiasi utente può creare file in questa directory, ma solo l'utente proprietario può eliminare la voce; senza il bit appiccicoso chiunque potrebbe eliminare qualsiasi file poiché la directory ha i permessi di lettura/scrittura/esecuzione del mondo.
1. Un modo per aggirare questo problema è fare in modo che la directory SAMBA condivisa sia di proprietà dell'utente SAMBA:
# /bin/mkdir [/path/to/SAMBA/share] # /bin/chown -R [user]:[group] -R [/path/to/SAMBA/share]
2. Quindi, attiva il bit setgid per la directory per forzare le credenziali di gruppo di qualsiasi voce di directory in modo che corrispondano alle credenziali di gruppo di quella directory:
# /bin/chmod g+s [/path/to/SAMBA/share] # /bin/ls -ld [/path/to/SAMBA/share] drwxrws--- 1 [user] [group] 0 Mar 19 09:07 [/path/to/SAMBA/share]
3. Ora crea un file all'interno di [/path/to/SAMBA/share] come utente root. Il file sarà di proprietà di root ma il suo gruppo sarà il gruppo [gruppo]:
# /bin/mkdir /example # /bin/chown root:oracle /example # /bin/chmod g+s /example # /bin/ls -ld /example drwxr-sr-x 2 root oracle 4096 Mar 19 10:03 /example
4. Infine, crea un file in /example come utente root:
# id uid=0(root) gid=0(root) groups=0(root) # touch /example/file # ls -ld /example /example/file drwxrws--- 2 root oracle 4096 Mar 19 10:09 /example -rw-r--r-- 1 root oracle 0 Mar 19 10:09 /example/file
Si noti che sebbene le credenziali utilizzate per creare il file fossero root:root, le credenziali di accesso salvate per il file erano root:oracle; la proprietà del gruppo è stata impostata automaticamente sul gruppo della directory.
Nota
Il metodo setgid descritto sopra funziona anche se viene utilizzato il bit setuid. Nel passaggio chmod, fai invece questo:
# chmod u+s [/path/to/SAMBA/share]
Puoi anche ignorare sia la proprietà del file che l'appartenenza al gruppo in questo modo:
# chmod u+s,g+s [/path/to/SAMBA/share]
Sebbene sia una capacità affascinante, potrebbe avere un'utilità limitata.
3. Usa gli elenchi di controllo di accesso (ACL)
Gli elenchi di controllo di accesso, o ACL, sono funzionalità del file system in cui un set aggiuntivo di attributi di file viene archiviato in aggiunta alle normali autorizzazioni di proprietario/gruppo/altre autorizzazioni di file Linux. L'utilizzo di ACL consente un controllo molto preciso sul tipo esatto di accesso da concedere a un determinato tipo di accesso.
L'implementazione del file system SAMBA su Linux supporta gli elenchi di controllo di accesso, ma la funzione deve essere abilitata in modo esplicito tramite l'attributo acl mount. È possibile abilitare questa funzione in modo dinamico, come:
# mount -o remount,acl [/path/to/samba/mount/point]
Ad esempio, supponiamo di avere una condivisione /samba/office/ in cui permettiamo a qualsiasi utente di scrivere un file, ma le credenziali del gruppo dovrebbero essere forzate a office. Potremmo usare il comando:
# mount -o remount,acl /group # setfacl -R -d -m u::rwx,g:office:rwx,o::r-x /samba/office
# /bin/getfacl /samba/office # file: samba/office/ # owner: root # group: office user::rwx group::rwx other::rwx default:user::rwx default:group:office:rwx default:mask::rwx default:other::r-x
Poiché stiamo stabilendo questo ACL per la directory, si applica ai suoi file e sottodirectory contenuti.