Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [HOWTO]: Samba в роли PDC/файлСервера для небольшого офиса  (Прочитано 7828 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gard

  • Автор темы
  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
Привет всем!  :)
Решил поделиться с общественностью небольшими результатами собственного просветления. Сам сижу на Arch Linux, но форум Ubuntu более посещаемый, вдруг ищущий найдет. =) Работаю в малоизвестном филиале известного ВУЗа. Так уж повелось еще до моего прихода, что все документы пользователи хранят на своих компьютерах, обмениваются ими через расшаренные сетевые папки. ОС у всех Windows XP. Сотрудников около 15ти человек, есть еще студенты. Долго думал (работаю чуть более года), занимался прочими делами, но чешется и хочется «сделать все как надо». Итак, нужно чтобы данные пользователей хранились в надежном месте и не были доступны кому попало. На роль сервера уже присматриваю один из партии новых компьютеров, однако, придется раскручивать начальство на 3 надежных жестких диска и ИБП. Сервер будет ставиться на soft raid 1. Почему 3 диска? Третий запасной, если выйдет из строя один диск в массива. Купить что-либо у нас подобно шествию по кругам ада, безнал, счета и прочее.. лучше запастись сразу. Ну и закончим лирику, перейдем к конкретике. Итак, желательно, чтобы:
  • Пользователь имел личную папку на сервере для рабочих документов
  • Пользователи, входящие в 1 группу имели полный доступ к общей шаре группы
  • Профили пользователей... сначала хотел сделать их перемещаемыми, но потом отказался от этой затеи, однако в конфиге соответствующие секции будут, просто закомментированные.
  • Работало перенаправление папок с профиля пользователя (МоиДокументы, РабочийСтол, МоиРисунки) на сервер, то есть файлы должны фактически находиться на сервере.
Идея с перемещаемыми профилями вообще довольно двояка. Я посмотрел размер профиля нашего бухгалтера, он оказался размером примерно 6Гб. Немало, как такой профиль таскать туда-сюда по сети.. Отсюда возникло желание исключить из профиля каталоги «Мои документы» и «Рабочий стол», поместив их в личный каталог пользователя, чтобы работа с документами в этих каталогах проходила прямо на сервере и при открытии/закрытии сеанса  данные оттуда уже не перемещались. Однако, раз у сотрудников нет ИБП у каждого компьютера, сетевое оборудования (хабы) также не запитано от ИБП, то оставлять профили перемещаемыми, пусть даже с перенаправлением некоторых папок - очень непонятная идея. Если свет мигнет, то что будет с перемещаемым профилем.. непонятно. В общем сделать можно, но я воспользуюсь только редиректом каталогов на сервер, перемещаемые профили включать не буду. Так сказать начальные условия и предположения:
  • Пользователей не много, человек 15, группа изначально одна
  • Внутренняя сеть одноранговая, имеет адресацию 192.168.2.0/24
  • В сети работает кэширующий dns, но нам он здесь не нужен
  • Адреса, default gw, dns всем компьютерам выдает имеющийся DHCP-сервер
  • Samba будет у нас в роли PDC
  • Учетные записи samba будут соответствовать учетным записям linux с samba на борту
  • Управление учетными записями samba будет происходить с помощью smbpasswd
  • Будут использованы простейшие скриптики для добавления групп samba и пользователей
Как я уже сказал, по большому счету мне нужна одна группа пользователей, это сотрудники учебного отдела, компьютеры студентов включать в домен я не хочу по паре причин: необходимость создавать кучу учеток, которые для учебной части я создам можно сказать руками; отсутствие надобности. Да и вообще неизвестно сколько я проработаю на этой работе и оставлять потом кому лес учеток и каталогов на самбе будет страшно. Компьютеры студентов будут просто в рабочей группе. Но, несмотря на то, что группа нужна одна, хочется сделать так, чтобы добавление новой группы не требовало перекройки основного конфига samba. Дабы не запутаться, представлю будущую схему зрительно:
Из рисунка видно, в каталоге /home/group1 будут каталоги:
  • share/ - общая шара для пользователей из группы group1
  • data/ - для личных каталогов пользователей из группы group1, личные каталоги будут называться по имени пользователя
  • netlogon/ - netlogon каталог, для стартового скрипта и умолчального (для группы) профиля (далее - подробнее)
  • Каталоги .profile/ - для перемещаемого профилей пользователя и .profile_data для перенаправляемых папок пользователя. В каталоге .profile_data будут созданы каталоги Desktop, Documents, Pictures, именно их содержимое пользователь должен видеть у себя на рабочем столе или же в документах. Заметьте, что .profile и .profile_data начинаются с точки, это скрытые каталоги, пользователь (пока он не включит отображение скрытых папок) их видеть в своем личном каталоге вообще не будет, от греха подальше.
