Samba com o Active Directory - os compartilhamentos são somente leitura, NT_STATUS_MEDIA_WRITE_PROTECTED

2

Eu configurei um servidor samba que parece funcionar, mas todos os compartilhamentos aparentemente são exportados como readonly. A máquina é chamada "lx". Quando estou em lx, posso executar o seguinte comando:

froh@lx:~$ smbclient //lx/export -UAdministrator 
Enter Administrator's password:  
Domain=[CUSTOMER] OS=[Unix] Server=[Samba 3.5.4] 
smb: \> mkdir wrzlbrmpf 
NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \wrzlbrmpf
smb: \> ls
  .                                   D        0  Fri Dec  3 19:04:20 2010
  ..                                  D        0  Sun Nov 28 01:32:37 2010
  zork                                D        0  Fri Dec  3 18:53:33 2010
  bar                                 D        0  Sun Nov 28 23:52:43 2010
  ork                                          1  Fri Dec  3 18:53:02 2010
  foo                                          1  Sun Nov 28 23:52:41 2010
  gaga                                D        0  Fri Dec  3 19:04:20 2010

Como posso solucionar isso?

O que eu fiz:

Primeiro eu configurei uma nova instalação do Ubuntu 10.10 x64.

Segundo, eu tenho kerberos trabalhando com o seguinte arquivo krb5.conf:

[libdefaults]
        ticket_lifetime = 24000
        clock_skew = 300
        default_realm = CUSTOMER.LOCAL

[realms]
    CUSTOMER.LOCAL = {
        kdc = SB4.customer.local:88
        admin_server = SB4.customer.local:464
        default_domain = CUSTOMER.LOCAL
    }


[domain_realm]
        .customer.local = CUSTOMER.LOCAL
        customer.local = CUSTOMER.LOCAL

#[login]
#       krb4_convert = true
#       krb4_get_tickets = false

Eu também adicionei o winbind ao group, passwd e shadow no nsswitch.conf.

Aparentemente, o Kerberos funciona:

root @ lx: ~ # anúncios líquidos testjoin Join is OK root @ lx: ~ # wbinfo -a 'Administrador% MYSECRETPASSWORD' autenticação de senha em texto simples foi bem-sucedida autenticação de senha de desafio / resposta foi bem-sucedida

wbinfo -u e wbinfo -g também citam uma lista de usuários e uma lista de grupos respeitosamente. Observei que as contas de domínio NÃO incluíam um domínio e estão em alemão (como no SBS 2003 que é o servidor de domínio). Então eu recebo um "Domänenbenutzer" na saída do wbinfo -u não um "CUSTOMER + Usuário do Domínio" ou algo semelhante.

Não tenho mais certeza do que fiz com a configuração do PAM, mas aqui está o que tenho atualmente:

root@lx:/etc/pam.d# cat samba 
@include common-auth
@include common-account
@include common-session-noninteractive
root@lx:/etc/pam.d# grep -ve '^#' common-auth 

auth    [success=3 default=ignore]      pam_krb5.so minimum_uid=1000
auth    [success=2 default=ignore]      pam_unix.so nullok_secure try_first_pass
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
root@lx:/etc/pam.d# grep -ve '^#' common-account 

account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so 
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so 
account requisite                       pam_deny.so
account required                        pam_permit.so
account required                        pam_krb5.so minimum_uid=1000
root@lx:/etc/pam.d# grep -ve '^#' common-session-noninteractive 

session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session optional                        pam_krb5.so minimum_uid=1000
session required        pam_unix.so 
session optional                        pam_winbind.so 

Em algum momento, juntei-me à caixa do Linux no domínio do AD.

Após (manualmente) criar um diretório pessoal na caixa linux, posso efetuar login usando o usuário Adminstrator com a senha retirada do AD.

Agora eu corro o samba com a seguinte configuração:

[global]
        netbios name = LX
        realm = CUSTOMER.LOCAL
        workgroup = CUSTOMER
        security = ADS
        encrypt passwords = yes
        password server = 192.168.20.244     #IP des Domain Controllers
        os level = 0
        socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        winbind enum users = Yes
        winbind enum groups = Yes
        preferred master = no
        winbind separator = +
        dns proxy = no
        wins proxy = no
