Cálculo da máscara de criação de arquivo padrão do Samba

Cálculo da máscara de criação de arquivo padrão do Samba

Olá, tenho uma pergunta e não consigo encontrar uma resposta relevante. A situação é que eu configurei o servidor samba e tentei criar um arquivo e uma pasta a partir de uma máquina Windows. Tudo funciona como esperado, mas há o pequeno problema de que o samba remove x bit do grupo e outros do arquivo. Um código de exemplo simples:

drwx--x--x.   4 root root  4096 Dec 13 20:01 smb
drwxrwx--x. 2 root amikon 4096 Dec 15 22:17 pokus

[pokus]
path = /smb/pokus
public = no
writable = yes
valid users = @amikon

[root@wserver pokus]# ls -l
drwxr-xr-x. 2 vanek amikon 4096 Dec 21 10:14 dir
-rwxr--r--. 1 vanek amikon    0 Dec 21 10:14 file.txt

A partir de muitos experimentos que fiz, entendi que ao criar uma entrada (arquivo ou diretório) do Windows, o samba executa a lógica AND da máscara padrão e dos direitos provenientes da máquina Windows. Este comportamento pode ser mais ou menos influente usando o modo de criação de máscara e forçar a criação (e o outro definido para dirs) - funciona como esperado, sem nenhum problema.

Descobri que o problema da falta de 0011 persiste em relação ao uso da máscara de criação 755 - os x bits ainda são removidos do arquivo. A única opção é usar o modo de criação forçada 755. Depois disso, os bits permanecem porque OR os anuncia.

Eu testei outras opções de criação de máscara e parece que 0011 do arquivo é removido sempre. 755, 777, 333 ... então parece que pode ser algum mecanismo de proteção removendo x do grupo e outros impedindo que scripts sejam executados por ninguém além do proprietário????

Mas minha pergunta é sobre o exemplo exato acima. Por que existe d755, mas -744 como resultado. Onde exatamente aconteceu a mágica de perder 0011?

Muito obrigado por qualquer dica.

Responder1

A mágica de perder 0011 acontece porque é o comportamento padrão do Samba.

Extraído do documento:

Criar máscara: O valor padrão deste parâmetro remove o grupo e outros bits de gravação e execução dos modos UNIX

Padrão: criar máscara = 0744

Aqui está o link :http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html

Procurarcreate mask (S)

Neste documento, a equipe do Samba não explica por que optou por implementar esse comportamento padrão, mas para mim é fácil pensar em um mecanismo de segurança (como você mencionou).

Você pode usar a inherit permissions = yesdiretiva para fazer um novo arquivo herdar a permissão da pasta pai, mas isso não afetará o bit x. Então, no seu caso, isso renderizará:

-rwxrw-r--. 1 vanek amikon    0 Dec 21 10:14 file.txt

Além disso, como você disse, para alterar esse comportamento você terá que definir explicitamente sua própria máscara. Agora, a principal diferença entre "criar" e "forçar criação" é que:

  • create maskretira permissões (uma máscara AND)
  • force create modeadiciona-os depois disso (uma máscara OR)

Também create masknão é capaz de lidar com x bits para grupo e outros.

Portanto, você pode precisar lidar com ambas as diretivas para atingir alguns objetivos.


Vamos tentar alguns exemplos:

1) Se você quiser apenas o bit x para grupo e outros terá que combinar:

create mask = 0700 #Remove r bit from group and others 
force create mode = 0711 #Add x bit only to group and others

Resultado: -rwx--x--x 1 kris kris 0 Dec 21 14:20 file.txt


2) Se você deseja os bits r e x para grupo e outros, remova create maska diretiva (porque o padrão já é 0744) e apenas adicione:

    ;create mask = 0700 #remove r bit from group and others (commented)
    force create mode = 0711 #Add x bit only to group and others

Resultado: -rwxr-xr-x 1 kris kris 0 Dec 21 14:17 file.txt


E assim por diante...

Espero que ajude você um pouco a entender os comportamentos do Samba.

informação relacionada