[Samba] 3.0.24 -- Office read only issue, bizarre EAs and disappearing ACLs

Aaron Kincer kincera at gmail.com
Fri Jun 1 21:45:46 GMT 2007


Everyone,

I have finally resolved the new heartburn 3.0.24 on Ubuntu Feisty was 
giving me and have stumbled upon some information that might help others 
out there.

I was seeing problems with ACL entries getting mangled and disappearing, 
Excel making files read only and extended attributes doing bizarre 
things. The solution revolved around what appears to be a change in how 
ACLs are managed. With 3.0.22 on Ubuntu 6.06 and 6.10, I didn't see have 
this issue.

Without properly configured default entries on folders, Excel seems to 
mangle user and group ACLs. In the share definition below, you see map 
read only, archive, system and hidden all set to "no". Without this (at 
least for read only) saving files in Excel sets the user.DOSATTRIB value 
to 0x1 (read only) when it should be 0x20 (archive).

On a related issue, I still can't get Microsoft Word 2003 to set the 
archive bit when changes are made. I've posted a workaround here before, 
but this one still bugs me. I wish there were a way to tell Samba to set 
the archive flag on a file using user.DOSATTRIB whenever a file is 
modified. Perhaps this is not reasonable or would create too much 
overhead. I'm thinking comparing the modified date at the time a file 
was opened to the modified date when it is closed. Hopefully the 
developers out there can provide insight.

Here are steps to reproduce the problem I described above:

1) Configure server with settings below (minus the map read only = no 
setting on the share)
2) Create a folder called testfolder in the common share with no default 
ACL entries
3) Create an Excel spreadsheet in testfolder
4) Add UserA to the group GroupA that has rwx ACL permissions to the 
folder and file (command to add rwx is setfacl -m 
group:"domain+GroupA":rwx /share/common/testfolder)
5) Make UserB and GroupB the UNIX owner file and group (chown 
"domain+UserB" /share/common/testfolder/test.xls and chgrp 
"domain+GroupB" /share/common/testfolder/test.xls)
6) Open the file with UserA
7) Make a change and save it

ACL on testfolder before

# file: ../testfolder
# owner: DOMAIN+UserB
# group: DOMAIN+GroupB
user::rwx
user:DOMAIN+UserB:rwx
group::rwx
group:DOMAIN+GroupA:rwx
group:DOMAIN+GroupB:rwx
mask::rwx
other::---

ACL on test.xls before UserA makes a change:

# file: test.xls
# owner: DOMAIN+UserB
# group: DOMAIN+GroupB
user::rwx
user:DOMAIN+UserB:rwx
group::rwx
group:DOMAIN+GroupA:rwx
group:DOMAIN+GroupBA:rwx
mask::rwx
other::---

ACL on test.xls after UserA makes a change:

# file: test.xls
# owner: DOMAIN+UserA
# group: DOMAIN+GroupB
user::r--
user:DOMAIN+UserB:rwx
group::---
group:DOMAIN+GroupA:rwx
group:DOMAIN+GroupBA:rwx
mask::rwx
other::---

Reopening the file at this point shows that it is read only in Excel.

Now, reset permissions and add map read only = no to the share definition:

setfattr -n user.DOSATTRIB -v \"0x0\" /share/common/testfolder/test.xls
chown "domain+UserB" /share/common/testfolder/test.xls
chgrp "domain+GroupB" /share/common/testfolder/test.xls
setfacl -m user::rwx /share/common/testfolder/test.xls
setfacl -m group::rwx /share/common/testfolder/test.xls
setfacl -m user::rwx /share/common/testfolder
setfacl -m group::rwx /share/common/testfolder
setfacl -d -m user::rwx /share/common/testfolder
setfacl -d -m user:UserB:rwx /share/common/testfolder
setfacl -d -m group::rwx /share/common/testfolder
setfacl -d -m group:"domain+GroupA":rwx /share/common/testfolder
setfacl -d -m group:"domain+GroupB":rwx /share/common/testfolder

Then the problem is solved. The ACL for testfolder now looks like this:

# file: testfolder
# owner: DOMAIN+UserB
# group: DOMAIN+GroupB
user::rwx
user:DOMAIN+UserB:rwx
group::rwx
group:DOMAIN+GroupA:rwx
group:DOMAIN+GroupB:rwx
mask::rwx
other::---
default:user::rwx
default:user:DOMAIN+UserB:rwx
default:group::rwx
default:group:DOMAIN+GroupA:rwx
default:group:DOMAIN+GroupB:rwx
default:mask::rwx
default:other::---

If you want to propagate the default settings throughout the directory 
structure, you can do this:

find -type d /share/common -exec setfacl -d -m user::rwx {} \;

Here is information on my setup:

OS: Ubuntu 7.04 Feisty Server
Samba: 3.0.24 (3.0.24-2ubuntu according to dpkg)
acl: 2.2.42 (2.2.42-1ubuntu1)
attr: 2.4.32 (2.4.32-1.1ubuntu1)
File system: ext3 with acl and user_xattr enabled
Network environment: Active Directory native via Windows Server 2003

Samba configuration:

assume:

domain name: domain
long name: domain.local
file server name: FS01
local subnet: 192.168.1.0/24
remote subnet: 192.168.0.0/24
domain controllers: DC01 and DC02
shares root folder location: /share/

[global]
        kernel oplocks = yes
        client use spnego = yes
        workgroup = DOMAIN
        realm = DOMAIN.LOCAL
        server string = FS01
        security = ADS
        log level = 2
        log file = /var/log/samba/%m.log
        max log size = 1000
        server signing = auto
        printcap name = /etc/printcap
        os level = 0
        preferred master = no
        local master = no
        domain master = no
        remote announce = 192.168.0.255
        idmap uid = 16777216-33554431
        idmap gid = 16777216-33554431
        template shell = /bin/bash
        winbind separator = +
        winbind enum users = yes
        winbind enum groups = yes
        hosts allow = 192.168.0., 192.168.1., 192.168.2., 127.
        printing = cups
        cups options = raw
        print command =
        lpq command = %p
        lprm command =
        disable netbios = no
        netbios name = FS01
        announce as = NT Server
        announce version = 4.9
        browse list = yes
        client signing = auto
        socket options = TCP_NODELAY
        host msdfs = no
        password server = DC01, DC02

[common]
        comment = common drive
        path = /share/common
        read only = no
        guest ok = no
        nt acl support = yes
        inherit acls = yes
        inherit permissions = yes
        map acl inherit = yes
        ea support = yes
        store dos attributes = yes
        map archive = no
        map hidden = no
        map read only = no
        map system = no
        dos filemode = yes


I hope this helps someone out there.

Aaron Kincer


More information about the samba mailing list