O Samba não recarrega membros do grupo de usuários

3

Estou executando uma configuração simples do servidor samba, em que os usuários se conectam a um compartilhamento que contém pastas para grupos de usuários específicos. As pastas são chmod 2770 , portanto, somente os usuários que estão no grupo correto podem ler / gravar neles.

O problema é que, se eu mudar de grupo (ie remover usuário do grupo / adicionar usuário ao grupo; as mudanças estão sincronizadas entre clientes e servidor!), o samba não recarrega automaticamente as associações do grupo para o usuário, então eles ainda podem escrevo para grupos que eles não são mais membros de etc. Eu tenho que reconectar ao compartilhamento ou reiniciar o samba para aplicar as mudanças.

Existe alguma maneira de impedir o armazenamento em grupo e / ou ativar a recarga de membros do grupo no samba?

Meu smb.conf:

[global]
interfaces = ethlan
bind interfaces only = yes
smb ports = 445
workgroup = WORKGROUP
security = user
passdb backend = tdbsam:/var/lib/mysamba/samba.tdb

disable netbios = yes
nt acl support = no
invalid users = root
read only = no
case sensitive = yes
load printers = no
unix extensions = yes

log file = /var/log/samba.log
log level = 1
syslog = 0

use sendfile = yes

[groups]
path = /home/groups
browseable = yes
force create mode = 0770
force directory mode = 2770
hide unreadable = yes
    
por xato 25.06.2013 / 17:39

2 respostas

2

Em vez de reiniciar todo o serviço Samba, você deve poder enviar o sinal SIGHUP para forçá-lo a recarregar o arquivo de configuração.

Na smbd(8) man page :

The configuration file, and any files that it includes, are automatically reloaded every minute, if they change. You can force a reload by sending a SIGHUP to the server. Reloading the configuration file will not affect connections to any service that is already established. Either the user will have to disconnect from the service, or smbd killed and restarted.

As últimas duas frases são importantes: as conexões atuais não são afetadas por isso.

Como você lida com as conexões do usuário pode variar muito e depende da situação.

  • Se eles estiverem usando ativamente a conexão, talvez seja mais fácil instruí-los a reinicializar o computador para que as alterações tenham efeito. Dessa forma, se eles estão no meio de algo, eles podem apenas fazer isso em seu lazer.

  • Para usuários individuais, você pode eliminar o processo de conexão deles ( SIGHUP pode funcionar, mas não tenho certeza no momento); mas você pode querer que eles salvem e / ou fechem qualquer coisa que possam ter aberto no (s) compartilhamento (s) porque sua conexão será cortada. Quando eles acessarem um compartilhamento novamente, eles gerarão uma nova conexão com o novo acesso. Você pode usar smbstatus para encontrar informações sobre as conexões atuais.

  • Reiniciando o Samba. Esta é uma abordagem bastante drástica, mas pode ser necessária em certas situações. Isso matará todas as conexões atuais, forçando-as a estabelecer novas conexões.

  • Espere. Se as mudanças não forem necessárias em um determinado momento, você pode simplesmente permitir que os clientes restabeleçam as conexões por conta própria.

por 29.06.2013 / 08:24
1

Eu acho que tenho o mesmo problema. No meu caso, as associações ao grupo são armazenadas em cache para cada processo de sessão do samba smbstatus -p .

Eu uso esse script para eliminar os processos e "atualizar" as informações de associação:

#/bin/sh

VICTIM="$1"

[ -z "$VICTIM" ] && exit 1

if [ "$VICTIM" = "!" ]; then
    L="$(smbstatus -p 2>/dev/null)"
else
    L="$(smbstatus -p -u "${VICTIM}" 2>/dev/null)"
fi

echo "$L" | while read PID USER GROUP CLIENT IP; do
    getent passwd "$USER" >/dev/null || continue

    kill "$PID" 2>/dev/null
    echo -n .
done
echo " done!"

O Windows não tem problemas, pois reconecta-se ao samba automaticamente. O usuário terá apenas um atraso mínimo antes da próxima chamada. Mas: todas as transferências de arquivos ativas serão canceladas e um erro de E / S será enviado ao usuário.

Eu automatizei isso com um arquivo batch e um cronjob. Desta forma, o usuário pode matar suas próprias sessões através de um clique duplo (e lendo sobre o problema de erro de I / O).

    
por 28.06.2013 / 10:19