В общем случае в /home будет столько каталогов групп, сколько будет групп пользователей samba, итак /etc/samba/smb.conf:
[global]
workgroup = URFU-NSK
netbios name = TUX
server string = PDC
#wins support = Yes
#name resolve order = wins bcast hosts
name resolve order = bcast hosts
domain logons = Yes
preferred master = Yes
os level = 255
time server = yes

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = lo eth0 192.168.2.0/24
bind interfaces only = Yes
hosts allow = 192.168.2. 127.

username map = /etc/samba/smbusers
map to guest = Bad User
guest account = gard
#invalid users = root

#add group script = /usr/sbin/groupadd %g
#delete group script = /usr/sbin/groupdel %g
#add user script = /usr/sbin/useradd -M -N -s /bin/false -g users %u
#delete user script =  /usr/sbin/userdel '%u'
#set primary group script = /usr/sbin/usermod -g %g %u
add machine script = useradd -M -N -s /bin/false -g machines %u

logon script = login.bat
logon path =
# logon path = \\%L\profile

[netlogon]
comment = logon service for different groups
path = /home/%G/netlogon
valid users = +%G
read only = Yes
browseable = no

#[profile]
# comment = network profiles for users
# path = /home/%G/data/%U/.profile
# profile acls = yes
# create mask = 0600
# directory mask = 0700
# valid users = +%G
# csc policy = disable
# read only = no
# browseable = no

#Пользовательские каталоги, общие шары
[data]
comment = home folder for user
path = /home/%G/data/%U
valid users = %U
#veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/
#delete veto files = yes
csc policy = disable
read only = no
browseable = no

[share]
comment = shared folder
path = /home/%G/share
valid users = +%G
#veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/
#delete veto files = yes
csc policy = disable
read only = no
browseable = no
create mask = 0770
directory mask = 0770

[netShare]
comment = shared Folder for all users
path = /home/gard/NetShare
csc policy = disable
writable = yes
guest ok = yes
Теперь немного пояснений. В начале конфига в секции [global] дается необходимое описание,  затем идет привязка к подсетям и интерфейсам, чтобы samba никуда больше не вещала. Дальше указывается файл соответствий /etc/samba/smbuser, в котором задается соответствие linux-пользователя windows-пользователю Administrator. Обычно там пишут как минимум: root=Administrator, а можно так:
[root@tux ~]# cat /etc/samba/smbusers
pdcadmin = Administrator
То есть мой linux-пользователь pdcadmin будет соотнесен с Administrator'ом windows. Дальше устанавливается директива map to guest = Bad User, это сделано для того, чтобы любой пользователь, который не смог авторизоваться в samba получил привилегии гостя, гостю будет соответствовать linux-пользователь anonymous. В самом конце конфига определен ресурс [netShare], к которому как раз такой пользователь сможет иметь доступ. То есть все не авторизованные (гости) смогут пользоваться шарой netShare.

В конце секции [global] присутствует очень важный параметр add machine script, для чего это и зачем можно прочитать тут, я уж не буду переписывать написанное. И, наконец, описывается местоположение logon-скрипта и местоположение перемещаемых профилей, которое у меня закомментировано, а раскомментированное имеет пустое значение (как я говорил, я отключил у себя перемещаемые профили).

Наш скрипт, который можно выполнить на клиенте, при его входе в домен будет иметь имя login.bat, а о том, где он будет располагаться говорит секция [netlogon], это как раз ее предназначение. Параметр path = /home/%G/netlogon говорит, что login.bat это /home/group1/netlogon/login.bat для пользователей группы group1, для group2 аналогично /home/group2/netlogon/login.bat.

Теперь к logon path, хоть он и отключен. Если включить его, то Samba скажет пользователю, входящему в домен искать профиль по адресу \\%L\profile, у нас это будет \\TUX\profile. Секция [profile] говорит о том, где будут находиться перемещаемые профили пользователей на самом деле. Для пользователя user1 из группы group1 профиль будет находиться в /home/group1/data/user1/.profile (см. рисунок выше =). Директива  csc policy = disable запрещает кэширование клиентом файлов в каталогах профиля.

В дальше идущих секциях описывается положение личных каталогов пользователя — [data], каталогов, общих для групп пользователей — [share] и вышеупомянутой шары для гостей [netShare]. Тут в принципе ничего необычного. Небольшой момент... У меня указан параметр valid users = +%G . Поначалу я пытался тут написать просто %G, но не стоит забывать, что здесь группу нужно обозначать как @группа или же +группа. А вот если мы хотим указать не группу, а пользователя, то уже просто %U или user. Вообще об этом и куче других интересных параметров можно почитать на замечательном сайте smb-conf.ru.

