Como criar um compartilhamento Samba gravável no Windows sem permissões 777?

33

Eu tenho um caminho em uma máquina Linux (Debian 8) que desejo compartilhar com o Samba 4 nos computadores Windows (Win7 e 8 em um domínio). No meu smb.confeu fiz o seguinte:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
guest ok = yes
public = yes

Eu tenho acesso de leitura perfeito do Windows. Mas, para ter acesso de gravação, preciso fazer chmod -R 777 /path/to/sharepara poder escrever nele no Windows.

O que eu quero é o acesso de gravação do Windows depois de fornecer as credenciais do Linux do proprietário do Linux /path/to/share.

Eu já tentei:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes

Em seguida, o Windows pede credenciais, mas não importa o que eu digite, é sempre negado.

Qual é a maneira correta de obter acesso de gravação aos compartilhamentos Samba de um computador com domínio do Windows sem conceder 777?

Foo Bar
fonte

Respostas:

49

Eu recomendo criar um usuário dedicado para esse compartilhamento e especificá-lo em force user(consulte a documentação) .

Crie um usuário ( shareuserpor exemplo) e defina o proprietário de tudo na pasta de compartilhamento para esse usuário:

adduser --system shareuser
chown -R shareuser /path/to/share

Em seguida, adicione force usere defina as configurações de máscara em smb.conf:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
public = yes
create mask = 0644
directory mask = 0755
force user = shareuser

Observe que guest oké um sinônimo para public.

yaegashi
fonte
1
Eu tive um problema semelhante e todas as pesquisas no Google mostraram o caminho sujo para simplesmente usar o 777. Eu queria o 775 para minha pasta compartilhada e queria que os arquivos fossem criados usando o meu linux "defaultUser", usei também public = yes. A pasta era 775, a máscara create e dir era 775, mas no Windows não era gravável e eu não conseguia entender o porquê. Adicionando force user = defaultUserfez o trabalho para mim.
firepol
Não consigo fazer isso funcionar, sempre que tento compartilhar o diretório, apenas uma janela informando que preciso conceder permissão de gravação a "outros" para compartilhar o diretório.
Mark Kramer
Eu entendi, o problema era a localização de smb.conf. Google e até mesmo sambas documentação disse que o arquivo deve estar no /usr/local/samba/libmas na verdade é em/etc/samba
Mark Kramer
1
@MarkKramer É uma boa ideia seguir os documentos incluídos na sua distribuição Linux específica, porque muitas distribuições reorganizam os arquivos para se ajustarem ao FHS (Linux System Hierarchy Standard) da Linux Foundation. Eu recomendo a leitura e a pesquisa dos documentos fornecidos com sua distribuição, porque o Google nem sempre é a melhor resposta; por exemplo, você pode obter informações para uma versão diferente do software. Cumprimentos.
RobertL
2

Nas configurações de compartilhamento em smb.conf, você precisará especificar os nomes de usuários e / ou grupos que têm permissão para gravar no compartilhamento, usando uma write list = ...linha.

Exemplo:

[myshare]
...
write list = my_linux_username

Então você precisará usar o smbpasswdcomando para configurar uma senha para se autenticar my_linux_usernameno Samba:

sudo smbpasswd -a my_linux_username

Esta etapa é necessária porque as senhas padrão do sistema /etc/shadowsão hash em algoritmos incompatíveis com os algoritmos de hash de senha usados ​​no protocolo SMB. Quando um cliente envia um pacote de autenticação SMB, ele inclui uma senha com hash. Só pode ser comparado a outro hash de senha que usa o mesmo algoritmo.

(Instruções muito antigas do milênio anterior podem recomendar a desativação da criptografia de senha no Samba e o uso de certos hacks de registro para permitir que o Windows emita senhas não criptografadas para a rede. Este conselho é obsoleto : esses hacks de registro podem não funcionar mais nas versões atuais do Windows e permita que qualquer pessoa que possa monitorar o tráfego da rede capture sua senha trivialmente.)


Você pode ter mais uma coisa a fazer no lado do cliente. Quando o seu sistema cliente Windows ingressa em um domínio do Active Directory e você faz logon com uma conta do AD, ele prefixa automaticamente todos os nomes de usuário não qualificados pelo nome do domínio do usuário do AD, ou seja, você estará autenticando AD_DOMAIN\your_username, e não apenas your_username.

Se você estiver conectado com uma conta local (ou o sistema do cliente não estiver associado a um domínio do AD), o Windows poderá prefixar automaticamente o nome de usuário com o nome do host do cliente, a menos que você especifique outro nome de domínio.

Para efetuar login com êxito em um servidor Samba independente a partir de um cliente Windows independente, pode ser necessário especificar seu nome de usuário como SAMBA_SERVER_HOSTNAME\your_username.

Caso contrário, o Samba verá o nome de usuário como WINDOWS_CLIENT_HOSTNAME\your_username, concluirá que não há como verificar usuários pertencentes ao domínio nomeado WINDOWS_CLIENT_HOSTNAMEe rejeitará o login.

(As versões mais recentes do Samba podem ter uma verificação interna para essa situação específica e podem permitir o acesso, no entanto. Mas é basicamente assim que a autenticação SMB funciona "oculta" e se você precisa lidar com versões antigas do Samba , ainda pode ser útil.)

telcoM
fonte
1

Eu estava procurando por isso, porque estava com pressa e nem tive tempo de me concentrar na criação de usuários e por isso ...

Apenas tive que extrair os dados de uma máquina debian 9 o mais rápido possível e esta foi a maneira mais rápida que pensei, se você quiser evitar pular comandos, você também pode fazer isso, mas obviamente isso não é recomendado, a menos que você esteja em um se apresse .

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 
Alpha2k
fonte
E se você seguir esta rota, poderá restringir por host usando a opção "hosts allow". Veja: samba.org/samba/docs/server_security.html
ctorx