/jails/eliron/var/named/etc/namedb/>cd /usr/home/lissyara/ /usr/home/lissyara/>cd /usr/ports/net/samba3 /usr/ports/net/samba3/>make && make install && make clean
Лезет окошко, в нём выбираем такое:
Options for samba 3.0.23d,1 [ ] LDAP With LDAP support [X] ADS With Active Directory support [ ] 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 [ ] UTMP With UTMP accounting support [ ] MSDFS With MSDFS support [ ] PAM_SMBPASS With PAM authentication vs passdb backends [ ] CLUSTER With experimental cluster support [ ] EXP_MODULES With experimental modules [ ] POPT With system-wide POPT library [ ] MAX_DEBUG With maximum debuging
Это я такое выбрал. Вы - что нравится. После установки, рисуем конфиг (/usr/local/etc/smb.conf) для самбы:
[global] workgroup = GPTEL netbios name = PDC-GPTEL server string = SAMBA Domain Controller For GPTEL # Скрипт добавления пользователя add user script = /usr/local/etc/samba/add_user_script.sh "%u" # Скрипт удаления пользователя delete user script = /usr/sbin/pw userdel "%u" -r # Скрипт переименованя пользователя # (следующие две строки - на самом деле одна. невлезает ..) rename user script = /usr/local/etc/samba/rename_user_script.sh "%uold" "%unew" # Скрипт перезапуска самбы (Вообще, в man smb.conf, предлагается # ребутить или класть всю машину. Перебор, по моему... Хотя - # у меня это не работает. Такчто - пофиг.) shutdown script = /usr/local/etc/samba/shutdown_script.sh # Скрипт добавления новой группы add group script = /usr/sbin/pw groupadd "%g" # Скрипт удаления группы delete group script = /usr/sbin/pw groupdel "%g" # Скрипт добавления пользователя в группу # (следующие две строки - на самом деле одна. невлезает ..) add user to group script = /usr/local/etc/samba/add_user_to_group_script.sh "%g" "%u" # Скрипт установки первичной группы для пользователя set primary group script = /usr/sbin/pw usermod "%u" -g "%g" # Скрипт удаления пользователя из группы # (следующие две строки - на самом деле одна. невлезает ..) delete user from group script = /usr/local/etc/samba/delete_user_from_group_script.sh "%g" "%u" # Скрпит для добавления аккаунта компьютера add machine script = /usr/local/etc/samba/add_machine_script.sh "%u" # Скрипт проверки пароля (чтобы не пихали 12345 и прочее. Должен вернуть 0 # если пароль нормальный, и что-то другое - если нет. Пароль передаётся # на стандартный ввод скрпита) check password script = /path/to/password/check/script.sh # Скрпит - чё елать при получении сообщений по winpopup (из man`a) message command = /bin/mail -s 'message from %f on %m' root < %s; rm %s # Где лежат скрпиты, выполняемые доменными компами при загрузке logon script = scripts\logon.bat domain logons = Yes os level = 85 preferred master = Yes domain master = Yes idmap uid = 5000-9999 idmap gid = 5000-9999 # Кого не пускать # в итоге она у меня раскомментирована, но настройку я делал с закомменченой. # настоятельно рекомендую расккомментить, после настройки и введения # самой машины в домен invalid users = root interfaces = 192.168.120.253/24 security = user # Включаем поддержку WINS wins support = yes # Указываем виндовый WINS из другого домена - на время, пока он ещё жив # wins server = 192.168.0.251 dns proxy = yes time server = True # Перемещаемые профили (если не указать эти пункты пустыми - # профили у пользователей будут перемещаемые) logon path = logon home = template homedir = # логгинг log level = 10 passdb:10 auth:10 winbind:10 log file = /var/log/samba/log.%m [IPC$] path = /tmp [print$] comment = Printer Drivers Share path = /usr/home/samba/drivers [netlogon] comment = Network Logon Service path = /usr/home/samba/netlogon guest ok = Yes browseable = No [Profiles] comment = Roaming Profile Share path = /usr/home/samba/profiles read only = No profile acls = Yes
Также создаём скрипты, описанные в конфиге:/usr/local/etc/samba/add_user_script.sh
#!/bin/sh # скрипт добавления пользователей /usr/sbin/pw useradd "$1" -d /usr/home/samba/profiles/"$1" \ -s /sbin/nologin -L "russian" -m -g ntusers -c "$1" # отладка echo "added user '$1' in `date +%Y-%m-%d` `date +%H:%M:%S`" >> /tmp/`basename $0`.log
/usr/local/etc/samba/rename_user_script.sh
#!/bin/sh #-xv # Старое имя пользователя old_username="$1" # Новое имя пользователя new_username="$2" # Достаём строку из /etc/master.passwd - есть ли такой юзер, и какие у него данные. user_data=`grep "^${old_username}:" /etc/master.passwd` > /dev/null 2>&1 # Достаём имя пользователя user_from_passwd="`echo ${user_data} | awk -F ':' '{print $1}'`" > /dev/null 2>&1 # Проверяем существование пользователя if [ ${user_from_passwd} = ${old_username} ] > /dev/null 2>&1 then # echo "Есть ссучий юзер!" # Пользователь есть. Достаём поля из его строки данных. user_uid="`echo ${user_data} | awk -F ':' '{print $3}'`" user_gid="`echo ${user_data} | awk -F ':' '{print $4}'`" user_login_class="`echo ${user_data} | awk -F ':' '{print $5}'`" user_geos="`echo ${user_data} | awk -F ':' '{print $8}'`" user_home_dir="`echo ${user_data} | awk -F ':' '{print $9}'`" #echo "Данные пользователя" #echo "UID = ${user_uid}" #echo "GID = ${user_gid}" #echo "LoginClass = ${user_login_class}" #echo "INFO = ${user_geos}" #echo "HOME = ${user_home_dir}" # Проверяем, нет ли нового с таким же именем new_from_passwd="`echo ${user_data} | \ awk -F ':' '{print $1}'`" > /dev/null 2>&1 if [ ${user_from_passwd} = ${new_username} ] > /dev/null 2>&1 then #echo "Уже есть cсучий юзер!!" exit 1; else # Удаляем старого pw userdel ${old_username} # Заводим нового pw useradd "${new_username}" -d "${user_home_dir}" \ -s /sbin/nologin -L "${user_login_class}" -g "${user_gid}" \ -u "${user_uid}" -c "${user_geos}" # выходим #echo "Успешно переименован ${old_username} --> ${new_username}" fi else echo "Ноу cсучий юзер!!" exit 1; fi
/usr/local/etc/samba/shutdown_script.sh
#!/bin/sh # Перезапукаем самбу (в бакгроунде - обязательно!) /usr/local/etc/rc.d/samba restart &
/usr/local/etc/samba/delete_user_from_group_script.sh
#!/bin/sh list_current_users="`pw groupshow $1 | awk -F ':' '{print $4}'`" echo "Текущие пользователи: $list_current_users" >> \ /tmp/delete_user_from_group_script.sh.log new_list_users="`echo ${list_current_users} | \ awk -F $2 '{print $1$2 }' | tr -s ',,' ','`" echo "Новые пользователи: $new_list_users" >> \ /tmp/delete_user_from_group_script.sh.log echo "" >> /tmp/delete_user_from_group_script.sh.log pw groupmod $1 -M $new_list_users
/usr/local/etc/samba/add_machine_script.sh
#!/bin/sh # скрипт добавления машины /usr/sbin/pw useradd "$1" -d /usr/home/samba/profiles/all_computers \ -s /sbin/nologin -L "russian" -m \ -g computers -c "computer_account" # отладка echo "added komp '$1' in `date +%Y-%m-%d` `date +%H:%M:%S`" >> /tmp/`basename $0`.log
/usr/local/etc/samba/add_user_to_group_script.sh
#!/bin/sh # скрипт добавления пользователя в группу list_current_users="`pw groupshow $1 | awk -F ':' '{print $4}'`" echo $list_current_users pw groupmod $1 -M $list_current_users,$2
После того, как нарисовали, делаем их исполняемыми, и - можно запускать samba:
/usr/home/lissyara/>/usr/local/etc/rc.d/samba start Removing stale Samba tdb files: ....... done Starting nmbd. Starting smbd. Starting winbindd. /usr/home/lissyara/>
Проверяем - чё взлетело, а что нет:
/usr/home/lissyara/>ps -axj | grep smb root 17309 1 17309 17309 0 IsJ ?? 0:00,01 /usr/local/sbin/smbd root 17315 17309 17309 17309 0 IJ ?? 0:00,00 /usr/local/sbin/smbd root 17343 14912 17342 14910 2 R+J p2 0:00,00 grep smb /usr/home/lissyara/>ps -axj | grep nmbd root 17302 1 17302 17302 0 SsJ ?? 0:00,01 /usr/local/sbin/nmbd root 17304 17302 17302 17302 0 IJ ?? 0:00,00 /usr/local/sbin/nmbd root 17346 14912 17345 14910 2 R+J p2 0:00,00 grep nmbd /usr/home/lissyara/>ps -axj | grep winb root 17316 1 17316 17316 0 IsJ ?? 0:00,00 /usr/local/sbin/winbi root 17317 17316 17316 17316 0 IJ ?? 0:00,00 /usr/local/sbin/winbi root 17410 14912 17409 14910 2 R+J p2 0:00,00 grep winb /usr/home/lissyara/>
Всё нормально. Заводим пользователя root в самбе:
/usr/local/etc/>smbpasswd New SMB password: Retype new SMB password: Failed to find entry for user root. Failed to modify password entry for user root /usr/local/etc/>smbpasswd -a root New SMB password: Retype new SMB password: Added user root.
Вначале ошибся. Нельзя изменить пароль у несуществующего пользователя :))) Также, надо создать маппинг стандартных виндовых групп на юниксовые. Для этого использовался такой скрипт (с сайта самбы - вообще, всё описанное делалось по тамошним докам и манам):
/usr/home/lissyara/>more samba_group.sh #!/bin/sh #!/bin/bash #### Keep this as a shell script for future re-use pw groupadd ntadmins pw groupadd ntusers pw groupadd computers net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d net groupmap add ntgroup="Domain Users" unixgroup=ntusers rid=513 type=d net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d net groupmap add ntgroup="Domain Computers" unixgroup=computers type=d
Запускаем:
/usr/home/lissyara/>sh samba_group.sh Successfully added group Domain Admins to the mapping db as a domain group Successfully added group Domain Users to the mapping db as a domain group Successfully added group Domain Guests to the mapping db as a domain group No rid or sid specified, choosing a RID Got RID 3007 Successfully added group Domain Computers to the mapping db as a domain group /usr/home/lissyara/>
А вот на следующем действии, я мучался почти день - нигде не описано, что надо в группу админов добавить хоть одного пользователя. Я добавил себя, простым редактированием файла групп:
/usr/home/lissyara/>cat /etc/group | grep ntadmins ntadmins:*:1001:lissyara /usr/home/lissyara/>
После чего втыкаем контроллер домена в его же домен:
/usr/home/lissyara/>net join pdc-gptel Password: Joined domain GPTEL.
Собственно и всё. Однако - некоторые комментарии. Первое - если есть системная учётка - то используется существующая. Я вот удалил пользователя `lissyara` - а грохнулся, до кучи, мой аккаунт на фре :) Решается относительно просто - в скрипт переименования и удаления добавляется проверка имени пользователя. Надо - делайте. (Лучше, проверять uid - что меньше тысячи, и дополнительно какие-то имена. Но, всё же маловероятно, что виндовые админы будут делать пользователя bin и прочее..) Второе - для администрирования используем утилиты из NT4, качать отсюда. Там же описание - чё делать. Не очень удобно - но, можно доверить рулить кому-то другому. Из минусов - нельзя вбивать описание и полное имя пользователя... Можно - но руками, или дорабатывать скрипты, чтоб через pdbedit делали это... (если удасться найти параметр в котором оно передаётся...) Добавлено 2007-05-04: В скриптах фигурирует такая строка: -L "russian" - класс пользователей самбlissyaraы, и компьютеров. Я использовал такой, а вообще имеет смысл завести отдельный класс и урезать его по самое небалуйся..