Samba и все, что с ней связано

DJ-root

Турист
В данном топике предлагается выкладывать советы по настройке и решении проблем с Самбой
 

DJ-root

Турист
Как внедрить Самбу, используя Active Directory для идентификации

Данный документ помогает настроить Самба-сервер на Gentoo, и помогает установить разрешения ActiveDirectory. То, что он написан под Gentoo, еще не значит, что его нельзя использовать как пример для настройки в другом дистрибутиве.

Подготовка.
  • Active Directory должна быть рабочей и настроенной.
  • Windows должна быть защищена и пропатчена (по желанию, но для Вашей безопасности)
  • У вас обязательно должна быть установлена Gentoo Linux (лично я не проверял это на другом дистре, ибо не используем на работе Active Directory. – Прим. переводчика)
  • В конфигурационных файлах Вы должны установить example.com Вашим доменом, или же использовать реальные установки.
Установка необходимых пакетов.
Вам потребуется установить следующие пакеты:
  • openldap
  • kerberos
  • samba
Code:
  # emerge openldap 
  # emerge mit-krb5
  # USE="kerberos ldap winbind"
  # emerge samba
Openldap не нуждается в конфигурации

Настройка Kerberos

Теперь конфигурационный файл file /etc/krb5.conf должен выглядеть так:
Code:
  [libdefaults]
ticket_lifetime = 600
default_realm = YOURDOMAIN
default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc  
[realms]
YOURDOMAIN = {
kdc = ip of you ads server
default_domain = YOURDOMAIN 
}
[domain_realm] 
yourdomain = YOURDOMAIN 
yourdomain = YOURDOMAIN  
[kdc]
profile = /etc/krb5kdc/kdc.conf  
[logging] 
kdc = FILE:/var/log/krb5kdc.log 
admin_server = FILE:/var/log/kadmin.log 
default = FILE:/var/log/krb5lib.logog
Эти строчка надо добавить в файл /etc/hosts:
Code:
  xxx.xxx.xxx.xxx    adserver.yourdomain   adserver
Для теста kerberos вы должны посмотреть AD домен. Введите команду:
Code:
  kinit Username@DOMAIN
После этого Вас попросят ввести пароль. Если вы введете правильный пароль, вы будете возвращены в командную строку, а данное средство - работает

Натройка SAMBA

Вы можете использовать данный пример как конфигурационный файл Самбы. (Расположение: /etc/samba/smb.conf)
Code:
[global]

  netbios name = name of your server 
socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384 
idmap uid = 10000-20000 
winbind enum users = yes 
winbind gid = 10000-20000 
workgroup = yourdomain 
os level = 20 
winbind enum groups = yes 
socket address = ip of your ads server 
password server = * 
preferred master = no 
winbind separator = + 
max log size = 50 
log file = /var/log/samba3/log.%m 
encrypt passwords = yes 
dns proxy = no 
realm = YOURDOMAIN 
security = ADS 
wins server = ip of your wins server
wins proxy = no
[exampleshare] 
comment = a comment 
path = /home/exampleshare 
browseable = yes 
read only = no 
inherit acls = yes 
inherit permissions = yes 
create mask = 700 
directory mask = 700 
valid users = @"DOMAIN+Domain Users"   <-- define your ADS groups 
admin users = @"DOMAIN+Domain Admins"  <-- define your ads groups with admin rights
Теперь необходимо запустить Самбу:
Code:
  # /etc/init.d/samba start
Присоедините Ваш Самба сервер к домену следующей командой:
Code:
  # net ads join -U Username
Мы должны запустить winbind, чтобы переубедиться в том, что аутентификация windows действительно работает. Для этого надо отредактировать файл /etc/nsswitch.conf, и изменить две строки, как на примере:
Code:
  passwd:     compat winbind  shadow:     compat  group:      compat winbind
Запускаем winbindd deamon:
Code:
  # winbindd
Добавляем winbindd в /etc/conf.d/local.start:
Code:
  # echo "/usr/bin/winbindd" >> /etc/conf.d/local.start