Пока не будем заводить новых пользователей, а займемся нашим [nelogon]. Начнем с login.bat скрипта. У меня он имеет следующий вид:
@echo off;

rem Монтирование личного каталога и шары группы на сетевые диски w:\ и z:\
net use x: \\TUX\data
net use z: \\TUX\share

net time \\TUX /SET /YES
Cначала пользователю монтируются 2 сетевых диска, это его личный каталог и шара группы. Далее устанавливается использование сервера времени. Кстати, в конфиге samba это тоже было прописно, так что нужно дополнительно поднять ntpd-сервер. Это может быть важно при перемещаемых профилях и включенных автономных файлах на клиенте. Любой сбой сети и, если время не синхронизировалось, будет невозможно определить какая же версия файла является последней.

Как же мы будем перенаправлять папки пользователя на сервер, этого можно было бы добиться, добавив в login.bat строки:rem Перенаправление "МоиДокументы" и "РабочийСтол" в вышесозданные каталоги на сервере
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Personal" /d "w:\Documents" /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Desktop"  /d "w:\Desktop" /f
Но мы сделаем по другому. Что происходит, когда пользователь авторизуется в домене и находит свой NETLOGON path? Он начинает искать "профиль - эталон", чтобы на его основе создать свой профиль, если его нет - клиент использует "эталонный профиль" с локального компьютера. Что такое "Эталонный профиль"? Это профиль по умолчанию для новых пользователей. А точнее - это набор каталогов и файлов в каталоге Default User для Windows XP (для Windows7 он кажется называется просто User, но могу ошибаться, пока не сталкивался). Итак, при авторизации нового пользователя в домене, его локальный профиль или его перемещаемый профиль будет создан на основе профиля Default User, который находится в [netlogon] рядышком с login.bat. Но кто его туда положит, спросите вы? Пока никто, но нужно его туда положить. Взять его можно в любом дистрибутиве Windows XP. Сначала включим отображение скрытых файлов, затем идем в c:\Documents And Settings\ и там видим тот самый Default User - умолчальный профиль для новых пользователей. Перед тем, как его скопировать в [netlogon], а именно в /home/%G/netlogon мы его немного модифицируем. В нем есть файл NTUSER.DAT, этот файл - кусочек рееста, который влияет на будущего пользователя, нам надо его подправить. Можете сходить по ссылке, а я опишу своими словами. Запускаем regedit из "Пуск - Выполнить". Встаем на корневую ветку HKEY_LOCAL_MACHINE (кажется она выбрана от балды), далее жмем в меню "Файл - Загрузить" и выбираем NTUSER.DAT из Default Profile. Обзовем его просто "Default". Он будет "встроен" в дерево реестра в корневую ветку, на которую мы нажали, в общем, вы увидите это. Далее идем в нашу загруженную ветку: Default\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\ и видим пути к каталогам профиля пользователя. Я поменял значения для Personal, My Pictures, Desktop (МоиДокументы, МоиРисунки, Рабочий стол). Для Desktop заместо значения "%USERPROFILE%\Рабочий стол" я указал "\\TUX\data\.profile_data\Desktop". Для "Мои рисунки" указал аналогично "\\TUX\data\.profile_data\Pictures". И то же самое для Personal (МоиДокументы). Заместо явного пути \\TUX\data можно написать удобное %LOGONSERVER%\data. Если клиент авторизовался на самбе, то его терминал с командой "echo %LOGONSERVER%" выдаст \\TUX. Проблемы могут начаться, если добавить BDC, который авторизует пользователя, тогда путь станет неверным, ну в общем писать можно так и так. В общем, пути подправили - щелкаем на наш загруженный куст "Default", далее жмем "Файл - выгрузить куст". Подправленный куст будет автоматически выгружен туда, откуда был загружен, то есть в NTUSER.DAT. Теперь у нас есть профиль Default User с подправленным NTUSER.DAT. Кидаем его на флешку и копируем в /home/%G/netlogon (рекурсивно). Далее даем права (также рекурсивно) читать его (возможно еще и выполнять): chmod -R o+rx /home/group1/netlogon/. Кстати, нелишним будет дать право на выполнение и логин скрипту: chmod +x login.bat. Кстати, если вы будете использовать перемещаемые профили, то люди советуют перенапрвлять еще и каталог AppData (Application Data) как особо толстый. Подробнее можно почитать здесь.

Двигаемся дальше. Важно заметить, что на клиентском компьютере из-под администратора нужно отключить использование автономных файлов: в Проводнике меню Сервис - Свойства Папки - Автономные файлы - Отключить. Если этого не сделать умный Windows почему то постоянно пытается все синхронизировать, вдруг сетевой кабель выпадет. Но.. раз у меня нет перемещаемых профилей, с документами пользователи работают на сервере, то зачем мне какая то синхронизация.

