SAMBA + правка расширенных пермишенов (ACL) через виндовые галочки [2008]
Возникла необходимость сделать в филиалы файлопомойки не на винде. Альтернатива известна - samba. Однако, было требование - на местах есть админы, и файлопомойкой должны рулить они. Галочками, из-под винды. Ибо нехорошо травмировать несчастных виндовых админов вещщами типа getfacl/setfacl. Им и так тяжело :). На этом моменте затруднений возникло немного (собственно, на галочках - тока одно, ибо в мане по smb.conf всё хорошо написано), одно из самых главных - я не мог воткнуть машину в домен, но к делу оно отношения не имеет. Итак. Задача - самба с галками, в домене. Поехали:
lissyara$ cd /usr/ports/net/samba3/
lissyara$ make install clean
Лезет синее окошко, где выбираем такие опции:
+--------------------------------------------------------------------+
| Options for samba 3.0.25a,1 |
| +----------------------------------------------------------------+ |
| | [X] LDAP With LDAP support | |
| | [X] ADS With Active Directory support | |
| | [X] CUPS With CUPS printing support | |
| | [X] WINBIND With WinBIND support | |
| | [X] ACL_SUPPORT With ACL support | |
| | [ ] FAM_SUPPORT With File Alteration Monitor | |
| | [ ] SYSLOG With Syslog support | |
| | [ ] QUOTAS With Disk quota support | |
| | [X] UTMP With UTMP accounting support | |
| | [ ] MSDFS With MSDFS support | |
| | [ ] PAM_SMBPASS With PAM authentication vs passdb backends | |
| | [ ] CLUSTER With experimental cluster support | |
| | [ ] DNSUPDATE With dynamic DNS update | |
| | [ ] EXP_MODULES With experimental modules | |
| | [X] POPT With system-wide POPT library | |
|-+----------------------------------------------------------------+-|
| [ OK ] Cancel |
+--------------------------------------------------------------------+
Собственно, у вас они могут и не все быть такие, однако, из необходимых - это winbindd, поддержка ACL и AD. ПОсле инсталляции, идём ставить керберос:
lissyara$ cd /usr/ports/security/heimdal
lissyara$ make install clean
В нём я ничё не выбрал - у меня будет LDAP из AD, проверку паролей выполняют политики домена, а иксов на сервере отродясь не держал. После инсталляции, рисуем конфиги: /etc/krb5.conf
Комментарий к конфигу кербероса - у меня, с этой машины, домен пингуется и резольвится по имени:
lissyara$ ping my-domain.local
PING my-domain.local (192.168.0.103): 56 data bytes
64 bytes from 192.168.0.103: icmp_seq=0 ttl=126 time=0.311 ms
64 bytes from 192.168.0.103: icmp_seq=1 ttl=126 time=0.398 ms
64 bytes from 192.168.0.103: icmp_seq=2 ttl=126 time=0.391 ms
64 bytes from 192.168.0.103: icmp_seq=3 ttl=126 time=0.470 ms
^C
--- my-domain.local ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.311/0.393/0.470/0.056 ms
lissyara$ host my-domain.local
my-domain.local has address 192.168.0.42
my-domain.local has address 192.168.0.43
my-domain.local has address 192.168.0.103
my-domain.local mail is handled by 10 exchserv.my-domain.local.
lissyara$
Поэтому я указал имя домена - контроллеров три, и в случае падения какого-то - автоматически подцепится другой. /etc/hosts
# SAMBA
[global]
# Рабочая группа
workgroup = MY-DOMAIN
# тип безопасности - Актив Директори
security = ADS
# Сервер паролей - тут указывается контроллер домена
# но у меня их несколько - поэтому я указал имя домена
# благо оно резольвится в их имена.
password server = MY-DOMAIN.LOCAL
# область kerberos
realm = MY-DOMAIN.LOCAL
# имя машины в "сетевом окружении"
netbios name = SMBSRV
# комментарий к имени машины
server string = SAMBA shares server
# уровень логгирования - 0-10 - но никогда не оставляейте
# в 10 - очень быстро засрёт раздел с логами
# log level = 10
# файл логов - подробности о значении переменных
# есть в man smb.conf
log file = /var/log/samba/%m.%U.log
# максимальный размер файла лога (kB)
max log size = 50000
# диапазон отмапленых winbindd`ом uid пользователей
idmap uid = 10000-20000
# диапазон отмапленых winbindd`ом gid пользователей
idmap gid = 10000-20000
# использовать дефолтовый домен (имя юзера можно
# указывать без домена)
winbind use default domain = yes
# кодировка выводимых сообщений
display charset = koi8-r
# кодировка в которой хранить на диске
unix charset = koi8-r
# в какой кодировке общаться с досовскими клиентами
dos charset = 866
# for mail
template homedir = /shares/mail/%U
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
# browseable = No
use client driver = yes
public = yes
# шара 'data'
[data]
# каммент к шаре
comment = Shares for Documents
# путь к шаре на диске
path = /shares/data
# список тех, кому разрешён доступ на чтение
read list = "@MY-DOMAIN\Domain Users"
# список тех, кому разрешён доступ на запись
write list = "@MY-DOMAIN\Domain Users"
# список тех, кому разрешёно ставить те самые галки,
# ради которых всё затевалось.
# инттересная особенность, в которую
# до конца не вкурил - в одинаковых конфигурациях,
# иногда можно
# указывать без домена, а иногда домен необходим.
# Все операции этих пользователей выполняются от рута!
admin users = "@MY-DOMAIN\Admin Users", MY-DOMAIN\lissyara
# ДОступ к шаре тока на чтение
read only = No
# маска для создаваемых файлов
create mask = 0660
# маска для создаваемых директорий
directory mask = 0770
# наследовать владельца (вышестоящей директории)
inherit owner = yes
# наследовать ACL
inherit acls = yes
# наследовать права
inherit permissions = yes
# позвоялет редактору прав из винды корректно обрабатывать
# наследуемые права
map acl inherit = yes
# блокировки - иногда бывают грабли без этого пункта
locking = no
После чего, получаем билет от кербероса (в этом и следующем действии используется доменный пользователь. Иногда, его приходится указывать как lissyara@MY-DOMAIN.LOCAL - иначе не прокатывает):
Вот, пожалуй и всё. Галочки прекрасно ставятся, поведение как у винды... Тока денег платить не надо, да активации не просит :)
P.S. Где-нить в процессе, до запуска самбы, не забываем включить ACL на самой файловой системе, где у нас шары, что-то типа такого:
lissyara$ umount /shares
lissyara$ tunefs -a enable /shares
tunefs: ACLs set
lissyara$ mount /shares
lissyara$ mount | grep acl
/dev/ad0s1g on /shares (ufs, local, soft-updates, acls)
lissyara$
P.S.2 Владельцы контроллера домена с русской виндой, скорей всего, будут летать как фанера над парижем - я слабо представляю в какой кодировке надо подсовывать юзеров в таком случае :)
P.S.3 Для тех кто в танке - до кучи можно выбрать фряху из под винды, через управление компьютером -> подключиться к другому. И точно как с виндой рулить подключенными юзерами и даже рестартовать сервисы.