Прописываем samba в наш rc default:
[/code]# rc-update add samba default [/code]

Тестим уже настроенный SAMBA сервер

Переубеждаемся в том, что мы действительно можем видеть список пользователей Active Directory. Даем команду:
Code:
  # wbinfo -u
Вы увидели список пользователей Active Directory? Идем дальше.
Для просмотра Вашей группы даем:
Code:
  # wbinfo -g
Настройка разрешений.
Если Вы этого еще не сделали, можете заняться этим прямо сейчас

Поддержка ACL

Активация ACL включается на уровне ядра.
Теперь под редактируйте Ваш /etc/fstab и добавьте опции acl, как на примере. Только для каждого конкретного случая – свои:
Code:
  /dev/sda4               /home           reiserfs        noatime,acl           0 0


Установка разрешений на группы домена:


Вы можете добавить группы следующей командой:
Code:
  # setfacl -m g:"DOMAIN+YourGroup":rwx .
_________________________________
Источник: http://www.howtoforge.com
Переведено: (с) DJ-root, 19-12-2006​
 

LaG*Grab

Турист
с самбой имел очень много секса. то что написано тут, по этой инструкции - работать не будет. 99,8%
 

DJ-root

Турист
Ок, давай попробуем написать нашу версию этой же инструкции, но чтобы она заработала. Я буду очень даже за
 

i2s

Турист
Стоит Самба с 2002 года как файловый сервер, ни одного сбоя, тьфу, тьфу...
 

DJ-root

Турист
Нашел вот такой конфиг Самбы. Автор заявляет, что он рабочий
Code:
 [global]
	dos charset = CP866
	unix charset = KOI8-R
	workgroup = M
	netbios name = S
	server string = S (Samba %v)
	obey pam restrictions = Yes
	unix password sync = Yes
	encrypt passwords = true
	passwd program = /usr/bin/passwd %u
	passwd chat = *Enter\snew\sUNIX\spassword:* %n\n 
	add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u
	add machine script = /usr/sbin/useradd  -d /dev/null -g 100 -s /bin/false -M %u
	syslog = 0
	log file = /var/log/samba/%m.log
	max log size = 10000
	preferred master = Yes
	domain master = Yes
	domain logons = Yes
	socket options = IPTOS_LOWDELAY
	os level = 60
	preferred master = Yes
	admin users = root, @admins
	dns proxy = No
	ldap ssl = no
	panic action = /usr/share/samba/panic-action %d
	invalid users = root
	create mask = 0775
#	wins support = yes
#	wins server = no

# If we receive WINS server info from DHCP, override the options above. 
   include = /etc/samba/dhcp.conf
#	wins proxy = yes

[homes]
	comment = Home Directories
	path = %H/samba
	read only = No
	create mask = 0775
	directory mask = 0775
	browseable = No

[incoming]
	comment = Incoming Space
	path = /mnt/admin
	force user = samba
	force group = samba
	read only = No
	create mask = 0777
	directory mask = 0777
	guest ok = Yes
	hosts deny = 192.168.0.201
 

LaG*Grab

Турист
Блин. Я не про то что конфиг не рабочий. А про то что есть куча нюансов. Конфиг в самбе - это не самое сложное. А вот связки, сдругими демонами. Настройка самбы как PDC. Или просто файл сервака в домене - вот тут много дафига нюансов!!!
 

LaG*Grab

Турист
значиццо начнемс.
Нужен простой файл сервак - в 2000 домене. Что бы опознавал пользователей и некоторым раздавал права на шары.

cat smb.conf

# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#
# Any line which starts with a ; (semi-colon) or a # (hash)
# is a comment and is ignored. In this example we will use a #
# for commentry and a ; for parts of the config file that you
# may wish to enable
#
# NOTE: Whenever you modify this file you should run the command "testparm"
# to check that you have not made any basic syntactic errors.
#
#======================= Global Settings =====================================
[global]
log file = /var/log/samba/log.%m
nt acl support = yes
nt status support = yes
display charset = koi8-r
smb passwd file = /etc/samba/smbpasswd
load printers = no
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
socket address = 127.0.0.1 192.168.2.3
hosts allow = 127.0.0.1 192.168.2.0/255.255.255.0
hosts deny = ALL
map to guest = bad user
encrypt passwords = yes
winbind use default domain = yes
winbind separator = @
idmap uid = 10000-20000
idmap gid = 10000-20000
printer admin = @administrator
template shell = /bin/bash
dns proxy = no
netbios name = proxy
browse list = No
local master = No
prefered master = No
password server = pdc.domain.local
winbind enum users = yes
default = share
dos charset = 866
template homedir = /home/winnt/%D/%U
workgroup = DOMAIN
realm = DOMAIN.LOCAL
winbind enum groups = yes
os level = 35
security = ADS
preferred master = no
unix charset = koi8-r
max log size = 50
wins support = no
protocol = NT1


## =====================================
print command = lpr-cups -P %p -o raw %s -r # using client side printer drivers.
; print command = lpr-cups -P %p %s # using cups own drivers (use generic PostScript on clients).

# This share is used for Windows NT-style point-and-print support.
# To be able to install drivers, you need to be either root, or listed
# in the printer admin parameter above. Note that you also need write access
# to the directory and share definition to be able to upload the drivers.
# For more information on this, please see the Printing Support Section of
# /usr/share/doc/samba-<version>/docs/Samba-HOWTO-Collection.pdf
#
# A special case is using the CUPS Windows Postscript driver, which allows
# all features available via CUPS on the client, by publishing the ppd file
# and the cups driver by using the 'cupsaddsmb' tool. This requires the
# installation of the CUPS driver (http://www.cups.org/windows.php)
# on the server, but doesn't require you to use Windows at all :).

[share]

comment = Share
path = /share
create mask = 0755
browseable = yes
read list = DOMAIN@%u
write list = root DOMAIN@administrator DOMAIN@Group #(здесь перечисляем пользователей, которые могут писать в этой шаре)
force user = samba
force group = samba

=======================================================
в lmhosts должен быть указан PDC и линуксовый сервак.
типа
cat lmhosts
127.0.0.1 localhost.localdomain localhost
192.168.2.3 proxy.domain.local proxy #-эта запись самого сервака самба
192.168.2.251 pdc.domain.local dpc

=============================================

теперь Керберосс.

cat 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]
default_realm = DOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_ldc = true

[realms]
DOMAIN.LOCAL = {
default_domain = domain.local
kdc = pdc.domain.local
# admin_server = pdc.DOMAIN.local
}

[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

[pam]
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false

[login]
krb4_convert = true
krb4_get_tickets = false

================================================

Ну и не забываем еще про nsswitch
cat nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
# nisplus or nis+ Use NIS+ (NIS version 3)
# nis or yp Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the local database (.db) files
# compat Use NIS on compat mode
# hesiod Use Hesiod for user lookups
# [NOTFOUND=return] Stop searching if not found so far
#

# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis

passwd: files winbind
shadow: files nisplus
group: files winbind

#hosts: db files nisplus nis dns
hosts: files dns winbind

# Example - obey only what nisplus tells us...
#services: nisplus [NOTFOUND=return] files
#networks: nisplus [NOTFOUND=return] files
#protocols: nisplus [NOTFOUND=return] files
#rpc: nisplus [NOTFOUND=return] files
#ethers: nisplus [NOTFOUND=return] files
#netmasks: nisplus [NOTFOUND=return] files

bootparams: nisplus [NOTFOUND=return] files

ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files

netgroup: nisplus

publickey: nisplus

automount: files nisplus
aliases: files nisplus

=================================================

теперь стартуем самбу.
делаем
kinit administrator@DOMAIN

Регистрация в домене самбы

net ads join -U Administrator
net rpc join -U Administrator
=================================================

проверяем
wbinfo -u
wbinfo -g
должен выдать список в первом случае всех пользователей домена
во втором случае - группы в домене


Вроде в принцыпи всё.
Дистрибутив Мандрива 2006.
Самбу беру из дистра.
rpm -qa | grep samba
samba-winbind-3.0.20-3mdk
samba-common-3.0.20-3mdk
samba-server-3.0.20-3mdk
samba-client-3.0.20-3mdk

rpm -qa | grep krb
krb5-workstation-1.4.2-1mdk #-обратите внимание на клиента кербероса, он не ставиццо по умолчанию, но он есть :)
libkrb53-1.4.2-1mdk
 
Last edited by a moderator:

DJ-root

Турист
Нашел интересную статью по теме

Samba: Модернизация "сетевого окружения" Windows

Хочу поделиться способом модернизации "сетевого окружения" Windows, который успешно внедрен и работает в нашей сети. Что это дает:

1) Полностью администрируемое сетевое окружение.
2) Избавляет от лишних рабочих групп и имен компов (некоторые забывают сменить или специально меняют каждый день) - пользовательские имена вообще не будут учитываться
3) Ускоряет его работу - не нужно тратить время на поиск имени компа, служба WINS вообще больше не понадобится.
4) Любая частота обновления списка компов (хоть каждую минуту).

