Permissões do Samba para arquivos copiados

1

Eu tenho o Samba rodando em um computador plug executando o Debian Squeeze que estou tentando configurar para atuar como um servidor de arquivos baseado na web.

A máquina executa o Lighttpd para o servidor da Web e o Samba para o compartilhamento de arquivos. O usuário é capaz de usar o Samba para copiar arquivos de sua máquina local no computador plug usando o Samba, e depois visualizá-los através do navegador da web (script que eu escrevi).

O Lighttpd é executado como www-data , o Samba é executado como root e o usuário é autenticado com o Samba por meio de uma conta de usuário chamada admin .

O problema é que estou tendo dificuldades de permissão quando um usuário copia arquivos de sua máquina através do Samba. Vamos dar um exemplo com um arquivo chamado foo.pdf : -

Exemplo

foo.pdf é armazenado em uma unidade NAS separada na LAN, que o usuário copia para a máquina local que está executando o OS X. As permissões agora são as seguintes: -

mac:Desktop jon$ ls -l | grep foo.pdf
-rwx------    1 jon  NETWORK\Domain Users     3516266 10 May 10:54 foo.pdf

Tudo está bem, porque o usuário tem todos os direitos para rwx do arquivo, mesmo que ninguém mais o faça - o que não é um problema. Mas agora, o usuário decide que quer copiar foo.pdf de sua máquina local no computador da tomada - e as coisas começam a dar errado!

Depois de usar o Samba para copiar o arquivo, as permissões agora são as seguintes: -

root@plug:/home/admin/content# ls -l | grep foo.pdf
-rwx------ 1 admin    admin    3516266 May 10 09:54 foo.pdf

O problema é que agora somente admin tem os direitos para rwx do arquivo. Nenhum outro usuário tem nenhum direito. Isso significa que www-data (que é o servidor da web) não tem direitos para este arquivo. O resultado é um 403 - Forbidden se eu tentar abrir foo.pdf por meio de um navegador da Web.

O conhecimento do My * nix é bastante limitado, mas acho que o que precisa acontecer para corrigir isso é que o Samba precisa relaxar essas permissões ao copiar arquivos para permitir que outros usuários leiam o arquivo.

Ler perguntas semelhantes sobre o SF e outros sites indica que uma possível solução pode estar no create mode/mask e force create mode/mask - no entanto, não está claro se isso se aplica apenas a novos arquivos ou a arquivos copiados - porque é não está funcionando para mim!

Como teste, usei essas opções para forçar o 0777 (obviamente inseguro para um ambiente de produção, mas só queria testar) e descobri que ele não fazia nenhuma alteração nas permissões de arquivo de arquivos copiados.

Meu smb.conf é o seguinte: -

[global]
        workgroup = WORKGROUP
        server string = %h server
        dns proxy = no
        log file = /var/log/samba/log.%m
        log level = 4
        max log size = 1000
        syslog = 0
        panic action = /usr/share/samba/panic-action %d
        encrypt passwords = true
        passdb backend = tdbsam
        obey pam restrictions = yes
        unix password sync = yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword$
        pam password change = yes
        create mask = 0777
        force create mode = 0777
        directory mask = 0777
        force directory mode = 0777

Isso não parece mudar nada, pois os arquivos ainda têm as permissões -rwx------ 1 admin admin depois de serem copiadas.

... alguma ideia?

    
por jon 11.05.2012 / 11:58

2 respostas

1

O cliente pode definir explicitamente as ACLs do arquivo, sobrescrevendo as permissões escolhidas pelo Samba quando o arquivo é criado. Você pode tentar usar force security mode para forçar determinadas bits a serem definidos. O seguinte deve forçar a permissão de leitura mundial:

force security mode = 004
    
por 12.05.2012 / 08:06
0

Se você não quiser tornar o diretório inicial do administrador "legível por todos", você pode

  • crie um diretório separado para arquivos que você deseja acessar por meio do servidor da Web, por exemplo, / var / www / shared
  • compartilhe este diretório pelo samba
  • conceda permissões apropriadas com acl:

    setfacl -m user:www-data:rx,default:user:www-data:rx /var/www/shared
    setfacl -m group:users:rwx,default:group:users:rwx /var/www/shared

você pode listar entradas acl com getfacl /var/www/shared . As permissões default: serão definidas para itens criados no diretório.

    
por 16.05.2012 / 05:19