#       client NTLMv2 auth = Yes
        log level = 2
        logfile = /var/log/samba/log.smbd.%U
        template homedir = /home/%U
        template shell = /bin/bash

[export]
        path = /mnt/sdc1/export
        read only = No
        public = Yes

Atualmente, não me importa se a exportação é exportada para todos ou apenas para um usuário. Quero ver alguém escrevendo para esse diretório antes de começar a mexer nas configurações de autenticação. (Quem pode acessá-lo).

Como mencionado, acessar o compartilhamento dos resultados do smbclient neste NT_STATUS_MEDIA_WRITE_PROTECTED.

Acessar a partir do Windows mostra as ACLs que parecem corretas (o usuário pode escrever) - mas não funciona, só consigo ler arquivos que não escrevo.

O diretório a ser exportado é assim:

root@lx:/etc/pam.d# ls -ld /mnt/
drwxr-xr-x 5 root root 4096 2010-11-28 01:29 /mnt/
root@lx:/etc/pam.d# ls -ld /mnt/sdc1/
drwxr-xr-x 4 froh froh 4096 2010-11-28 01:32 /mnt/sdc1/
root@lx:/etc/pam.d# ls -ld /mnt/sdc1/export/
drwxrwxrwx+ 5 administrator domänen-admins 4096 2010-12-03 19:04 /mnt/sdc1/export/
root@lx:/etc/pam.d# getfacl /mnt/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: mnt/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

root@lx:/etc/pam.d# getfacl /mnt/sdc1/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: mnt/sdc1/
# owner: froh
# group: froh
user::rwx
group::r-x
other::r-x

root@lx:/etc/pam.d# getfacl /mnt/sdc1/export/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: mnt/sdc1/export/
# owner: administrator
# group: domänen-admins
user::rwx
group::rwx
group:domänen-admins:rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:group:domänen-admins:rwx
default:mask::rwx
default:other::rwx

Meu, oh meu que eu estou negligenciando? O que sou cego para ver?

    
por froh42 20.12.2010 / 03:10

3 respostas

6

Eu passei uma quantidade incrível de tempo similarmente depurando meu servidor e descobri que o compartilhamento e o diretório que está sendo compartilhado não podem ter o mesmo nome.

Eu não tenho ideia do porquê. Espero que alguém mais se depara com isso antes no processo deles.

    
por 23.11.2013 / 22:56
1

O compartilhamento funciona corretamente se for chamado de outro nome diferente de "exportar". Muito estranho, isso me levou algum tempo para descobrir. Então, se eu compartilhá-lo como "exportt" (dobule-t) é leitura-escrita, se eu compartilhá-lo como "export" é somente leitura.

Uma questão permanece: "exportar" algum nome de compartilhamento mágico?

    
por 05.01.2011 / 12:17
0

Eu também documentei que o nome do compartilhamento e o nome do diretório não podem ser iguais ou o compartilhamento ficará visível e somente leitura, apesar das permissões. Quando o nome do compartilhamento é modificado para ser diferente do nome do diretório (ou disco), ele se tornará gravável assumindo que o usuário tenha as permissões corretas.

Encontrei isso com discos e pastas NTFS montados no Ubuntu que haviam sido compartilhados anteriormente sob o NTFS usando os mesmos nomes de compartilhamento. As ferramentas de compartilhamento Win e Linux são padronizadas para o nome do diretório ou do disco de seu nome de compartilhamento durante a criação, portanto, o conflito é interno por padrão. Basta adicionar um caractere ao nome do Linux Share para torná-lo gravável.

Isso pode ou não ser verdadeiro se o disco ou diretório não for NTFS ou NTFS, mas nunca tiver sido compartilhado. Parece que os nomes de compartilhamentos NTFS usados anteriormente são reservados quando montados no Ubuntu e o Linux lida com o conflito tornando o compartilhamento somente leitura.

Um compartilhamento de diretório NTFS chamado \ My Music simplesmente renomeado \ My Muzak no Ubuntu é suficiente para tornar o diretório gravável.

    
por 26.06.2017 / 15:00