12 авг. 2010 г.

samba + централизованное управление монтированием сетевых ресурсов

Некоторое упрощение и централизация операций с пользовательскими сетевыми дисками...
Настройки самбы:
security = user
[homes]
comment = Home Directories
browseable = no
path = /home/%u/net
read only = no
create mask = 0770
directory mask = 0770
valid users = %S
[netlogon]
comment = Network Logon Service
path = /home/%u/netlogon
guest ok = no
read only = yes
browseable = no
share modes = no
Скрипт подключения сетевых дисков (для каждого win-пользователя) l_script.cmd
@echo off
net use z: \\server\share1 /y
net use y: \\server\share2 /y
...
net use b: \\server\shareN /y
Настройки на рабочей станции пользователя: 
Записанный в автозагрузку скрипт обращения к удаленному скрипту (l_script.cmd на сервере) login.cmd:
@echo off
net time \\server /set /y
call \\server\netlogon\l_script.cmd
Таким образом, при логине win-пользователя в систему вызывается login.cmd, который синхронизирует время с сервером и вызывает оттуда скрипт l_script.cmd, который, в свою очередь, монтирует заданные для этого пользователя шары. Для того, чтобы при запуске системы окно консоли не вызывало испуг пользователя (с последующим звонком админу ;) ), сворачиваем его в панель задач: правый клик на ярлыке .cmd-файла в Автозагрузке - Свойства - Ярлык - пункт Окно - Свернутое в значок.
P. S.: Описанный механизм будет работать без участия пользователя лишь в случае, если учетная запись пользователя на рабочей станции полностью совпадает с учетной записью на сервере. Если по каким-то причинам это невозможно, то следует поменять скрипт login.cmd следующим образом:
@echo off
net time \\server /set /y
net use p: \\server\netlogon /USER:username password 
call p:\l_script.cmd
net use p: /delete /y

samba + ldap

Оставлю здесь ключевые грабли по проекту "Авторизация пользователей samba в LDAP". Во-первых, ссылка на описание переменных самбы - вот или вот
Далее, по конфигу:
netbios name = SERVER
security = user
passdb backend = ldapsam:ldap://127.0.0.1
ldap passwd sync = no
ldap suffix = dc=gmz,dc=local
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap admin dn = cn=admin,dc=gmz,dc=local
enable privileges = no
obey pam restrictions = no
domain logons = yes
domain master = yes
local master = yes
#для замуты с логонскриптами
logon path = \\%N\%U\profile
logon drive = P:
logon home = \\%N\%U
logon script = l_script.bat
Чтобы самба начала ходить к лдапу, ей нужно дать пароль админской записи: smbpasswd -w "ldap_admin_password"
По дереву LDAP'a:  дабы пользователь мог авторизовываться через ldap на самба-шарах, нужно:
1) после его создания дать ему objectClass'ы sambaSamAccount (возможно после добавления include samba.schema в slapd.conf) и shadowAccount;
2) добавить аттрибут shadowLastChange (для того, чтобы заработала смена пароля через smbpasswd)
3) добавить пользователя непосредственно в самбу: smbpasswd user 

Также следует установить пакеты smbldap-tools и samba-doc. Там есть и тема для LDAP'а или некие необходимые скрипты (в основном, похоже, интересны для построения домена).

9 авг. 2010 г.

Копирование в консоли с прогрессбаром

Каждый, кто копировал/архивировал/дампил что-то большое консольно, задумывался "а когда ж все это завершится?". То есть мечтал о прогрессбаре. Найденные на просторах Хабра pipeviewer (pv) и скрипт bar отчасти проблему решают (в плане архивов и дампов), однако для меня наиболее частой операцией подобного рода является копирование папок с большим количеством файлов, опрогрессбарить которое ни тому, ни другому не под силу. И найденный позже рецепт копировать rsync'ом (rsync -r --progress /path/from/ /path/to/) также не стал панацеей, так как он показывает прогресс каждого файла, а не общий, как хотелось бы. В итоге решение все же есть. Модифицированный GNU cp под рабочим названием Advanced Copy имеет дополнительную опцию -g, при указании которой программа рисует прогрессбар процесса копирования файла, а если речь идет о директории, то -gR рисует уже два прогрессбара, для текущего копируемого файла и общего процесса копирования в целом.
Для работы вполне достаточно взять готовый бинарник и положить куда-нибудь в $PATH (разработчики рекомендуют заменить стандартный cp, я же просто положил его рядышком, обозвав cpbar'ом ;)), предварительно разархивировав, конечно, и поставив бит исполнения (+x).
Если вдруг не заработало, или это не ваш метод, на странице проекта можно получить инструкцию о том, как пропатчить GNU cp и скомпилировать модифицированный бинарь самостоятельно.

5 авг. 2010 г.

Если закончились временные лицензии на Windows 2000 Server...

Внезапная жопа приключилась у одного из клиентов - с рабочей станции (WinXP) перестало пускать на терминальный сервер (Win2k) с отмазой "из-за сетевой ошибки". Вскрытие показало, что виной всему было то, что старый недобрый двухтысячный сервер не имел активированного сервера лицензирования. А временная лицензия, выданная сабжевому компьютеру, внезапно кончилась.
Конечно, правильным путем решения такой проблемы является регистрация сервера лицензиования с последующей выдачей постоянных лицензий всем пользователям. Однако в полевых условиях это сделать возможным не представилось. Посему запоминаем временный хинт: удалить на клиентской машине ветку реестра HKLM\SOFTWARE\Microsoft\MSLicensing. Должно полегчать. До кучи я еще изменил имя компьютера, дабы временный сертификат выдался и сохранился в базе с другим именем.
В общем, мораль - на забываем о временных рамках ;)