Tenho dois servidores na mesma rede. Um rodando Windows Server 2016 e outro rodando CentOS 8. O servidor Windows é meu principal repositório de arquivos, é onde estão todos os meus dados. O servidor CentOS tem o compartilhamento do Windows montado e pode acessar seus arquivos.
No CentOS, configurei um compartilhamento de samba. Por quê? Porque eu tenho um webapp rodando no mesmo servidor e quero que o webapp controle quem pode acessar qual arquivo. Portanto, em vez de nossos usuários (internos) montarem o compartilhamento do Windows diretamente, eles montarão o compartilhamento do CentOS, que será o acesso de "guardião" aos arquivos.
Na pasta samba, existem pastas para cada usuário e uma configuração para permitir que os usuários acessem apenas suas pastas. O webapp está configurado para adicionar links simbólicos nessas pastas que vinculam aos arquivos "reais".
É aqui que está a questão. Se eu adicionar arquivos "normais" na pasta de um usuário, eles poderão acessá-lo muito bem. Mas se eu adicionar um link simbólico (para um arquivo no compartilhamento do Windows montado), ele não aparecerá para eles. Tenho certeza de que este é um problema do SELinux.
Veja como as coisas estão configuradas.
O compartilhamento do Windows está montado
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
Um compartilhamento de samba é criado e usado
/srv/smb
(todos os usuários de samba estão nosambashare
grupo)ls -alhZ /srv drwxrwx---. 2 root sambashare unconfined_u:object_r:samba_share_t:s0 6 Jan 13 11:20 smb
O
/etc/samba/smb.conf
tem o seguinte:[global] allow insecure wide links = yes unix extensions = no [adminShare] path = /srv/smb wide links = yes follow symlinks = yes
Como teste, adicionei um link simbólico e um arquivo
ln -s /media/WinShare/files/test.pdf /srv/smb/test.pdf touch /srv/smb/file.bin
Então tentei montar \\CentOS\adminShare
em uma VM do Windows e não vejo o test.pdf
arquivo, mas vejo file.bin
.
Como posso conceder ao compartilhamento de samba do CentOS acesso aos dados montados do Windows Server? Ao configurar o servidor CentOS, executei:
sudo semanage fcontext -a -t samba_share_t "/srv/smb(/.*)?"
Foi isso que me permitiu ver file.bin
, mas ainda não consigo ver file.pdf
. Encontrei isso, mas não sei se quero mudar tudo :
sudo setsebool -P samba_export_all_rw=1
Como posso permitir que o samba acesse a /media/WinShare
pasta? Isso funcionaria?
sudo semanage fcontext -a -t samba_share_t "/media/WinShare(/.*)?"
Eu consertei isso! Eu tive que montar o compartilhamento do Windows e forçar um contexto de
samba_share_t
.Ao montar adicione
context=unconfined_u:object_r:samba_share_t:s0
.