J'ai deux serveurs sur le même réseau. L'un exécutant Windows Server 2016 et l'autre exécutant CentOS 8. Le serveur Windows est mon magasin de fichiers principal, c'est là que se trouvent toutes mes données. Le serveur CentOS a le partage Windows monté et peut accéder à ses fichiers.

Sur CentOS, j'ai configuré un partage samba. Pourquoi? Parce que j'ai une application Web en cours d'exécution sur ce même serveur et que je souhaite que l'application Web contrôle qui peut accéder à quel fichier. Ainsi, au lieu de demander à nos utilisateurs (internes) de monter directement le partage Windows, ils monteront le partage CentOS qui servira de "contrôle d'accès" aux fichiers.

Dans le dossier samba, il y a des dossiers pour chaque utilisateur et une configuration pour permettre aux utilisateurs d'accéder uniquement à leurs dossiers. L'application Web est configurée pour ajouter des liens symboliques dans ces dossiers qui renvoient aux "vrais" fichiers.

C'est là que se situe le problème. Si j'ajoute un fichier "normal" dans le dossier d'un utilisateur, il peut y accéder très bien. Mais si j'ajoute un lien symbolique (à un fichier dans le partage Windows monté), il n'apparaît pas pour eux. Je suis presque sûr que c'est un problème SELinux.

Voici comment les choses sont configurées.

  • Le partage Windows est monté

    sudo mount -t cifs //WindowsShare/data /media/WinShare \ 
      -o ip=192.168.1.5,username=user,gid=sambashare
    
    ls -alhZ /media/WinShare
    drwxr-xr-x. 2 root sambashare system_u:object_r:cifs_t:s0  0 Jan 10 16:57 files
    
  • Un partage samba est créé et utilisé /srv/smb(tous les utilisateurs samba sont dans le sambasharegroupe)

    ls -alhZ /srv
    drwxrwx---.  2 root sambashare unconfined_u:object_r:samba_share_t:s0    6 Jan 13 11:20 smb
    
  • L' /etc/samba/smb.confa ce qui suit :

    [global]
        allow insecure wide links = yes
        unix extensions = no
    
    [adminShare]
        path = /srv/smb
        wide links = yes
        follow symlinks = yes
    
  • En guise de test, j'ai ajouté un lien symbolique et un fichier

    ln -s /media/WinShare/files/test.pdf /srv/smb/test.pdf
    touch /srv/smb/file.bin
    

Ensuite, j'ai essayé de monter \\CentOS\adminSharedans une machine virtuelle Windows et je ne vois pas le test.pdffichier mais je vois file.bin.

Comment puis-je donner au partage CentOS samba l'accès aux données Windows Server montées ? Lors de la configuration du serveur CentOS, j'ai exécuté :

sudo semanage fcontext -a -t samba_share_t "/srv/smb(/.*)?"

C'est ce qui m'a permis de voir file.bin, mais je ne peux toujours pas voir file.pdf. J'ai trouvé ceci, mais je ne sais pas si je veux tout changer :

sudo setsebool -P samba_export_all_rw=1

Comment puis-je autoriser samba à accéder au /media/WinSharedossier ? Cela fonctionnerait-il ?

sudo semanage fcontext -a -t samba_share_t "/media/WinShare(/.*)?"
answer

Je l'ai corrigé! J'ai dû monter le partage Windows et forcer un contexte de samba_share_t.

Lors du montage ajouter context=unconfined_u:object_r:samba_share_t:s0.

sudo mount -t cifs //WindowsShare/data /media/WinShare \
    -o ip=192.168.1.5,username=user,gid=sambashare,context=unconfined_u:object_r:samba_share_t:s0