Samba cria máscara não funcionando corretamente

3

Eu tenho um compartilhamento de samba em um servidor linux (RHEL 6) que estou acessando via Windows 7.

Defino o compartilhamento samba com uma máscara de criação de 0664, mas quando eu crio arquivos via samba do meu computador Windows 7, ele cria os arquivos com um nível de permissão 0674. Se eu editar um arquivo, ele altera suas permissões para 0674 também. Se eu remover a máscara de criação para o compartilhamento e confiar na máscara de criação padrão de 0644, ela cria arquivos com permissões de 0774. Minha umask é 0022. Eu tentei várias configurações do manual, mas nenhuma parece fazer o truque. Alguma idéia do que está acontecendo e como posso consertar isso?

Idealmente, os novos arquivos teriam o nível de permissão de 0664 e os arquivos existentes manteriam seu nível de permissão.

Para referência, aqui está a saída de testparm -v :

[global]
    dos charset = CP850
    unix charset = UTF-8
    display charset = LOCALE
    workgroup = WORKGROUP
    realm =
    netbios name = SERVER
    netbios aliases =
    netbios scope =
    server string = Bart
    interfaces =
    bind interfaces only = No
    security = DOMAIN
    auth methods =
    encrypt passwords = Yes
    update encrypted = No
    client schannel = Auto
    server schannel = Auto
    allow trusted domains = Yes
    map to guest = Never
    null passwords = No
    obey pam restrictions = No
    password server = passwordserver.domain.com
    smb passwd file = /var/lib/samba/private/smbpasswd
    private dir = /var/lib/samba/private
    passdb backend = tdbsam
    algorithmic rid base = 1000
    root directory =
    guest account = nobody
    enable privileges = Yes
    pam password change = No
    passwd program =
    passwd chat = *new*password* %n\n *new*password* %n\n *changed*
    passwd chat debug = No
    passwd chat timeout = 2
    check password script =
    username map =
    password level = 0
    username level = 0
    unix password sync = No
    restrict anonymous = 0
    lanman auth = No
    ntlm auth = Yes
    client NTLMv2 auth = No
    client lanman auth = No
    client plaintext auth = No
    preload modules =
    dedicated keytab file =
    kerberos method = default
    map untrusted to domain = No
    log level = 0
    syslog = 1
    syslog only = No
    log file = /var/log/samba/log.%m
    max log size = 10240
    debug timestamp = Yes
    debug prefix timestamp = No
    debug hires timestamp = Yes
    debug pid = No
    debug uid = No
    debug class = No
    enable core files = Yes
    smb ports = 445 139
    large readwrite = Yes
    max protocol = NT1
    min protocol = CORE
    min receivefile size = 0
    read raw = Yes
    write raw = Yes
    disable netbios = No
    reset on zero vc = No
    acl compatibility = auto
    defer sharing violations = Yes
    nt pipe support = Yes
    nt status support = Yes
    announce version = 4.9
    announce as = NT
    max mux = 50
    max xmit = 16644
    name resolve order = lmhosts wins host bcast
    max ttl = 259200
    max wins ttl = 518400
    min wins ttl = 21600
    time server = No
    unix extensions = No
    use spnego = Yes
    client signing = auto
    server signing = No
    client use spnego = Yes
    client ldap sasl wrapping = plain
    enable asu support = No
    svcctl list =
    deadtime = 0
    getwd cache = Yes
    keepalive = 300
    lpq cache time = 30
    max smbd processes = 0
    paranoid server security = Yes
    max disk size = 0
    max open files = 16384
    socket options = TCP_NODELAY
    use mmap = Yes
    hostname lookups = No
    name cache timeout = 660
    ctdbd socket =
    cluster addresses =
    clustering = No
    ctdb timeout = 0
    load printers = No
    printcap cache time = 750
    printcap name =
    cups server =
    cups encrypt = No
    cups connection timeout = 30
    iprint server =
    disable spoolss = No
    addport command =
    enumports command =
    addprinter command =
    deleteprinter command =
    show add printer wizard = Yes
    os2 driver map =
    mangling method = hash2
    mangle prefix = 1
    max stat cache size = 256
    stat cache = Yes
    machine password timeout = 604800
    add user script =
    rename user script =
    delete user script =
    add group script =
    delete group script =
    add user to group script =
    delete user from group script =
    set primary group script =
    add machine script =
    shutdown script =
    abort shutdown script =
    username map script =
    logon script =
    logon path = \%N\%U\profile
    logon drive =
    logon home = \%N\%U
    domain logons = No
    init logon delayed hosts =
    init logon delay = 100
    os level = 20
    lm announce = Auto
    lm interval = 60
    preferred master = No
    local master = No
    domain master = Auto
    browse list = Yes
    enhanced browsing = Yes
    dns proxy = Yes
    wins proxy = No
    wins server =
    wins support = No
    wins hook =
    kernel oplocks = Yes
    lock spin time = 200
    oplock break wait time = 0
    ldap admin dn =
    ldap delete dn = No
    ldap group suffix =
    ldap idmap suffix =
    ldap machine suffix =
    ldap passwd sync = no
    ldap replication sleep = 1000
    ldap suffix =
    ldap ssl = start tls
    ldap ssl ads = No
    ldap deref = auto
    ldap follow referral = Auto
    ldap timeout = 15
    ldap connection timeout = 2
    ldap page size = 1024
    ldap user suffix =
    ldap debug level = 0
    ldap debug threshold = 10
    eventlog list =
    add share command =
    change share command =
    delete share command =
    preload =
    lock directory = /var/lib/samba
    state directory = /var/lib/samba
    cache directory = /var/lib/samba
    pid directory = /var/run
    utmp directory =
    wtmp directory =
    utmp = No
    default service =
    message command =
    get quota command =
    set quota command =
    remote announce =
    remote browse sync =
    socket address = 0.0.0.0
    nmbd bind explicit broadcast = Yes
    homedir map = auto.home
    afs username map =
    afs token lifetime = 604800
    log nt token command =
    time offset = 0
    NIS homedir = No
    registry shares = No
    usershare allow guests = No
    usershare max shares = 0
    usershare owner only = Yes
    usershare path = /var/lib/samba/usershares
    usershare prefix allow list =
    usershare prefix deny list =
    usershare template share =
    panic action =
    perfcount module =
    host msdfs = Yes
    passdb expand explicit = No
    idmap backend = tdb
    idmap alloc backend =
    idmap cache time = 604800
    idmap negative cache time = 120
    idmap uid =
    idmap gid =
    template homedir = /home/%D/%U
    template shell = /bin/false
    winbind separator = \
    winbind cache time = 300
    winbind reconnect delay = 30
    winbind max clients = 200
    winbind enum users = No
    winbind enum groups = No
    winbind use default domain = No
    winbind trusted domains only = No
    winbind nested groups = Yes
    winbind expand groups = 1
    winbind nss info = template
    winbind refresh tickets = No
    winbind offline logon = No
    winbind normalize names = No
    winbind rpc only = No
    create krb5 conf = Yes
    comment =
    path =
    username =
    invalid users =
    valid users =
    admin users =
    read list =
    write list =
    printer admin =
    force user =
    force group =
    read only = Yes
    acl check permissions = Yes
    acl group control = No
    acl map full control = Yes
    create mask = 0744
    force create mode = 00
    security mask = 0777
    force security mode = 00
    directory mask = 0755
    force directory mode = 00
    directory security mask = 0777
    force directory security mode = 00
    force unknown acl user = No
    inherit permissions = No
    inherit acls = No
    inherit owner = No
    guest only = No
    administrative share = No
    guest ok = No
    only user = No
    hosts allow =
    hosts deny =
    allocation roundup size = 1048576
    aio read size = 0
    aio write size = 0
    aio write behind =
    ea support = No
    nt acl support = Yes
    profile acls = No
    map acl inherit = No
    afs share = No
    smb encrypt = auto
    block size = 1024
    change notify = Yes
    directory name cache size = 100
    kernel change notify = Yes
    max connections = 0
    min print space = 0
    strict allocate = No
    strict sync = No
    sync always = No
    use sendfile = No
    write cache size = 0
    max reported print jobs = 0
    max print jobs = 1000
    printable = No
    printing = cups
    cups options = raw
    print command =
    lpq command = %p
    lprm command =
    lppause command =
    lpresume command =
    queuepause command =
    queueresume command =
    printer name =
    use client driver = No
    default devmode = Yes
    force printername = No
    printjob username = %U
    default case = lower
    case sensitive = Auto
    preserve case = Yes
    short preserve case = Yes
    mangling char = ~
    hide dot files = Yes
    hide special files = No
    hide unreadable = No
    hide unwriteable files = No
    delete veto files = No
    veto files =
    hide files =
    veto oplock files =
    map archive = Yes
    map hidden = No
    map system = No
    map readonly = yes
    mangled names = Yes
    store dos attributes = No
    dmapi support = No
    browseable = Yes
    access based share enum = No
    blocking locks = Yes
    csc policy = manual
    fake oplocks = No
    locking = Yes
    oplocks = Yes
    level2 oplocks = Yes
    oplock contention limit = 2
    posix locking = Yes
    strict locking = Auto
    share modes = Yes
    dfree cache time = 0
    dfree command =
    copy =
    preexec =
    preexec close = No
    postexec =
    root preexec =
    root preexec close = No
    root postexec =
    available = Yes
    volume =
    fstype = NTFS
    set directory = No
    wide links = No
    follow symlinks = Yes
    dont descend =
    magic script =
    magic output =
    delete readonly = No
    dos filemode = No
    dos filetimes = Yes
    dos filetime resolution = No
    fake directory create times = No
    vfs objects =
    msdfs root = No
    msdfs proxy =

