it-swarm.it

Come fai in modo che samba segua il collegamento simbolico al di fuori del percorso condiviso

Questo è Ubuntu server 10.04 64 e samba 3.4.7.

Ho una directory condivisa /home/mit/share e un altro /home/temp che collego a quello condiviso:

ln -s /home/temp /home/mit/share/temp

Ma su Windows, dopo aver usato internet, non riesco ad aprire S:/temp, ma su Linux è possibile accedere a /home/mit/share/temp come previsto.

Funziona se collego le directory all'interno di /home/mit/share/temp, quindi immagino che samba stia limitando il salto con un link esterno/superiore alla directory condivisa.

EDIT:

Vedi anche questa domanda intitolata buntu + ultima versione di samba, i collegamenti simbolici non funzionano più sulla condivisione montata in Windows .

Sembra meglio mettere unix extensions = no nella sezione globale e follow symlinks = yes e wide links = yes solo nella sezione condivisioni, dove ne hai davvero bisogno.

Il unix extension flag deve risiedere nella sezione globale e non nelle singole sezioni delle condivisioni. Ma per motivi di sicurezza è meglio usare le altre opzioni solo dove ne hai bisogno e non a livello globale.

65
mit

Modifica smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

Nota: se stai usando una versione più recente di samba, potrebbe invece funzionare per te quanto segue:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

documentazione su follow symlinks e wide links flags: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1

102
Mahesh

In alternativa alle altre risposte, per mantenere abilitate le estensioni unix, è possibile utilizzare:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes
11
user1182474

Saluti, ho provato a metterlo nella configurazione per correggere i collegamenti simbolici per Windows per la mia configurazione, ma non sono sicuro che influenzerà il client Windows, altrimenti seguirà i collegamenti simbolici quando mi collegherò a questa casella.

[global]                                                                        
unix extensions = no
11
Qiqi

Per consentire ai client Samba di seguire i collegamenti simbolici al di fuori del percorso condiviso, tutto ciò che serve nella configurazione di Samba è:

[global]
allow insecure wide links = yes
unix extensions = no

[myShare]
wide links = yes

(oltre alle definizioni condivise da Samba, ovviamente). Questo è, teoricamente, sufficiente per i client * nix.

NB: la direttiva "segui link simbolici" non è necessaria in quanto l'impostazione predefinita è "sì"

Per quanto riguarda i client Windows, manca ancora 1 impostazione per consentire loro di seguire tali collegamenti. Fare così :

  1. aprire una shell di Windows con privilegi di amministratore
  2. correre :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. riavviare per ricaricare le impostazioni

NB: lo stesso risultato può essere ottenuto modificando il registro di Windows. Vedi link sotto

fonti:

4
Httqm

Potrebbe essere necessario indirizzare più del semplice file di configurazione di Samba se si esegue AppArmor.

Hai bisogno delle seguenti direttive nel tuo smb.conf:

follow symlinks = yes
wide links = yes
unix extensions = no
# No need for "allow insecure wide links" unless you want "unix extensions = yes"

Ma AppArmor blocca l'accesso a parti del file system in base alla propria semantica del set di regole. Quindi, se il tuo collegamento simbolico all'interno di Samba indica una posizione che AppArmor bloccherebbe, Samba negherebbe l'accesso.

Sul mio sistema, Samba aggiorna i profili AppArmor all'avvio/arresto del servizio, in modo da poter modificare un profilo AppArmor, ma rischio Samba o un altro programma che lo sovrascrive. Invece, ho deciso di creare una condivisione inaccessibile in Samba facendo riferimento alla posizione che conteneva la destinazione del link simbolico a cui volevo accedere (sempre in smb.conf):

# The following is a hack for AppArmor to allow the path
[share1 for AppArmor] # Or whichever name you choose
    browseable = no
    path = /home # Point to directory or parent directory of the location to access
    read only = yes
    guest ok = no
    valid users = none
0
palswim