Итак, вроде бы все готово, теперь нужно заводить пользователей, я всех пользователей пока решил заводить руками, поэтому в конфиге samba не описаны параметры вроде user add script и прочие из той же серии. Что нужно, чтобы завести нового пользователя:
1) Создать и «присоединить» типовые группы домена к unix-группам.
2) Если еще нет группы, в которую пользователь входит:
   - создать ее
   - «соединить» с доменной группой
   - создать каталоги /home/ИмяГруппы/{data,netlogon,share} для новоиспеченной группы
   - не забыть про права на каталог share
3) Создать пользователя
   - пользователя в linux с добавлением в нужную группу (основную)
   - добавить пользователя к samba - пользователям
   - создать каталоги пользователя
   - назначить пользователю права на каталоги

Разберем на примере. Стартовый одноразовый скрипт для создания группы доменов админа и воссоединения стандартных unix-групп с доменными. Я уже упоминал /etc/samba/smbusers — тут я его и создам. Можно руками, как угодно. Этот скрипт нужно выполнить всего 1 раз.
#!/bin/bash

groupadd pdcadms
groupadd machines

#Map Windows Domain Groups to UNIX groups
net groupmap add ntgroup="Domain Admins" rid=512 unixgroup=pdcadms type=d
net groupmap add ntgroup="Domain Users" rid=513  unixgroup=users type=d
net groupmap add ntgroup="Domain Guests" rid=514 unixgroup=nobody type=d
net groupmap add ntgroup="Domain Computers" rid=515 unixgroup=machines type=d

useradd -M -N -s /bin/false -g pdcadms pdcadmin
echo ":::unix passwd for pdcadmin:"
passwd pdcadmin
echo ":::add pdcadmin to smbpasswd, passwd == unix passwd:"
smbpasswd -a pdcadmin

#create smbusers
touch /etc/samba/smbusers
echo "pdcadmin = Administrator" >> /etc/samba/smbusers

Сейчас разберем, что нам нужно делать дальше. Пока — руками. Нам нужно добавить хотя бы одну группу. Для этого добавим unix-группу и сольем ее с доменной группой. Я создам группу empls — для сотрудников учебной части. =)
groupadd empls
net groupmap add ntgroup="Employers Group" unixgroup=empls
mkdir -p /home/empls/{data,netlogon,share}
chown :empls /home/empls/share
chmod 0770 /home/empls/share
Мы создали группу empls, присоединили ее к доменной группе  «Employers Group», создали каталог для группы /home/empls и 3 подкаталога в нем: data, netlogon, share. Для share установили группу-владельца как empls и далее дали членам этой группы право на запись в share (т.к. это общая шара группы empls). В конце я покажу простейший скрипт, который может это автоматизировать.

Ну и в конечном итоге нам нужно добавить пользователя выше созданной группы в samba. Опять же сделаем это пока руками. Пусть мы добавим пользователя buhgalter (добавляем в группу empls):
useradd -M -N -s /bin/false -g empls buhgalter
smbpasswd -a buhgalter
mkdir -p /home/empls/data/buhgalter/{.profile,.profile_data/{Desktop,Documents,Pictures}}
chown -R buhgalter /home/empls/data/buhgalter
chmod -R 0700 /home/empls/data/buhgalter
Тут мы сначала добавили unix-пользователя buhgalter, затем добавили его в samba-пользователи, создали для него одноименный каталог в /home/empls/data и полагающиеся подкаталоги для профиля и перенаправляемых папок, сделали его владельцем этих каталогов и дали ему права на эти каталоги. Эту процедуру также можно автоматизировать скриптом.

Ну и... скрипт, который немного помогают автоматизировать процесс, чтобы снизить риск ошибок. Но, сразу скажу, что со скриптами у меня как у обезьяны с гранатой.

Обновлено. Переделал скрипт из двух нижних в один ( благодаря автору темы =). Скрипт читает файл /etc/samba/newUsers построчно и делает свое дело. Сначала проверяется, есть ли группа пользователя, если нет - она будет создана, потом проверяется нет ли уже такого пользователя, если нет - он также будет создан. Чистить файл не обязательно, потому что уже имеющиеся пользователи никуда не будут добавлены. Пример файла, считываемого скриптом:
irector5 rew9rwe09r managers
didector 45534534 managers
director3 4324234 managers
fusion 44534543 managers
fusion7 543534543 homeusers3
Сам скрипт:
#!/bin/bash