Метод я придумал сам, но вот по части программирования не очень силен, возможно некоторые моменты можно сделать лучше и проще, так что не пинайте :). Предполагается, что админ уже имеет некоторые познания и я не буду останавливаться на базовых понятиях что такое DNS, зачем нужен Master-browser, как настроить Samba и т.д. - этой инфы предостаточно.

Итак, что необходимо:
1) Выделенный сервер под Unix-подобной ОС
2) Установленная на нем Samba и настроенная в качестве Master-browser
3) Perl и модуль IO::Socket для него
4) Желательно также, чтобы в сети работала служба DNS и ИП-адреса компов резолвились в имена.

В моем случае используются 2 рабочие группы, отдельные мастер-броузеры на каждую. ОС - FreeBSD 4.9 и 6.1, Perl 5.6, Samba 2.2.8

Принцип работы

Samba держит сетевое окружение в текстовом файле. Все компы переодически опрашиваются бродкастами и этот файл обновляется. Далее мы сделаем скрипт, который будет сканировать компы на предмет файлового доступа (139 TCP-порт), составлять список рабочей группы в нужном формате и заменять оригинальный файл Самбы. Юзеры в сетевом окружении увидят содержимое нового файла.

Именем компа делается его IP-адрес, а в описании - название (из DNS). Т.к. WindowsXP отображает все наоборот, то в списке компы будут в виде: " название (IP-адрес) ". Обращение к компам происходит мгновенно – время на разрешение имени в IP-адрес не затрачивается.

Файл сетевого окружения называется browse.dat и обычно находится в каталоге /var/lock. Структура довольно простая:

"WORKGROUP1" c0001000 "SAMBA_SERVER" "WORKGROUP1"
"WORKGROUP2" c0001000 "S_SERVER" "WORKGROUP2"
"SAMBA_SERVER" 400d9a03 "это сервер" "WORKGROUP1"
"COMP1" 40011203 "комп номер1" "WORKGROUP1"
"COMP2" 40011003 "комп номер2" "WORKGROUP1"
Строки с кодом c0001000 описывают рабочие группы и указывают на мастер-броузера этой группы. Остальные строки - компы, сначала имя, потом код, описание и рабочая группа.

Теперь собственно сам скрипт с подробными комментариями.

scan139.pl

