SAMBA с авторизацией в AD и поддержкой NT ACL


Автор: urgor.
Когда-то давно, когда деревья были большие... был у меня сервак на вынь 2к и держал он контроллер домена, там же были заведены принтеры, кучка шар и паслись на нем табуны пользователей. И жили все счастливо... ну почти все, те у кого был вынь98, да еще и бездоменный, то вообще на сервак зайти не могли, то печатать он от них не хотел. Вообщем часть 98х перевел на ХР, а вот что делать с остальными? Пробовать уломать начальство на новые CAD пакеты под ХР и пытаться не стал, а конструкторов и эти проги устраивали... им шар хотелось, да печати. Подумав, решил на свободной машинке собрать файлопомойку с сервером печати на пакете Samba с авторизацией юзеров в AD (у кого были там учетки).
Port: samba-3.0.22,1
Path: /usr/ports/net/samba3
Info: A free SMB and CIFS client and server for UNIX
Maint: timur@gnu.org
WWW: http://www.samba.org/
asu-004# cd /usr/ports/net/samba3
asu-004# make && make install && make clean
---------------------------------------------------------------------¬
¦ Options for samba 3.0.22,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 ¦ ¦
¦ ¦ [ ] AIO_SUPPORT With experimental AIO support ¦ ¦
¦ ¦ [X] SYSLOG With Syslog support ¦ ¦
¦ ¦ [X] QUOTAS With Quota support ¦ ¦
¦ ¦ [ ] UTMP With UTMP support ¦ ¦
¦ ¦ [ ] MSDFS With MSDFS support ¦ ¦
¦ ¦ [ ] SAM_XML With XML smbpasswd backend ¦ ¦
¦ ¦ [ ] SAM_MYSQL With MYSQL smbpasswd backend ¦ ¦
¦ ¦ [ ] SAM_PGSQL With PostgreSQL smbpasswd backend ¦ ¦
¦ ¦ [ ] SAM_OLD_LDAP With Samba2.x LDAP legacy smbpasswd backend ¦ ¦
¦ ¦ [ ] SMBSH With SMBSH wrapper for UNIX commands ¦ ¦
¦ ¦ [ ] PAM_SMBPASS With SMB PAM module ¦ ¦
¦ ¦ [ ] EXP_MODULES With experimental module(s) ¦ ¦
¦ ¦ [X] POPT With system-wide POPT library ¦ ¦
+-L-----v(+)---------------------------------------------------------+
¦ [ OK ] Cancel ¦
L---------------------------------------------------------------------
За собой самба потянет CUPS (сервер печати) и еще по мелочам :) Сначала отрихтуем CUPS.
В файлах mime.convs и mime.types разкомментировать строки:
[mime.convs]
application/octet-stream application/vnd.cups-raw 0 -
[mime.types]
application/octet-stream
Дабы cups пропускал потоки данных не форматируя их.
Добавляем в /etc/rc.conf строку cupsd_enable="YES"
asu-004# cd /usr/local/etc/cups
asu-004# cat /usr/local/etc/cups/cupsd.conf
AccessLog /var/log/cups/access_log
DataDir /usr/local/share/cups
ErrorLog /var/log/cups/error_log
FontPath /usr/local/share/cups/fonts
LogLevel debug
Printcap /etc/printcap
PrintcapFormat BSD
RequestRoot /var/spool/cups
ServerTokens Minor
Port 127.0.0.1:631
Port 192.168.0.201:631
Browsing Off
BrowseDeny All
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.0.*
</Location>
<Location /admin>
AuthType Basic
AuthClass System
## Restrict access to local domain
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.0.*
#Encryption Required
</Location>
asu-004# /usr/local/etc/rc.d/cupsd.sh start
Starting cupsd.
Далее бровсером ломимся на http://192.168.0.201:631
На запрос пароля, вводим данные рута и устанавлеваем принтеры.
Я ставил тип очереди как RAW queue, т.к. драйвера ставились на виндовые машины.
После чего можно перейти к настройкам самбы.
Пишем в /etc/krb5.conf
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log
[libdefaults]
ticket_lifetime = 24000
default_realm = KK.COM
dns_lookup_realm = false
dns_lookup_kdc = false
kdc_req_checksum_type = 2
checksum_type = 2
ccache_type = 1
forwardable = true
proxiable = true
[realms]
KK.COM = {
kdc = 192.168.0.1:88
admin_server = 192.168.0.1:749
default_domain = kk.com
[domain_realm]
.kk.com = KK.COM
[pam]
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
[login]
krb4_convert = false
krb4_get_tickets = false
Редактируем файл /etc/nsswitch.conf
group: files winbind
group_compat: nis
hosts: files dns
networks: files
passwd: files winbind
passwd_compat: nis
shells: files
Редактируем файл /usr/local/etc/smb.conf
[global]
# dos charset = cp866 # Если у вас нет юзеров с логином русскими
# unix charset = koi8-r # буковками, можете раскоментировать, тогда
# display charset = cp866 # в консоли русские файлики будут отображаться
# нормально
workgroup = KK
realm = KK.COM
netbios name = asu-004
server string = Samba Server %v
security = ADS
auth methods = winbind
map to guest = Bad User
password server = 192.168.0.1
printer admin = root
client NTLMv2 auth = Yes
log file = /var/log/samba/log.%m
max log size = 50
client signing = Yes
disable spoolss = Yes
preferred master = No
local master = No
domain master = No
dns proxy = No
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = Yes
inherit acls = Yes
hosts allow = 192.168.0., 192.168.1., 127.
map acl inherit = Yes
case sensitive = No
nt acl support = yes
os level = 10
socket options = TCP_NODELAY
load printers = yes
printing = cups
printcap name = /etc/printcap
guest account = nobody
guest ok = yes
# debug level = 3
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
use client driver = yes
public = yes
[tmp]
comment = Temporary file space
path = /tmp
read only = No
create mask = 0666
create mode = 666
directory mode = 666
directory mask = 0777
guest ok = Yes
[films]
comment = Films, films, films
path = /var/shares/films
read list = "@KKDomain Users"
write list = "@KKDomain Admins"
read only = No
create mode = 666
directory mode = 666
create mask = 0666
directory mask = 0777
Сверяем часы с AD, получаем билетик
asu-004# net time set -S 192.168.0.1
Wed Jun 14 13:42:56 MSD 2006
asu-004# kinit urgor@KK.COM
urgor@KK.COM's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week
asu-004# klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: urgor@KK.COM

Issued Expires Principal
Jun 14 13:45:20 Jun 14 20:25:05 krbtgt/KK.COM@KK.COM
Добавляем в /etc/rc.conf строки
nmbd_enable="YES"
smbd_enable="YES"
winbindd_enable="YES"
Пускаем самбу, заводим комп в домен:
asu-004# /usr/local/etc/rc.d/samba.sh start
Starting SAMBA: removing stale tdbs :
Starting nmbd.
Starting smbd.
Starting winbindd.
asu-004# net ads join -U urgor
urgor's password:
Using short domain name -- KK
Joined 'ASU-004' to realm 'KK.COM'
asu-004# wbinfo -p
Ping to winbindd succeeded on fd 4
asu-004# wbinfo -t
checking the trust secret via RPC calls succeeded
asu-004# wbinfo -g
должен быть показан список групп
asu-004# wbinfo -u
должен быть показан список юзеров
Приводим файл /etc/pam.d/login к виду:
# auth
auth required pam_nologin.so no_warm
auth sufficient /usr/local/lib/pam_winbind.so
auth sufficient pam_opie.so no_warm no_fake_prompts
auth requisite pam_opieaccess.so no_warm allow_local
auth required pam_unix.so no_warm try_first_pass
# account
account sufficient /usr/local/lib/pam_winbind.so
account required pam_unix.so
# session
session required pam_permit.so
И пробуем войти :) На этом можно и закончить... но! Хотелось бы еще поиметь nt acl.
Для этого надо загрузиться в однопользовательском режиме и включить ACL в суперблоке файловой системы.
/sbin/tunefs -a enable /fs
где /fs обозначает точку монтирования файловой системы (/, /usr, и так далее). Если Вы не имеете доступа к терминалу машины, можно добавить вызов команды tunefs в начало файла /etc/rc для включения ACL при последующей загрузке. Если используется файловая система UFS2, включение ACL закончено. Для включения ACL необходима только строчка "opions UFS_ACL", встроенная по умолчанию в GENERIC-конфигурацию ядра.
Все усложняется, если Вы, подобно многим пользователям FreeBSD 5.0, используете UFS1 (FreeBSD 5.1 и выше используют UFS2 как файловую систему по умолчанию). ACL основаны на расширенных атрибутах, которыми не обладает UFS1.
Для установки расширенных атрибутов Вы должны добавить строки options UFS_EXTATTR и options UFS_EXTATTR_AUTOSTART в файл конфигурации ядра системы, после чего собрать и установить новое ядро. Не перезагружайте машину - еще необходимо инициализировать расширенные атрибуты на каждой файловой системе. Например, для инициализации атрибутов для /var требуется выполнить следующее:
%mkdir -p /var/.attribute/system
% cd /var/.attribute/system
% extattrctl initattr -p /var/ 388 posix1e.acl_access
% extattrctl initattr -p /var/ 388 posix1e.acl_default
Вместо /var/ используйте любую файловую систему, которая будет нужна. После инициализации перезагрузитесь и атрибуты будут включены.

Обновлено: 12.03.2015