cat /etc/samba/newUsers | while read userName userPasswd userGroup
do
  echo "---------------------------------------------------------------"
  if [ $(getent group $userGroup) ]
    then
      echo "Группа $userGroup для пользователя $userName существует"
    else
      echo "ВНИМАНИЕ! Группа $userGroup не существует"
      echo "Добавляется новая группа $userGroup с одноименной NT-группой"
      groupadd $userGroup
      #read -p "Введите NT-имя для этой группы: " userNtGroup
      net groupmap add ntgroup="$userGroup" unixgroup=$userGroup type=d &> /dev/null
      echo "Создаются каталоги /home/$userGroup/{data,share,netlogon}"
      echo "ВНИМАНИЕ! Не забудьте вручную добавить стартовый скрипт и профиль в netlogon!"
      mkdir -p /home/$userGroup/{data,share,netlogon}
      echo "Устанавливаются права для группы $userGroup на каталог share"
      chown :$userGroup /home/$userGroup/share
      chmod 0770 /home/$userGroup/share
  fi
  if [ $(getent passwd $userName) ]
    then
      echo "ОШИБКА! Пользователь $userName уже существует"
    else
      echo "Добавляется linux и samba пользователь $userName"
      useradd -M -N -s /bin/false -g $userGroup $userName
      echo -e $userPasswd"\n"$userPasswd | smbpasswd -a -s $userName &> /dev/null
      echo "Создаются каталоги пользователя в /home/$userGroup/data/$userName"
      mkdir -p /home/$userGroup/data/$userName/{.profile,.profile_data/{Desktop,Documents,Pictures}}
      echo "Устанавливаются права на каталоги в /home/$userGroup/data/$userName"
      chown -R $userName /home/$userGroup/data/$userName
      chmod -R 0700 /home/$userGroup/data/$userName
  fi
done

Что мы имеем на выходе. Пользователи, заведенные в samba и отнесенные к некоторой группе при входе в домен получают 2 смонтированных сетевых диска: личную папку и общую папку для группы. Их профиль не является перемещаемым, но можно это организовать. Файлы с их рабочих столов фактически хранятся на сервере в каталогах .profile_data\Desktop и .profile_data\Documents в их личной папке. Их файлы теперь в более надежном месте и недоступны для посторонних лиц.

ps: руководство слегка переделано, но принципы те же, от 12.03.2012.
« Последнее редактирование: 12 Марта 2012, 18:40:34 от gard »
gard.area51@jabber.ru..

Оффлайн gard

  • Автор темы
  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
 :) Ну что же.. можно продолжить.
После некоторых размышлений я пришел к мысли, что не обязательно каталог пользователя хранить в /home/%G/data/%U. Что если пользователь перейдет в другой отдел, ему надо будет сменить группу и перенести его данные в %G новой группы. Возможно, хранить личные каталоги просто в /home/data/%U будет правильней. Неважно, к какой группе пользователь принадлежит.
К этому в общем то склоняют некоторые обстоятельства. Итак, немного переделанный конфиг:
[global]
workgroup = URFU-NSK
netbios name = TUX
server string = PDC
name resolve order = bcast hosts
domain logons = Yes
preferred master = Yes
os level = 255
time server = yes

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = lo eth0 192.168.2.0/24
bind interfaces only = Yes
hosts allow = 192.168.2. 127.

username map = /etc/samba/smbusers
map to guest = Bad User
guest account = gard

add user script = /etc/samba/scripts/addsmbuser %u
add group script = /etc/samba/scripts/addsmbgroup %g
add machine script = useradd -M -N -s /bin/false -g smbcomputers %u
set primary group script = /usr/sbin/usermod -g %g %u
delete user script =  /usr/sbin/userdel '%u'
delete group script = /usr/sbin/groupdel %g

#template homedir = /home/data/%U
#logon path = \\%L\profile
logon script = login.bat
logon path =


[netlogon]
comment = logon service for different groups
path = /home/netlogon/%G
valid users = +%G
read only = Yes
browseable = no

#[profile]
# comment = network profiles for users
# path = /home/%G/data/%U/.profile
# profile acls = yes
# create mask = 0600
# directory mask = 0700
# valid users = +%G
# csc policy = disable
# read only = no
# browseable = no

[data]
comment = home folder for user
path = /home/data/%U
valid users = %U
#veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/
#delete veto files = yes
csc policy = disable
read only = no
browseable = no

[public]
comment = shared folder
path = /home/public/%G
valid users = +%G
#veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/
#delete veto files = yes
csc policy = disable
read only = no
browseable = no
create mask = 0770
directory mask = 0770