[path]
    comment = path
    path = /path/
    valid users = usera, userb, userc
    read only = No
    create mask = 0664
    directory mask = 0775
    wide links = Yes
    
por Joe Lencioni 28.07.2011 / 16:54

1 resposta

2

Geralmente, o problema é causado pela ativação de um dos seguintes itens:

  • map archive (usa unix execute bit for owner)
  • map system (usa o unix execute bit for group)
  • map hidden (usa o unix execute bit para outro)
  • inherit permissions faz com que o samba ignore create mask , etc
  • também há inherit acls , que deve ser padronizado para

"Permissões e Atributos de Arquivos no MS-DOS e Unix" em Capítulo 8. Compartilhamentos de Disco Avançados explica o acima bem.

No entanto, os produtos de escritório da Microsoft causam comportamento estranho e disparam um bug / comportamento inesperado. Mesmo com create mask e / ou force create mode definido e evitando a opção de mapear ou herdar acima, vi permissões de execução de grupo configuradas ao editar documentos usando aplicativos do Microsoft Office. Isso não acontece com outros programas, por exemplo edite um arquivo .txt com o bloco de notas e as permissões permanecem normais. O Office não cria apenas arquivos, também mexe um pouco com arquivos temporários, renomeação e permissões.

Depois de muita pesquisa, também pode ser confundido com um tipo de bug Samba POSIX ACL:

