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


61

Questo è Ubuntu server 10.04 64 e samba 3.4.7.

Ho una directory condivisa /home/mit/sharee un'altra /home/tempche collego a quella condivisa:

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 /home/mit/share/tempcome previsto.

Funziona se collego le directory all'interno /home/mit/share/temp, quindi immagino che samba si limiti a saltare con un link esterno / sopra la directory condivisa.

MODIFICARE:

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

Sembra meglio metterlo unix extensions = nonella sezione globale e follow symlinks = yese wide links = yessolo nella sezione condivisioni, dove ne hai davvero bisogno.

La unix extensionbandiera deve vivere nella sezione globale e non nelle singole sezioni di azioni. Ma per motivi di sicurezza è meglio usare le altre opzioni solo dove ne hai bisogno e non a livello globale.


Puoi provare un hardlink invece di un symlink?
Falmarri,

Risposte:


92

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 follow symlinkse wide linksflag: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1


Vedi anche la spiegazione alla fine della domanda sopra perché questa è una buona soluzione.
mit

Nel caso, qualcun altro lotta con tutti quei commenti che offuscano questo file piuttosto breve: copia su un backup e ricreare filtrato: 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Frank Nocke,

non [share]significa [<share_name>]?
Necktwi,

@neckTwi - È quello che ho ipotizzato, e ha funzionato per me.
Geoff,

@Geoff Non ha funzionato per me! passato asshfs
Necktwi

11

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

[global]                                                                        
unix extensions = no

La risposta di Qiqi concorda con questa: superuser.com/questions/128716/…
Janus

Sì, questo risolve definitivamente il problema nel mio ambiente.
TML,

10

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

non [share]significa [<share_name>]?
Necktwi,

Sì, può essere una qualsiasi sezione smb.conf che "descrive una risorsa condivisa (nota come" condivisione ")" (citata dalla documentazione). Potrebbe anche essere in una sezione speciale [homes], dove lo uso. Vedere la documentazione per i dettagli.
user1182474

4

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 i link sotto

fonti:


0

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

Hai bisogno delle seguenti direttive nella tua 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 il target symlink a cui volevo accedere (ancora 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.