[netShare]
comment = shared Folder for all users
path = /home/gard/NetShare
csc policy = disable
writable = yes
guest ok = yes
Как можно видеть тут у нас появилась секция раскомментированных параметров:
add user script = /etc/samba/scripts/addsmbuser %u
add group script = /etc/samba/scripts/addsmbgroup %g
add machine script = useradd -M -N -s /bin/false -g smbcomputers %u
set primary group script = /usr/sbin/usermod -g %g %u
delete user script =  /usr/sbin/userdel '%u'
delete group script = /usr/sbin/groupdel %g
Для чего они нужны? К примеру для управления пользователями с помощью утилиты из пакета SRVTOOLS от Microsoft'а. Меня больше всего заинтересовали add user script, add group script и set primary group script. И это связано с решением хранить личные каталоги в /home/data/%U, если вы используете [homes], то вам это может понравиться, кстати стоит в вышеприведенном конфиге smb.conf раскомментировать template homedir = /home/data/%U и сменить название [data] на [homes] и у вас при логине пользователя вполне вероятно создастся его домашний каталог. =) Однако, мне надо создавать еще подкаталоги для перенаправления папок, не уверен, что они создаются сами. Дак вот, к примеру мы пользуемся некими внешними средствами для управления пользователями (SRVTOOLS), мы можем сменить пользователю первичную группу, при этом будет задействован параметр set primary group script. Группа сменится, а данные при старом конфиге останутся в каталоге старой группы пользователя. Хотя, забегая вперед, скажу, что для set primary group script можно указать скрипт, который перенесет данные, но зачем их переносить. Сделаем проще. К примеру был пользователь в group1, его каталог находится в /home/data/user1. При смене его первичной группы на group2 он сразу получит доступ к шаре группы2, то есть к /home/public/group2 без перемещения своего личного каталога. В общем пусть личные каталоги будут личными.

Идем дальше, сейчас самое интересное, add user script указывает у меня на /etc/samba/scripts/addsmbuser, в этом скрипте у меня следующее:
#!/bin/bash

unixUser="$1"

if [ $(getent passwd $unixUser) ]
  then
    echo "ОШИБКА! Пользователь $unixUser уже существует"
  else
    useradd -M -N -s /bin/false -g smbusers $unixUser
    mkdir -p /home/data/$unixUser/{.profile,.profile_data/{Desktop,Documents,Pictures}}
    chown -R $unixUser /home/data/$unixUser
    chmod -R 0700 /home/data/$unixUser
fi

Тут создается unix пользователь и его каталоги. Все довольно просто. Но суть не в этом, что дает нам задание параметра add user script? А дает оно нам то, что при вызове к примеру smbpasswd -a userName или же pdbedit -a -u userName будет выполнен тот самый скрипт, на который указывает add user script. То есть при простом вызове smbpasswd -a user1 будет создан сам user1 и будут созданы все его каталоги. Очень удобно! Для групп я написал подобный же скрипт, хотя сам я им скорее всего так и не буду пользоваться, он только для внешних инструментов, а smbpasswd группы добавлять не умеет. Итак add group script у нас ссылается на скрипт следующего содержания:
#!/bin/bash

unixGroup="$1"

