Por que os arquivos criados via Samba recebem diferentes permissões de ACL (máscara) dependendo do sistema operacional do cliente?

4

Eu testei isso em uma instalação limpa do Debian Jessie, mas eu também tenho esse problema em outras máquinas (ex: Ubuntu 12.04). Além da instalação básica, instalei sudo , samba e cifs-utils .

Diretório compartilhado com ACL padrão

Eu habilitei as ACLs no sistema de arquivos raiz e criei um diretório compartilhado:

sudo mount -o remount,acl /
mkdir -p /home/ryan/shared
setfacl -d -m u:ryan:rwx /home/ryan/shared

Configuração do Samba

Eu deixei todos os padrões em /etc/samba/smb.conf e adicionei um único compartilhamento:

[shared]
    comment =
    path = /home/ryan/shared
    writable = yes
    valid users = ryan

Adicionar usuário do Samba

Então eu me adicionei como usuário do Samba e reiniciei o serviço:

sudo smbpasswd -a ryan
sudo systemctl restart smbd

Cliente Linux

Em seguida, criei um ponto de montagem para o compartilhamento do Samba, montei-o e criei um arquivo de texto vazio:

mkdir -p /home/ryan/mnt/shared
sudo mount -t cifs -o user=ryan //127.0.0.1/shared /home/ryan/mnt/shared
touch /home/ryan/mnt/shared/linux.txt

Cliente Windows

Eu também conectei de uma máquina com o Windows 8 e criei um arquivo de texto vazio chamado windows.txt .

Listagem de diretório compartilhado

Depois disso, uma listagem de diretório de /home/ryan/shared se parece com isso:

-rw-r--r--+ 1 ryan ryan 0 Jun 20 23:45 linux.txt
-rwxrwxr--+ 1 ryan ryan 0 Jun 20 23:46 windows.txt

ACLs de arquivo

A ACL de linux.txt é assim:

# file: linux.txt
# owner: ryan
# group: ryan
user::rw-
user:ryan:rwx           #effective:r--
group::r-x              #effective:r--
mask::r--
other::r--

A ACL de windows.txt é assim:

# file: windows.txt
# owner: ryan
# group: ryan
user::rwx
user:ryan:rwx
group::r-x
mask::rwx
other::r--

Perguntas

O comportamento do cliente Linux é o que eu esperaria. Por que é diferente ao usar um cliente Windows? Como posso fazer com que o cliente Windows defina as mesmas permissões que o cliente Linux?

    
por Ryan J 21.06.2015 / 08:10

2 respostas

3

Você pode fazer com que o Samba normalize tudo que os clientes enviam, veja man smb.conf para coisas como:

create mask = 0775
force create mode = 0660
directory mask = 2775
force directory mode = 2771
    
por 22.06.2015 / 22:30
0

Primeiro, com apenas essas permissões, você não precisa da ACL. A ACL é para permissões mais refinadas do que usuário, grupo e outros.

Mas, para responder à sua pergunta, meu palpite é que o arquivo criado pelo Linux obtém a permissão da configuração do usuário umask, provavelmente a mesma permissão que você obteria ao criar um arquivo em qualquer outro diretório.

O ambiente Windows não tem nada de umask, ele não sabe nada sobre o conceito de um grupo unix. Arquivos criados no Windows recebem permissão de configurações no smb.conf. Mesmo se você não inseriu essas configurações sozinho, elas possuem valores padrão. Você pode ver esses valores com o comando testparm -s -v smb.conf | grep mask . A máscara em smb.conf tem o valor inverso comparado ao mesmo umask. Ou seja, para obter um arquivo com premission -rw-r - r-- você precisa de umask de 022, mas um samba cria uma máscara de 644.

    
por 21.06.2015 / 12:19