Por que os arquivos em um compartilhamento montado smbfs são criados com o conjunto de bits executável?


14

Montei um compartilhamento samba usando o comando smbmount:

$ sudo smbmount \\\\foo\\bar /mnt/bar -o user=tom

Quando crio novos arquivos, eles são criados com o bit executável definido para proprietário, grupo e mundo. Por exemplo

$ touch hello.txt 
$ ls -la hello.txt
-rwxr-xr-x 1 root root 0 Dec  2 12:28 hello.txt

O mesmo arquivo, quando criado em um compartilhamento montado no NFS, configura as permissões corretas sem nenhum conjunto de bits executável.

Por que isso está acontecendo? Como pode ser consertado?

Respostas:


10

O NFS foi inventado no mundo Unix e, portanto, entende as permissões tradicionais do Unix imediatamente. (A ACL dos sistemas unix modernos é outra questão, mas implementações recentes do NFS devem lidar com eles.)

O Samba foi inventado no mundo IBM / Microsoft PC, para trocar arquivos com sistemas que não tinham permissões além de somente leitura / leitura / gravação. Agora é nativo do Windows. Por padrão, o Samba não transmite permissões Unix. Dependendo da configuração, todos os arquivos são marcados como executáveis ​​(o que é chato) ou todos os arquivos (exceto diretórios) são marcados como não executáveis ​​(o que é chato).

Existem várias extensões para o protocolo Samba / CIFS que o tornam mais adequado ao uso do Unix. Tente ativar as extensões Unix na configuração do servidor:

[global]
unix extensions = yes

Infelizmente na intranet da minha empresa, não tenho acesso para configurar o servidor. Talvez seja melhor montar usando apenas o NFS em um cliente Linux. O maior problema está em um cliente Windows, onde a configuração do NFS é uma dor de cabeça.
usar o seguinte código

@ vivekian2 De fato, se você tiver a opção, eu definitivamente recomendo usar o NFS em um cliente Linux e o SMB em um cliente Windows.
Gilles 'SO- stop be evil'

10

Isso parece com o seu problema, intitulado: Arquivos copiados ganham bits de execução no Samba / CIFS .

excerto

Depois de copiar um arquivo com rw-r ----- em um volume montado CIFS, a cópia fica rwxr -----. Então, está ganhando o bit de execução:

Parte inferior da página, colocando map archive = noem /etc/samba/smb.conf:

excerto

  [Global]
  <snip>
  map archive = no
  <snip>

Isso certamente resolve o problema dos arquivos salvos no Windows, ganhando o sinalizador de execução. Obrigado! Outro padrão maluco: alguém usou sinalizadores de arquivo nas últimas duas décadas? :)
Rennex 15/02

4

Você pode tentar: mount -t cifs

O Google "mount cifs" para uso, não é difícil de entender, mas você deseja definir opções usando o sinalizador -o:

uid =, gid =, rw, noperm, dir_mask = 0775, file_mask = 0664

Usuário e grupo são IDs, como numérico, não o alias do texto. Essas opções garantirão que você tenha acesso r / w, as permissões serão controladas pela montagem no servidor e, especificamente file_mask=0664, garantirão que seus arquivos não sejam executáveis. Além disso, você poderá trabalhar com seus compartilhamentos de samba como diretórios locais.


Na versão recente do samba, pode-se usarfile_mode=0644,dir_mode=0755
Jokester

AVISO: A opção de montagem CIFS 'dmask' foi descontinuada. Use 'dir_mode'. AVISO: A opção de montagem CIFS 'fmask' foi descontinuada. Use 'file_mode'.
Hubbitus 12/07/19

4

Você pode descobrir por que isso está acontecendo na seguinte explicação no site do Samba, na seção Permissões e atributos de arquivo no MS-DOS e Unix :

https://www.samba.org/samba/docs/using_samba/ch08.html

Tem a ver com o mapeamento dos bits System, Hidden e Archive para um sistema de arquivos MS-DOS.

Um sistema de arquivos do MS-DOS não utiliza bits executáveis; portanto, os três bits executáveis ​​no sistema de arquivos Unix são reutilizados para representar os bits System, Hidden e Archive do sistema de arquivos MS-DOS.

Portanto, quando você ls -lexibe as permissões de arquivo no Unix, visualiza as permissões de arquivo adequadas para o MS-DOS (ou Windows), lembrando que os três bits executáveis ​​no Unix representam os bits System, Hidden e Archive do MS-DOS.

No smb.confentanto, você pode desativar esse mapeamento para um compartilhamento com:

map archive = no
map system = no
map hidden = no

e force o modo na criação de arquivos com:

force create mode = 0660

Acabou sendo tão simples ... Obrigado pelas explicações!
anton_rh 31/05

1

Eu uso um QNAP TS439 - e tive esse problema com os arquivos sendo executáveis.

Embora eu tenha que usar o seguinte no meu /etc/fstabarquivo

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.