if [ $(getent group $unixGroup) ]
  then
    echo "Группа $unixGroup для пользователя $userName существует"
  else
    groupadd $unixGroup
    net groupmap add ntgroup="$unixGroup" unixgroup=$unixGroup type=d &> /dev/null
    mkdir -p /home/public/$unixGroup
    chown :$unixGroup /home/public/$unixGroup
    chmod 0770 /home/public/$unixGroup
    cp -a -R /home/netlogon/netlogonDefault/* /home/netlogon/$unixGroup/
fi
Что еще можно отметить: он копирует умолчальное содержимое netlogon в каталог netlogon новой группы, на всякий случай. Мне кажется лучше положить вариант по умолчанию, чем не положить ничего. Ну и конечно умолчальный вариант нужно будет положить в люом случае до всего этого действа. В общем сам незнаю зачем он мне (группы я создам вручную, непосредственно используя этот скрипт с именем группы или же воспользуюсь сриптом ниже), но вам может быть что-то подобное пригодится. Ну и в конце концов я чуть переделал скрипт массивного добавления пользователей из списка вида "пользователь пароль группа". Вот он:
#!/bin/bash

cat /etc/samba/listSmbUsers | while read unixUser userPasswd unixGroup
do
  echo "---------------------------------------------------------------"
  if [ $(getent group $unixGroup) ]
    then
      echo "Группа $unixGroup для пользователя $unixUser существует"
    else
      echo "Группа $unixGroup не существует, создается группа и каталоги"
      groupadd $unixGroup
      net groupmap add ntgroup="$unixGroup" unixgroup=$unixGroup type=d &> /dev/null
      mkdir -p /home/public/$unixGroup
      chown :$unixGroup /home/public/$unixGroup
      chmod 0770 /home/public/$unixGroup
      mkdir -p /home/netlogon/$unixGroup
      cp -a -R /home/netlogon/netlogonDefault/* /home/netlogon/$unixGroup/
  fi
  if [ $(getent passwd $unixUser) ]
    then
      echo "ОШИБКА! Пользователь $unixUser уже существует!"
    else
      echo "Добавляется linux и samba пользователь $unixUser, создаются каталоги"
      echo -e $userPasswd"\n"$userPasswd | smbpasswd -a -s $unixUser &> /dev/null
      mkdir -p /home/data/$unixUser/{.profile,.profile_data/{Desktop,Documents,Pictures}}
      chown -R $unixUser /home/data/$unixUser
      chmod -R 0700 /home/data/$unixUser
  fi
done
Заметьте как происходит добавление пользователя (в отличии от добавления группы), это всего навсего:
      echo -e $userPasswd"\n"$userPasswd | smbpasswd -a -s $unixUser &> /dev/nullТо есть smpasswd вызовет инструкцию add user script, которая выполнит скрипт /etc/samba/scripts/addsmbuser, который в свою очередь сделает все, что нужно: добавит пользователя и создаст его каталоги.
« Последнее редактирование: 15 Марта 2012, 20:08:32 от gard »
gard.area51@jabber.ru..

Оффлайн gard

  • Автор темы
  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
 :) Привет всем!
Решил таки снова продолжить мысленные выкладки. Текущий конфиг самбы имеет вид:
[global]
workgroup = urfu-nsk
netbios name = tux
server string = pdc
wins support = Yes
name resolve order = wins bcast hosts
domain logons = Yes
preferred master = Yes
os level = 255
time server = yes
disable spoolss = yes
load printers = no

log level = 5 passdb:5 auth:10 winbind:2
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = lo eth0 192.168.2.0/24
bind interfaces only = Yes
hosts allow = 192.168.2. 127.

        #поддержка pam для использования /etc/pam.d/samba (для автоматического создания каталога пользователя при его логине)
        obey pam restrictions = Yes
username map = /etc/samba/users.map
map to guest = Bad User
guest account = gard

#Скрипты для управления пользователями и группами (если нужны)
        #add user script = /etc/samba/scripts/add_smb_user.sh %u
        #add group script = /etc/samba/scripts/add_pdc_group.sh %g
        #delete user script =  /usr/sbin/userdel %u
        #delete group script = /usr/sbin/groupdel %g
        #set primary group script = /usr/sbin/usermod -g %g %u
#Этот важный параметр обеспечивает автоматическое создание машинной unix$ записи силами Samba
        add machine script = useradd -M -N -s /bin/false -g machines %u

#расположение указывается относительно секции [netlogon]
logon script = login.bat
#logon path = \\%L\profile - для использования перемещаемых профилей + раскомментировать секцию [profile]
logon path =

[netlogon]
comment = logon service for all user groups
path = /home/netlogon
read only = Yes
browseable = no

#[profile]
# comment = network profiles for users
# path = /home/data/%U/.profile
# profile acls = yes
# create mask = 0600
# directory mask = 0700
# valid users = +%G
# csc policy = disable
# read only = no
# browseable = no

#Пользовательские каталоги, общие шары
[data]
comment = home folder for user
path = /home/data/%U
valid users = %U
csc policy = disable
read only = no
browseable = no
include = /etc/samba/recycle.conf

[share]
comment = shared folder
path = /home/shares/%G
valid users = +%G
csc policy = disable
read only = no
browseable = no
create mask = 0770
directory mask = 0770
include = /etc/samba/recycle.conf

[netShare]
comment = shared Folder for all users
path = /home/gard/NetShare
writable = yes
guest ok = yes
write list = @staff @empls
include = /etc/samba/recycle.conf
Как можно видеть секция скриптов добавления пользователей почти вся закомментирована, добавление машины - оставлено из-за своей важности и необходимости. =) Что же тут поменялось. В этой схеме:
  • самба теперь - сервер WINS, для этого кстати нужно подаправить /etc/nsswitch.conf (необязательно на одной подсети)
  • пользователи по прежнему добавляются скриптом, читающим файл со строками вида "Имя Пароль Группа"
  • самба работает в роли PDC как и раньше, но перемещаемые профили отключены (закомментированная секция)
  • каталоги пользователя создаются в момент его логина, а не в момент создания пользователя
Вот это последнее отличие нужно описать подробнее. Дело в том, что Samba поддерживает pam, вот что добавилось в smb.conf:
        #поддержка pam для использования /etc/pam.d/samba (для автоматического создания каталога пользователя при его логине)
        obey pam restrictions = Yes
Что такое pam рассказывать долго, да и сам я не очень сильно в этой технологии разбираюсь, так.. поверхностно, но принцип работы понятен. Почитать подробнее можно например тут и тут (сам тоже обязательно почитаю). Итак, файл /etc/pam.d/samba:
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
session required pam_exec.so quiet seteuid /etc/samba/scripts/new_UG_Cats.sh
В этот файл я добавил лишь последнюю строку: session    required    pam_exec.so quiet seteuid /etc/samba/scripts/new_UG_Cats.sh
она говорит, что при открытии сессии (?FIXME) требуется выполнить процедуру, вызывающую скрипт /etc/samba/scripts/new_UG_Cats.sh, параметры quiet и seteuid говорят о том, что выполнить это нужно "тихо" (не выводя ничего на экран) и с эффективным UID. Если владелец скрипта - root, то скрипт будет выполнен от имени root, хотя по умолчанию он выполняется от имени пользователя, открывающего сессию, а у нас это - любой самба-пользователь. Что же делает этот скрипт? Вот его содержимое:
#!/bin/bash

#userName="$1"
userName=$PAM_USER
userGroup=$(id -gn $userName)

userDir="/home/data/$userName"
groupDir="/home/shares/$userGroup"

if [ -d $userDir ]
then
echo "Каталог пользователя уже существует, выходим из скрипта"
        exit 0;
else
echo "Создание каталога пользователя и назначение прав"
        mkdir -p $userDir/{Desktop,Documents}
chown -R $userName $userDir
chmod -R 0700 $userDir
fi

if [ $userGroup != $userName ] && [ -d $groupDir ]
then
echo "Каталог для группы пользователя уже существует, выходим из скрипта"
exit 0;
else
echo "Создание каталога для группы пользователя, назначение прав, выход"
mkdir -p $groupDir
chown :$userGroup $groupDir
chmod 0770 $groupDir
exit 0;
fi
То есть он создает пользовательские каталоги и каталоги первичной группы, к которой пользователь принадлежит, естественно, если они еще не существуют. Переменная окружения $PAM_USER это переменная pam, связанная с pam_exec.so. То есть фактически пользователь - любой, производящий вход, но скрипт выполнится от эффективного пользователя, то есть root.

Ну и напоследок скрипт, который читает файл и зводит пользователей:
#!/bin/bash

cat /etc/samba/listUsers | while read userName userPasswd userGroup
do
  echo "---------------------------------------------------------------"
  if [ $(getent group $userGroup) ]
    then
      echo "Группа $userGroup для пользователя $userName уже существует"
    else
      echo "ВНИМАНИЕ! Создается группа $userGroup с одноименной NT-группой"
      groupadd $userGroup
      net groupmap add ntgroup="$userGroup" unixgroup=$userGroup type=d &> /dev/null
  fi
  if [ $(getent passwd $userName) ]
    then
      echo "ОШИБКА! Пользователь $userName уже существует!"
    else
      echo "Добавляется linux и samba пользователь $userName"
      useradd -M -N -s /bin/false -g $userGroup $userName
      echo -e $userPasswd"\n"$userPasswd | smbpasswd -a -s $userName &> /dev/null
  fi
done
Как видно, теперь его функции ограничиваются только добавлением пользователей и групп, созданием же каталогов пользователя теперь занимается pam. Удобное разделение, не так ли? Ну вот, собственно, это все. =) Удачи вам с настройкой Samba.
« Последнее редактирование: 04 Апреля 2012, 14:30:38 от gard »
gard.area51@jabber.ru..

Оффлайн gizomo

  • Любитель
  • *
  • Сообщений: 63
    • Просмотр профиля
А не подскажете чем может быть вызвано странное поведение самба, настроенной в качестве PDC?
В общем Ддмен поднял по инструкции из документации ubuntu https://help.ubuntu.com/12.04/serverguide/samba-dc.html.
Ввел в домен сам сервер и клиента на Windows XP. Все прошло удачно. Но вот одна странность - если на клиенте Windows зайти в сетевое окружение, то мы увидим наш домен (у меня GIS.TSU.RU) и еще одну рабочую группу, имя которое совпадает с именем сервера домена (у меня OMEGA). Если перейти теперь в домен двойным кликом, то там виден сервер OMEGA и клиент Windows.
Может это косяк какой-то из-за NetBIOS?

Оффлайн gard

  • Автор темы
  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
Простите, долго сам не заглядывал в тему. Очевидно какая то проблема в иерархии сети в представлении NetBios. Иначе никак не объяснить.
gard.area51@jabber.ru..

 

Страница сгенерирована за 0.055 секунд. Запросов: 24.