Comportamento observado no lado do Linux

As ACLs estendidas para um arquivo docx de palavra vazia criado através do menu de contexto do Windows Explorer (ainda não aberto e salvo por palavra)

$ getfacl test.docx 
# file: test.docx
# owner: tester
# group: tester
user::rw-
group::rw-
other::---

Depois de salvar via MS word 2016

$ getfacl test.docx 
# file: test.docx
# owner: tester
# group: tester
user::rw-
user:tester:rw-
group::rw-
group:tester:rw-
mask::rwx

Ao verificar a configuração do samba, no Ubuntu 16.04 LTS, parece que map archive está habilitado por padrão, mas isso deve usar o bit de execução do proprietário, não o bit de execução do grupo, então essa não foi a causa no meu caso

$ testparm -s -v 2>&1 | grep 'map archive'
map archive = Yes

Comportamento observado no lado do Windows

Usando o SysInternals Process Monitor e comparando a edição de um arquivo .txt com o notepad.exe em comparação com um arquivo .docx com WINWORD.EXE, a suíte de escritório faz muitos trabalhos criativos criando arquivos temporários, renomeando, etc. notepad.exe, WINWORD.EXE parece mexer nas listas de controle de acesso. Como visto pelo procmon

SetSecurityFile
Information:    Group, DACL

Por isso, suspeito que seja por isso que a permissão do grupo UNIX é usada pelos aplicativos do Microsoft Office.

Uma investigação mais profunda exigia a ativação da auditoria de segurança do objeto de arquivo do Windows para ver exatamente o que foi alterado. A ID de evento 4670 mostra as alterações de permissão ~WRD0000.tmp aplicadas (acho que a palavra usa isso para salvar e recuperar periodicamente se ele falhar).

Object:
    Object Server:    Security
    Object Type:    File
    Object Name:    C:\Users\<user>\Desktop\TestAudit\~WRD0000.tmp
    Handle ID:    0xfd0

Process:
    Process ID:    0x1ae4
    Process Name:    C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE

Permissions Change:
    Original Security Descriptor:
D:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;S-1-5-<SID>-1001)
    New Security Descriptor:
D:(A;;0x1200a9;;;WD)(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;S-1-5-21-<SID>-1001)

A alteração de permissão em SDDL (Security Descriptor Definition Language) é uma DACL (parte da lista de controle de acesso discricionária) onde aparece uma entrada ACE (Access Control Entry) adicional. ACE (A;;0x1200a9;;;WD) é adicionado diretamente na frente. Foi assim que interpretei:

  • A; significa permitir acesso, permaneceu o mesmo
  • ; no inheritance
  • 0x1200a9; significa FILE_GENERIC_READ | FILE_EXECUTE ler & executar acesso
  • WD significa o fiduciário "todos"

Posteriormente, o ~WRD0000.tmp é renomeado para test.docx , que vi no monitor de processo como uma operação SetRenameInformationFile . Então, no final test.docx acaba com algumas das mudanças na ACE que a palavra fez por qualquer motivo.

    
por 03.09.2016 / 02:10