Назад | Перейти на главную страницу

Samba игнорирует списки ACL POSIX

У меня есть сервер LTS Ubuntu 10.04.4, на котором запущена Samba, и я присоединился к нашему домену Active Directory с помощью PBIS (ранее также открытого). Samba настроен для аутентификации с использованием пользователей / групп AD, и это работает правильно. Кроме того, стандартные разрешения Linux (пользователь, группа, другие) правильно работают с Samba. НО, Samba, похоже, полностью игнорирует любые разрешения, установленные расширенными ACL.

Я пробовал различные конфигурации smb.conf, рекомендуемые в другом месте, и ни одна из них, похоже, не оказала никакого эффекта.

Настройка машины:

[shared]
   comment = , 
   nt acl support = yes
   admin users = 
   force user = 
   force group = \domain^users
   create mask = 0770
   directory mask = 0770
workgroup = 
dns proxy = no
server string = 
load printers = no
cups options = raw
guest account = pcguest
log file = /var/log/samba/%m.log
max log size = 50
security = ADS
realm = 
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = 172.16.0.20 10.4.1.20 127.0.0.1
bind interfaces only = yes
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
map to guest = Bad User
idmap backend = idmap_rid:=16777216-33554431
nt acl support = yes
inherit acls = Yes
map acl inherit = Yes
map archive = no
map hidden = no
map read only = no
map system = no
store dos attributes = yes
inherit permissions = Yes
template shell = /bin/false
winbind use default domain = no

Что мне здесь не хватает, чтобы Samba работала с расширенными ACL?

Пример того, что происходит

У меня есть папка в шаре самбы. Сама общая папка широко открыта в нашем домене (параметр «Допустимые пользователи» установлен в группу «Пользователи домена» для домена AD). В этом общем ресурсе у меня есть папка с более ограниченными разрешениями на уровне файловой системы (принадлежащая одним пользователем AD, с группой, установленной в группу AD с несколькими людьми в ней и разрешениями chmod-ed на 770)

Проблема в том, что мне нужно предоставить доступ к этой папке другой группе AD, поэтому я запускаю "setfacl -m u :: rwx", чтобы дать им разрешение на доступ к ней. Это работает в Linux (если я использую ssh для одного из этих пользователей и перехожу к папке) ... но если я подключаюсь к общему ресурсу SMB с тем же пользователем и пытаюсь перейти к этой папке, доступ будет запрещен.

Опаздывая с этим вопросом, я все же хотел бы указать на официальную Документация Samba для поддержки ACL. Это справедливо для Samba 4.0.0 и более поздних версий, которые, конечно, не были доступны в то время, когда задавался этот вопрос. Но поскольку вопрос появляется в поисковых системах, эта ссылка может быть полезной.

Основные шаги:

1. Убедитесь, что файловая система поддерживает acls (в настоящее время ext4 поддерживает по умолчанию, дополнительные параметры монтирования не требуются)

2. Убедитесь, что Samba скомпилирована с поддержкой ACL. (Да, по умолчанию в Ubuntu 14.04 LTS):

smbd -b | grep HAVE_LIBACL

3. Включите ACL, установив следующие параметры в [global] раздел /etc/samba/smb.conf:

vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes

Для получения подробной информации посетите официальные документы, указанные выше.

Это потому что force user, force group, create mask и directory mask принудительно использовать традиционные разрешения в стиле unix, которые нельзя комбинировать с наследованием ACL. Ваши списки ACL по умолчанию должны находиться на уровне файловой системы папки, а не в самой общей папке samba, чтобы наследование работало, но имейте в виду, что противоречивые разрешения всегда будут запрещать доступ, например. когда пользователь имеет разрешение как пользователь, но не как группа, samba запрещает доступ при использовании ACL (что мне кажется ошибкой), например: пользователь никто является членом группа тогда ACL не должны позволять никому & nogroup разрешение на запись, иначе доступ на запись будет запрещен. Только самба так себя ведет!

Возможный способ создания папки с наследованием разрешений по умолчанию:

me@myHost:/shares$ getfacl myShare/
# file: myShare/
# owner: JohnDoe
# group: domain\040users
user::rwx
group::rwx          #effective:r-x
group:domain\040users:rwx   #effective:r-x
group:domain\040admins:rwx  #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:domain\040users:rwx
default:group:domain\040admins:rwx
default:mask::rwx
default:other::r-x

Раздел с default:* values ​​- интересная часть для наследования, потому что любой новый файл или папка получит их при создании внутри myShare папка. Видеть setfacls страница руководства для деталей настройки дефолт: значения в файле или папке. Теперь проблема с использованием create mask или directory mask в папке с по умолчанию: ACL set состоит в том, что самба затем переопределит эти значения по умолчанию, и в большинстве случаев эти маска Операторы полезны только до тех пор, пока вам нужна вся папка и файлы, содержащие только одного владельца и группу. ACL сложнее настроить, но они предлагают гораздо большую гибкость, как обычно, на машинах с Windows. Самба чтит эти default:*:: разрешения inherit acls необходимо установить в [global] раздел:

[global]
    ; Important if ACLs (eg: setfacl) contain default entries
    ; which samba honors only if this is set to 'yes'.
    inherit acls = yes

[...]

[myShare]
    comment = Put your files here
    path = /shares/myShare
    writeable = yes

Это позволит создать общий ресурс, в который каждый сможет писать в общий ресурс ... но (!), что не обязательно означает, что это разрешено на уровне файловой системы, потому что myShare папка просто позволяет пользователи домена. В любом случае для параноиков права доступа к общим ресурсам можно сузить, разрешив только определенные группы:

    write list = @"domain users"

что подразумевает writeable=yes но только для групп, определенных в написать список. Убедитесь, что разрешения для общего ресурса и для папки не противоречат друг другу, например:

    write list = @"other group"

разрешит другая группа писать в общий ресурс, но так как myShare папки позволяет только пользователи домена написать это явно не удастся.