Code:
#!/usr/bin/perl
   
  use IO::Socket;
   
  $NetADDR    = "172.20.99.";     # Задаем подсеть
  $port       = 139;              # Порт - 139
  $proto      = "tcp";            # протокол TCP
  $Timeout    = 0.01;             # таймаут сессии (в сетях с потерями можно увеличить до 0.02-0.1с)
   
    ### подпрограмма вывода строки в формате файла browse.dat ###
  sub add_to_list {   
     $HostNAME = substr(`nslookup $HostADDR | grep Name `,9);  # резолвим имя компа из IP-адреса
     $HostNAME =~ s/.vesnianka.net\n//;                        # отбрасываем доменную часть
     print '"';
     print $HostADDR;                                          # вставляем ИП-адрес
     print '"';
     print " 40011007 ";                                       # вставляем код
     print ' "';
     print $HostNAME;                                          # вставляем описание - имя из DNS
     print '"';
     print ' "MASHEROVA-99" ';                                 # вставляем рабочую группу
     print "\n";
  }
   
   ### формируем первые 2 статические строки, которые описывают рабочие группы и их броузеры ###
  print '"MASHEROVA-99" c0001000 "172.20.99.100" "MASHEROVA-99" ';
  print "\n";
  print '"SKYNET"       c0001000 "172.20.97.250"   "SKYNET" ';
  print "\n";
   
  $i = 1;
  while ( $i < 255 ) {                              # сканировать все ИП-адреса до 254
                            
   $HostADDR = $NetADDR.$i;                         # текущий ИП-адрес          
   
  ### создаем сокет (TCP-коннект на 139 порт) ###  
    my $sock = IO::Socket::INET->new(PeerAddr=> $HostADDR,  
     PeerPort => $port,
     Proto => $proto,
     Timeout => $Timeout ) && add_to_list;          # в случае успеха выполнить подпрограмму
    close($sock);                                   # закрыть сокет
   
  $i++;                                             # и т.д. коннект на все ИП от 1 до 254
  }
В результате выполнения скрипт выводит строки, в которых описываются найденные компы. При таймауте 0,01 с на выполнение скрипта затрачивается всего несколько секунд.

В зависимости от ОС вывод команды nslookup может отличаться, нужно править под свои нужды. Если в сети нет DNS-сервера - можно сделать просто текстовый файл с описанием пары "ИПшник имя" для всех компов и брать имя оттуда. и еще обратите внимание, что в скрипте используются и двойные кавычки, и одинарные кавычки и апостроф - все это имеет большое значение.

Теперь остается только заменить исходный browse.dat. Но тут есть загвоздка - если просто заменить файл, то Самба через минуту его опять перезапишет. Чтобы этого не было, нужно запретить Самбе изменять файл browse.dat. Я придумал только один способ - установить на browse.dat флаг системного неизменяемого файла (schg), пока этот флаг стоит даже root не может его изменить. Перед обновлением флаг снимается и опять устанавливается. Все это делает еще один скриптик:

browser_update.pl


Code:
#!/usr/bin/perl
   
  `/usr/local/browsing/scan139.pl > /var/lock/new_list`;  # сканируем и кидаем список в new_list
   
  sleep(10);                                              # ждать 10 сек 
   
  `chflags noschg /var/lock/browse.dat`;                  # снимаем флаг schg
  `cp /var/lock/new_list /var/lock/browse.dat`;           # заменяем browse.dat содержимым new_list
  `chflags schg /var/lock/browse.dat`;                    # устанавливаем флаг schg опять
Оба скрипта нужно сделать исполняемыми (мод +х). Чтобы сетевое окружение обновлялось, нужно добавить задание для крона. Например, такое задание обновляет список рабочей группы каждые 5 минут:

Code:
        */5  *  *  *  *  root  /usr/local/browsing/browser_update.pl
Естественно, все пути могут отличатся в зависимости от ОС и версии Самбы. Тут уж я думаю опытные админы сами догадаются как найти и что изменить. Если рабочих групп две (как в моем случае) - на каждую должен быть отдельный мастер-броузер и запускать такой скрипт тоже на каждом.

Источник: http://www.opennet.ru/
 
Last edited by a moderator:

DJ-root

Турист
Добавлю по поводу статьи, опубликованной выше - очень хорошее руководство к действию. Послу прочтения данной статьи можно Самба сервер с локальной авторизацией поднять буквально за 15 минут. И все это счастье будет работать.
Как на меня - Маст Рид однозначно
 

DJ-root

Турист
На днях IBMовцы выложили новую статью по теме Самбы. Там рассказывается, как настроить последнюю в качестве члена домена, или контроллера домена или резервного контроллера домена.
http://www.ibm.com/developerworks/ru/edu/samba2/
 
Top