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 = yes
diretiva 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 mask
retira permissões (uma máscara AND)force create mode
adiciona-os depois disso (uma máscara OR)
Também create mask
nã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 mask
a 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.