У меня есть сервер 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 папки позволяет только пользователи домена написать это явно не удастся.