Контроллер домена Samba + LDAP

Проблема: необходимо добавить Windows машину в домен на стороне виндовой машины. Т.е. не средствами LDAP на стороне Linux. По умолчанию это можно сделать только с правами пользователя root. Но заводить root в LDAP — это чертовски неправильно.

Задача: дать возможность другому, не root, пользователю заводить машины в домен.

Решение.

В конфигурационном файле smb.conf в глобальной секции добавляем параметр:


enable privileges = yes

Перечитываем конфигурационный файл:


smbcontrol smbd reload-config

Смотрим какие привилегии доступны. Пользователь admin — это пользователь в LDAP с правами администратора.


ows:~ # net -U admin rpc rights list
Password:
SeMachineAccountPrivilege Add machines to domain
SeTakeOwnershipPrivilege Take ownership of files or other objects
SeBackupPrivilege Back up files and directories
SeRestorePrivilege Restore files and directories
SeRemoteShutdownPrivilege Force shutdown from a remote system
SePrintOperatorPrivilege Manage printers
SeAddUsersPrivilege Add users and groups to the domain
SeDiskOperatorPrivilege Manage disk shares
ows:~ #

Смотрим чего может пользователь admin:


ows:~ # net -U admin rpc rights list admin
Password:
ows:~ #

Как видите — ничего не может :(. Разрешим ему добавлять машины в домен.


ows:~ # net -U admin rpc rights grant admin SeMachineAccountPrivilege
Password:
Successfully granted rights.
ows:~ #

И снова глянем, что ему разрешено:


ows:~ # net -U admin rpc rights list admin
Password:
SeMachineAccountPrivilege
ows:~ #

Все, при добавлении машины в домен можно использовать пользователя admin.

Источник информации: Re: [Samba] PDC + LDAP, cannot access LDAP when not root (SOLVED)

Vmware server

Поставил на серваке vmware server, в котором крутятся два Linux и один Windows Server. Позитивная штука! Особенно понравилась возможность удалённого подключения к серверу и доступ к виртуальным машинам.
Ну и, как это не странно звучит, vmware server абсолютно бесплатный 🙂

Скрипт для инициализации Wi-Fi

Не понравилось мне как реализована система инициализации Wi-Fi в Slackware. Поэтому написал свой собственный скрипт. Он расчитан только на один тип Wi-Fi контроллера. Если вы используете другой контроллер, перепишите функции загрузки и выгрузки модуля.

Основной скрипт wireless.sh:

#! /bin/bash

#(c) 2007 Artur Kryukov
# License GNU GPL v2.

# Директория в которой должны находится файлы *.net
# с описанием Wi-Fi сетей.
CONF_DIR=/usr/local/etc/wireless.sh
PATH=/bin:/sbin:/usr/sbin

# !!!!!! ВНИМАНИЕ !!!!!
# Эта функция поддерживает загрузку ТОЛЬКО модуля ipw3945
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
load_module()
{
remove_module
modprobe ipw3945
sleep 1
/sbin/ipw3945d --quiet
}

remove_module()
{
echo remove
if [ -f /var/run/ipw3945d.pid ] ; then
/sbin/ipw3945d --kill
fi
if lsmod | grep ipw3945 > /dev/null 2>&1; then
modprobe -r ipw3945
fi
}

usage()
{
echo "Usage: wireless.sh start - start Wi-Fi network"
echo " wireless.sh stop - stop Wi-Fi network"
echo " wireless.sh --help - this screen"
echo "----"
echo "Current config directory:"
echo "$CONF_DIR"
echo "Current config files:"
echo "$(ls ${CONF_DIR}*.net)"
}

start()
{
load_module
sleep 4
for I in $CONF_DIR/*.net
do
. $I
# Проверка на наличие такой сети
if iwlist scan 2> /dev/null | grep $SSID > /dev/null 2>&1
then
# Если сеть есть, настраиваем ее
# Проверяем метод аутентификации
case $MET in
share)
set_share $IF $SSID $KEY $KEYN $DHCP
;;
WPA)
set_wpa $IF $SSID $CONF_WPA_FILE $DHCP
;;
esac
fi
done
}

stop()
{
remove_module
}

# Настройка сети с прешареными ключами
# $1 - сетевой интерфейс
# $2 - SSID
# $3 - KEY
# $4 - номер ключа
# $5 - DHCP
set_share()
{
iwconfig $1 essid $2 key $3 [$4] key open key [$4]
if [ $5 = "yes" ]; then
# Пытаемся получить IP по DHCP
if route -n | grep ^0.0.0.0 ; then
route del default
fi
sleep 2
dhcpcd $1
fi
}

# Настройка сети с поддержкой WPA
# $1 - сетевой интерфейс
# $2 - SSID
# $3 - CONF_WPA_FILE
# $4 - DHCP
set_wpa()
{
# Проверим наличие конфигурационного файла
if [ ! -f $3 ]; then
echo "Cant't finde config file this WPA attributes!!!"
echo "File $3 not found"
exit 21
fi
iwconfig $1 essid $2
wpa_supplicant -i$1 -c$3 -Dwext -B
if [ $4 = "yes" ]; then
if route -n | grep ^0.0.0.0 ; then
route del default
fi
# Пытаемся получить IP по DHCP
sleep 10
dhcpcd $1
fi
}

case $1 in
start) start ;;
stop) stop ;;
--help) usage ;;
*) usage ;;
esac

Для работы скрипта требуется определить директорию, в которой будут находиться конфигурационные файлы, описывающие Wi-Fi сети. Для определения такой директории используется параметр

CONF_DIR=/usr/local/etc/wireless.sh

В нашем случае необходимо создать директорию /usr/local/etc/wireless.sh, в которой будут размещаться конфигурационные файлы с расширением *.net и *.wpa

Пример конфигурации open Wi-Fi.

Создаём файл /usr/local/etc/wireless.sh/My.net, следующего содержания:

SSID=Ngrade
MET=share
KEY=1a2d-4cd7-8901-a2aa-5abc-aa1a-23
KEYN=3
IF=eth1
DHCP=yes # or no

При помощи переменных указываем параметры:

  • MET — share или wpa
  • KEY — ключ шифрования (о формате записи ключей смотрите man iwconfig)
  • KEYN — номер используемого ключа
  • IF — имя интерфейса
  • DHCP — yes — получить атрибуты интерфейса по DHCP, no — не получать по DHCP. В последнем случае придётся в командной строке самостоятельно задавать параметры интерфейса.

Пример конфигурации WPA соединения.

В этом случае необходимо создать два файла: *.net и *.wpa
Net файл (Ngrade_wpa.net):

SSID=Ngrade_WPA
MET=WPA
IF=eth1
CONF_WPA_FILE=/root/bin/Ngrade_wpa.wpa
DHCP=yes # or no

Параметр CONF_WPA_FILE определяет путь к файлу, описывающему параметры WPA соединения. Я не стал выдумывать свой формат для этого файла, я взял стандартный формат файла программы wpa_supplicant.

Файл Ngrade_wpa.wpa:

ctrl_interface=/var/run/wpa_supplicant
# By default, only root (group 0) may use wpa_cli
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

# WPA protected network, supply your own ESSID and WPAPSK here:
network={
scan_ssid=0
ssid="Ngrade_WPA"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk="TheSecretPassword"
}

Работать со скриптом просто:

  • wireless.sh start — запускает сеть, Причём скрипт самостоятельно ищет одну из описанных сетей, и подключает её.
  • wireless.sh stop — выгружает модуль.

По поводу stop, тут я еще не до конца разобрался что к чему, поэтому просто выгружаю модуль. Хотя, наверное надо сначала гасить интерфейс. Вообщем я еще поколдую над этим вопросом.

Multimedia клавиатуры в Linux

Решил заставить работать дополнительные кнопки на ноутбуке. После долгого перебора программ остановился на keytouch.
С программой поставляется большой набор уже описанных клавиатур. Также в поставке есть очень удобный редактор клавиатур, при помощи которого я и добавил все функциональные клавиши.
Единственно, что пришлось доставить в Slackware — это gnome-menu. Ну нет в Слаке Гнома по умолчанию 🙂

Все же Slackware

На ноутбуке остался жить Slackware 12.
Поставил SLED 10, обнаружились проблемы со звуком и Wi-Fi. Хваленый Ubuntu вообще не поставился, в режиме LiveCD грузится и работает, но при установке зависает. CentOS как рабочая станция мне не нравится.
Поскольку, в результате пришлось много делать руками, решил поставить самый приспособленный для этого дистрибутив — Slackware 12.

Кстати, поставил на него vmware server тот, который бесплатный. Обнаружил интересную фичу: он собака съедает под себя всю свободную память! Даже если я в настройках ограничиваю его 2Г, все равно ест сволочь все что можно. Правда в своп не лезет. Наверно создатели решили, что ОС выступает в роли платформы для запуска виртуалок и память ей не нужна 🙂 Надо будет посмотреть как ведет себя на vmware player.

Wi-Fi на моем DELL

Как всегда Linux со слишком новыми девайсами имеет небольшие проблемы. Мой Wi-Fi адаптер Intel 3945 стандартно в ядре не поддерживается. Но… но, все знают, что если чего то нет в ванилла ядре — это не значит, что этого нет в Интернет 🙂 Google рулит.

Нашел специализированный сайтик Intel® PRO/Wireless 3945ABG Driver for Linux. Там все было. Быстро скачал и настроил как рекомендовалось в документе INSTALL.

В файлике /etc/rc.d/rc.wireless.conf (да… я все таки поставил на ноут Slackware) прописал:

00:1B:77:*)
INFO=»Home net»
ESSID=»Ngrade»
MODE=»Managed»
KEY=»1a2b-abab-8901-a23c-cbcb-901a-ab [2] key open key [2]»
RTS=»2346″
FRAG=»2346″
;;

И вот сижу и пишу об этом через домашний Wi-Fi

Решение проблемы с модулем snd-hda-intel

Поставил на ноутбук Linux. Возникла проблема: не грузится модуль звуковой карты. Эта проблема не зависит от дистрибутива!
При загрузке модуль snd-hda-intel на ноутбуке DELL inspiron выдает сообщение об ошибке:
hda-intel: no codecs initialized

Решение проблемы.

Прийдется руками внести изменения в исходные коды ядра. У меня ядро 2.6.22, но думаю, что это поможет и в более старых версиях.

Ищем файл: /usr/src/linux-2.6.22/sound/pci/hda/patch_sigmatel.c

Ищем строку:
spec->num_pins = 8;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);

Ищем строку:
spec->num_pins = 8;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);

Ищем строку:
spec->num_pins = 10;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac922x_pin_nids);

Ищем строку:
spec->num_pins = 14;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac927x_pin_nids);

Ищем строку:
spec->num_pins = 14;
Заменяем на:
spec->num_pins = ARRAY_SIZE(stac9205_pin_nids);

Или все тоже самое в формате diff:

--- a/pci/hda/patch_sigmatel.c Thu Jul 05 13:10:51 2007 +0200
+++ b/pci/hda/patch_sigmatel.c Fri Jul 06 11:30:50 2007 +0200
@@ -1958,7 +1958,7 @@ static int patch_stac9200(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 8;
+ spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);
spec->pin_nids = stac9200_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS,
stac9200_models,
@@ -2008,7 +2008,7 @@ static int patch_stac925x(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 8;
+ spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);
spec->pin_nids = stac925x_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS,
stac925x_models,
@@ -2080,7 +2080,7 @@ static int patch_stac922x(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 10;
+ spec->num_pins = ARRAY_SIZE(stac922x_pin_nids);
spec->pin_nids = stac922x_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_922X_MODELS,
stac922x_models,
@@ -2181,7 +2181,7 @@ static int patch_stac927x(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 14;
+ spec->num_pins = ARRAY_SIZE(stac927x_pin_nids);
spec->pin_nids = stac927x_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_927X_MODELS,
stac927x_models,
@@ -2259,7 +2259,7 @@ static int patch_stac9205(struct hda_cod
return -ENOMEM;

codec->spec = spec;
- spec->num_pins = 14;
+ spec->num_pins = ARRAY_SIZE(stac9205_pin_nids);
spec->pin_nids = stac9205_pin_nids;
spec->board_config = snd_hda_check_board_config(codec, STAC_9205_MODELS,
stac9205_models,

Пересобираем модуль. Звук работает.

Это… Vista

Вчера вечером супер Vista завалилась к чертям. То, что она делала с моим компьютером… эээ… я давно такого не наблюдал. И ЭТО они продают за деньги?
В 2 часа ночи я устал бороться с Вистой. Выключил комп, решил утром поставить Linux. Проснулся, включил Висту и… она скотина работает как будто ничего не случилось… Нифига дорогуша, в сад… сейчас я тебя снесу (злобно потирая руки). В приводе уже стоит SLED 10 SP1.

Бабье лето.

В комплексе Радио уже второй день не работает кондей (там централизированная система на все здание). Говорят, что был пожар и кондеи сгорели. На улице бабье лето, а за окном Рафшаны и Джамшуды дом строят. Закроешь окно — жарко, откроешь — ничего не слышно. Вот вам и обратная сторона луны. Все же лучше иметь маленький, но свой и ни от кого не зависеть.