O problema é que não consigo obter arquivos no compartilhamento CIFS para mostrar as permissões corretas no cliente Linux sem forçar vers=1.0
nas opções de montagem.
O servidor é um sistema FreeNAS executando o Samba 4.7.0. Ele está basicamente rodando no modo standalone / workgroup; não há um controlador de domínio AD /, e eu não quero um se puder evitá-lo.
O cliente é um sistema Debian Sid (instável) com componentes do Samba v4.7.4 e cifs-utils
versão 6.8-1.
O atual encantamento da montagem é parecido com isto:
sudo mount.cifs -o 'vers=1.0,username=me,uid=me,gid=me,credentials=[[filename]]' //freenas/me $HOME/mnt
(O acima é normalmente executado por autofs, mas isso não é relevante.)
Uma vez feito, a seguinte entrada aparece no mtab:
//freenas/me on /home/me/mnt type cifs (rw,relatime,vers=1.0,cache=strict,username=me,domain=,uid=1000,forceuid,gid=1000,forcegid,addr=X.X.X.X,soft,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=65536,echo_interval=60,actimeo=1)
... E o nosso diretório de teste aparece com os seguintes modos / permissões:
me@linuxclient:~$ ls -al mnt/testdir/
total 3
drwxr-xr-x+ 2 me me 0 Apr 21 00:10 .
drwxr-xr-x+ 5 me me 0 Apr 21 00:07 ..
-r--r--r--+ 1 me me 0 Apr 21 00:09 R--R--R--
-rw-r--r--+ 1 me me 0 Apr 21 00:10 RW-R--R--
-rwx------+ 1 me me 0 Apr 21 00:08 RWX------
-rwxr-xr-x+ 1 me me 0 Apr 21 00:08 RWXR-XR-X
-r-xr-xr-x+ 1 me me 0 Apr 21 00:09 R-XR-XR-X
Isso é exatamente o que eu espero e quero. No entanto, o mount está forçando o SMB versão 1.0, que é antigo e está quebrado. No entanto, se eu não especificar explicitamente vers=1.0
, isso acontece:
//freenas/me on /home/me/mnt type cifs (rw,relatime,vers=default,cache=strict,username=me,domain=,uid=1000,forceuid,gid=1000,forcegid,addr=X.X.X.X,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1)
me@linuxclient:~$ ls -al mnt/testdir/
total 5120
drwxr-xr-x 2 me me 0 Apr 21 00:10 .
drwxr-xr-x 2 me me 0 Apr 21 00:07 ..
-rwxr-xr-x 1 me me 0 Apr 21 00:09 R--R--R--
-rwxr-xr-x 1 me me 0 Apr 21 00:10 RW-R--R--
-rwxr-xr-x 1 me me 0 Apr 21 00:08 RWX------
-rwxr-xr-x 1 me me 0 Apr 21 00:08 RWXR-XR-X
-rwxr-xr-x 1 me me 0 Apr 21 00:09 R-XR-XR-X
Algo injetou file_mode=0755,dir_mode=0755
nas opções de montagem e as permissões resultantes são 0x755 em todos os arquivos, independentemente de suas permissões reais, o que é obviamente errado. Ainda não descobri de onde vêm essas opções indesejadas.
Como meu objetivo final é ter vários usuários simultâneos conectados a seus próprios diretórios pessoais com suas próprias credenciais, comecei a experimentar esse mount
de encantamento, especificamente a opção multiuser
:
sudo mount.cifs -o "user=me,noperm,multiuser" //freenas/me $HOME/mnt
me@linuxclient:~$ ls -al mnt/testdir/
total 5120
drwxr-xr-x 2 me me 0 Apr 21 00:10 .
drwxr-xr-x 2 me me 0 Apr 21 00:07 ..
-rwxr-xr-x 1 me me 0 Apr 21 00:09 R--R--R--
-rwxr-xr-x 1 me me 0 Apr 21 00:10 RW-R--R--
-rwxr-xr-x 1 me me 0 Apr 21 00:08 RWX------
-rwxr-xr-x 1 me me 0 Apr 21 00:08 RWXR-XR-X
-rwxr-xr-x 1 me me 0 Apr 21 00:09 R-XR-XR-X
Ainda está errado. No entanto, quando eu adiciono a opção de montagem cifsacl
:
sudo mount.cifs -o "user=me,noperm,multiuser,cifsacl" //freenas/me $HOME/mnt
E insira minhas credenciais para o servidor por meio do comando cifscreds
, obtenho estes resultados:
//freenas/me on /home/me/mnt type cifs (rw,relatime,vers=default,cache=strict,multiuser,domain=,uid=0,noforceuid,gid=0,noforcegid,addr=X.X.X.X,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,cifsacl,noperm,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1)
me@linuxclient:~$ ls -al mnt/testdir/
total 5120
drwxr-xr-x 2 root root 0 Apr 21 00:10 .
drwxr-xr-x 2 root root 0 Apr 21 00:07 ..
-r--r--r-- 1 root root 0 Apr 21 00:09 R--R--R--
-rw-r--r-- 1 root root 0 Apr 21 00:10 RW-R--R--
-rwx------ 1 root root 0 Apr 21 00:08 RWX------
-rwxr-xr-x 1 root root 0 Apr 21 00:08 RWXR-XR-X
-r-xr-xr-x 1 root root 0 Apr 21 00:09 R-XR-XR-X
Apesar das opções file_mode=0755,dir_mode=0755
ainda serem injetadas, as permissões agora estão aparecendo corretamente. Mas agora os UIDs estão errados e tudo parece pertencer ao root. Na verdade, posso criar, modificar e excluir arquivos no compartilhamento, mas eles aparecem como propriedade da raiz. Eu sei que deve haver um mapeamento realizado por cifs.idmap
e winbindd
, mas ainda não descobri exatamente como isso é feito ou como configurá-lo.
Eu prefiro não continuar usando o vers=1.0
kluge; Eu preferiria fazer isso corretamente. Alguma dica sobre o que eu estou sentindo falta?