|
www.lissyara.su
—> главная
—> Архив
—> SAMBA + LDAP
Настройка Samba для хранения информации в LDAP
Автор: fr33man.
Обновленная версия лежит здесь.
Решил настроить хранение пользовательских учеток в LDAP. Пришлось посидеть.. Было много моментов на которых запинался. Решил написать
статейку, чтобы самому не забыть и людям помочь.
Перед настройкой связки samba + ldap нужно настроить LDAP сервер и авторизацию через LDAP.
Первым делом необходимо установить samba:
spider# cd /usr/ports/net/samba3
spider# make config
---------------------------------------------------------------------¬
¦ Options for samba 3.0.22,1 ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦ [X] LDAP With LDAP support ¦ ¦
¦ ¦ [ ] ADS With Active Directory support ¦ ¦
¦ ¦ [X] CUPS With CUPS printing support ¦ ¦
¦ ¦ [X] WINBIND With WinBIND support ¦ ¦
¦ ¦ [ ] ACL_SUPPORT With ACL support ¦ ¦
¦ ¦ [ ] AIO_SUPPORT With experimental AIO support ¦ ¦
¦ ¦ [ ] SYSLOG With Syslog support ¦ ¦
¦ ¦ [X] QUOTAS With Quota support ¦ ¦
¦ ¦ [X] 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---------------------------------------------------------------------
spider# make install clean
... skipped ...
spider#
| Теперь переходим к редактированию конфигурационного файла самбы:
smb.conf:
[global]
# Имя домена
workgroup = teachers
# nebios имя машины
netbios name = spider
# Описание сервера
server string = Documents
# Тип безопасности user(необходимо для PDC)
security = user
# Хосты, которым разрешено обращаться к нашему серверу
hosts allow = 192.168.1. 127.
# Не использовать принтеры
load printers = no
# Лог файл самбы
log file = /var/log/samba/log.%m
# Максимальный размер лога
max log size = 500
# Использовать зашированные пароли
encrypt passwords = yes
# Администратор домена
admin users = admin
# Пароли храним в LDAP
passdb backend = ldapsam:ldaps://spider.teachers/
# Корень LDAP сервера
ldap suffix = dc=l1523,dc=ru
# Пользователи храняться в контейнере ou=users
ldap user suffix = ou=users
# Группы в контейнере ou=groups
ldap group suffix = ou=groups
# Контейнер для машин пользователей
ldap machine suffix = ou=computers
# Объект администратора samb'ы в LDAP
ldap admin dn = "cn=root,dc=l1523,dc=ru"
# Запрещаем удалять объекты
ldap delete dn = no
# Включаем поддержку SSL
ldap ssl = on
# Сетевые параметры
socket options = TCP_NODELAY
# Делаем из samb'ы PDC
local master = yes
os level = 64
domain master = yes
preferred master = yes
domain logons = yes
# Скрипт, который запустится при входе пользователя
logon script = proxy.vbs
# Сетевой путь, который необходимо подключить
logon path = \\%L\Profiles\%U\%m\%a
logon home = \\%L\Profiles\%U\%m\%a
# Имя диска, на который подключать
logon drive = Z:
# Поддержка wins
wins support = yes
# Не используем dns proxy
dns proxy = no
# Настройка кодировки
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
# Пусть samb'а еще и время отдает
time server = yes
# Скрипт, для добавления машин
add machine script = /usr/local/etc/samba/add_machine.pl %m
# Описание расшаренных директорий
[homes]
comment = Home Directories
browseable = no
writable = yes
[netlogon]
comment = Network Logon Service
path = /usr/local/etc/samba/netlogon/
guest ok = yes
writable = no
share modes = no
browseable = no
[Profiles]
create mode = 600
directory mode = 700
path = /home
browseable = no
guest ok = yes
[data]
comment = Dump of files
path = /data
create mode = 660
directory mode = 770
public = yes
writeable = yes
write list = @People, @wheel
read list = @People, @wheel
[tst]
comment = Dump of files
path = /tst
create mode = 664
directory mode = 770
public = yes
writeable = no
write list = fr33man, slv, admin
read list = @People, @wheel, admin
| Теперь необходимо создать всех необходимых пользователей, а так же все папки и скрипты.
Добавляем в LDAP необходимые контейнеры:
spider# cat base.ldif
dn: ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: groups
dn: ou=computers,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: computers
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f base.ldif
Enter LDAP Password:
adding new entry "ou=users,dc=l1523,dc=ru"
adding new entry "ou=groups,dc=l1523,dc=ru"
adding new entry "ou=computers,dc=l1523,dc=ru"
| Теперь добавим группу admin и самого админа:
spider# cat admin_group_samba.ldif
dn: cn=Admin Group Samba,ou=groups,dc=l1523,dc=ru
objectClass: top
objectClass: posixGroup
cn: Admin Group Samba
gidNumber: 1000
memberuid: admin
spider# cat admin.ldif
dn: cn=admin,ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: admin
sn: admin
uid: admin
userPassword: {SSHA}*
uidNumber: 1000
gidNumber: 1000
gecos: Samba Admin
homeDirectory: /home/admin
loginShell: /usr/sbin/nologin
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f admin_group_samba.ldif
Enter LDAP Password:
adding new entry "cn=Admin Group Samba,ou=groups,dc=l1523,dc=ru"
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f admin.ldif
Enter LDAP Password:
adding new entry "cn=admin,ou=users,dc=l1523,dc=ru"
| Проверяем:
spider# id admin
uid=1000(admin) gid=1000(Admin Group Samba) groups=1000(Admin Group Samba)
spider#
| Все ок. Теперь создаем обычного пользователя:
spider# cat users_group_samba.ldif
dn: cn=People,ou=groups,dc=l1523,dc=ru
objectClass: top
objectClass: posixGroup
cn: People
spider# cat mtg.ldif@spider ~]$ echo -n "Миши
dn: cn=mtg,ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
cn: mtg
sn:: 0JzQuNGI0LjQvdCw
uid: mtg
userPassword: {SSHA}uBAtwLMhY/B3/fz6ct/18wQVnmYtZN6z
uidNumber: 5004
gidNumber: 5001
gecos: User
homeDirectory: /home/mtg
loginShell: /usr/sbin/nologin
spider#
| Русские буквы в LDAP хранятся в кодировке base64:
[fr33man@spider ~]$ echo -n "Мишина" | iconv -f koi8-r -t utf-8 | \
? uuencode -m 1 | head -n2 | tail -n 1
0JzQuNGI0LjQvdCw
[fr33man@spider ~]$
| Тут закодировано слово "Мишина". Два двоеточия говорят LDAP'у о том, что поле закодировано base64. Теперь добавляем:
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f users_group_samba.ldif
Enter LDAP Password:
adding new entry "cn=People,ou=Groups,dc=l1523,dc=ru"
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f mtg.ldif
Enter LDAP Password:
adding new entry "cn=mtg,ou=users,dc=l1523,dc=ru"
spider# id mtg
uid=5080(mtg) gid=5001(People) groups=5001(People)
spider#
| Создаем домашние директории:
spider# mkdir /home/mtg
spider# chown mtg:People /home/mtg/
spider# chmod 0700 /home/mtg/
spider# ls -lad /home/mtg/
drwx------ 2 mtg People 512 Oct 6 11:28 /home/mtg/
spider# mkdir /home/admin
spider# chown admin:Admin\ Group\ Samba /home/admin/
spider# chmod 0700 /home/admin/
spider# ls -lad /home/admin/
drwx------ 2 admin Admin Group Samb 512 Oct 2 19:03 /home/admin/
spider#
| Теперь указываем самбе пароль от пользователя, который указан в smb.conf:
spider# smbpasswd -w 123456
Setting stored password for "cn=root,dc=l1523,dc=ru" in secrets.tdb
spider#
| И добавляем пользователя admin и mtg:
spider# smbpasswd -a admin
New SMB password:
Retype new SMB password:
Added user admin.
spider# smbpasswd -a mtg
New SMB password:
Retype new SMB password:
Added user mtg.
spider#
| Теперь поставим в соответствие nt группы и группы unix:
spider# net groupmap add rid=512 unixgroup="Admin Group Samba" \
? ntgroup="Admin Group Samba"
Successully added group Admin Group Samba to the mapping db
spider# net groupmap add rid=513 unixgroup="People" ntgroup="People"
Successully added group People to the mapping db
spider# net groupmap list
Admin Group Samba (S-1-5-21-3696629298-3620909010-2906680271-512)
-> Admin Group Samba
People (S-1-5-21-3499699245-1344799222-3934724855-3003) -> People
spider#
| Возможные rid:
Domain Admins 512
Domain Users 513
Domain Guests 514
Domain Computers 515
Domain Controllers 516
Cert Publishers 517
Shema Admins 518
Enterprise Admins 519
Group Policy Creator Owners 520
| Осталось создать необходимые директории и скрипты:
spider# mkdir -p /usr/local/etc/samba/netlogon/
| /usr/local/etc/samba/add_machine.pl:
#!/usr/bin/perl
$pass = "123456";
if ($ARGV[0] eq ''){ die "Usage: $0 machine";};
for($i = 10000; $i < 20000; $i++)
{
$res = `id $i 2>&1`;
if($res =~ m/id\:/)
{
$uid = $i;
$i = 20000;
}
}
open(LDIF,">/tmp/".$ARGV[0].".machine.ldif");
print LDIF "dn: cn=".$ARGV[0].",ou=computers,dc=l1523,dc=ru\n";
print LDIF "objectClass: top\n";
print LDIF "objectClass: person\n";
print LDIF "objectClass: posixAccount\n";
print LDIF "objectClass: shadowAccount\n";
print LDIF "cn: ".$ARGV[0]."\n";
print LDIF "sn: ".$ARGV[0]." Computer\n";
print LDIF "uid: ".$ARGV[0]."\$\n";
print LDIF "userPassword: {SSHA}*\n";
print LDIF "uidNumber: ".$uid."\n";
print LDIF "gidNumber: 5002\n";
print LDIF "gecos: Computer\n";
print LDIF "homeDirectory: /dev/null\n";
print LDIF "loginShell: /usr/sbin/nologin\n";
close(LDIF);
system("/usr/local/bin/ldapadd -x -w $pass -D \"cn=root,dc=l1523,dc=ru\" \
-f /tmp/".$ARGV[0].".machine.ldif > /dev/null");
system("/bin/rm -rf /tmp/".$ARGV[0].".machine.ldif");
system("/usr/local/bin/smbpasswd -am ".$ARGV[0]." >/dev/null");
exit(0);
| /usr/local/etc/samba/netlogon/proxy.vbs:
set wshShell = Wscript.CreateObject("WScript.Shell")
prefix = "HKEY_CURRENT_USER\Software\Microsoft\Windows\
CurrentVersion\Internet Settings\"
wshShell.regWrite prefix & "ProxyServer", "shield:3128"
wshShell.regWrite prefix & "ProxyEnable", 1
| Первый скрипт добавляет аккаунт машины, а второй при входе пользователя прописывает ему прокси сервер.
Настал Самый ответственный момент — запуск samba:
spider# echo samba_enable=\"YES\" >> /etc/rc.conf
spider# /usr/local/etc/rc.d/samba.sh start
| Теперь осталось завести машину в домен, причем после заведения создастся ее аккаунт:
spider# id veterok$
uid=10004(veterok$) gid=5002(computers) groups=5002(computers)
spider#
| Все, пользователи нормально входят в домен и все работает.
размещено: 2006-11-08,
последнее обновление: 2007-03-17,
автор: fr33man
|
|
Комментарии пользователей [9 шт.]