Автор статьи: Виталий (obsession)
Первоисточник статьи: http://tranz-it.net
Перепечатка и размещение данных материалов на других ресурсах только с указанием ссылки на первоисточник.
Видимо есть еще админы, которым необходима все же мощный клубок сервисов в виде прокси сервера SQUID + веб морды SAMS + авторизация через Active Directory. Если честно признаться никакого желания нет писать статьи, только с расчетом, в случае чего самому обратиться можно к этим запискам и вспомнить что делал. А так писать на всеобщее обозрение, которые потом копипастят статьи, но обидно не за это, а за то что они выдают их за свои, и почитав на форумах, всех их возносят до небес, говоря какие они суперские сисадмины. Мне не нужно жертвоприношений и признания, но если по совести признаться, очень приятно читать позитивные отзывы людей которым данные статьи очень помогли в реальной жизни. Поэтому по просьбе трудящихся, напишу еще одну статью про прокси сервер SQUID 3, SAMS 1.0.5 с авторизацией через Active Directory. В одной компании уже давно, месяцев 5 уже стоит такая система, и работает хорошо. Буду писать по памяти, с выборкой из истории моих команд с сервера. Так что сильно не пинайте.
Что самое главное из всей статьи, это правильно настроить Kerberos, службу которая умеет понимать Active Directory и получать тикеты от нее. Соответственно, пну вас в сторону хорошей статьи от моего друга mr.bublik - Хочу самбу под АД
Так же опишу ее здесь, в читабельном виде, если mr.bublik не возражает.
Думаю все справятся этим, и установят себе Ubuntu Server 12.10. Я описываю именно ту систему на которой я все и делал.
Установка была произведена стандартным способом.
Начальные данные:
IP адрес: 192.168.0.8
Маска подсети: 255.255.255.0
Сеть: 192.168.0.0
Широковещательный адрес: 192.168.0.255
Шлюз: 192.168.0.1
DNS сервер: 192.168.0.1
Пользователь в БД MySQL: dude
Пароль для пользователя БД MySQL: dudeproxy
Редактируем файл/etc/network/interfaces и вписываем следующие строчки
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.8
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
dns-nameserver 192.168.0.1 192.168.0.10
dns-domain example.local
Редактируем файл/etc/resolv.conf удаляем все и прописываем
search example.local
nameserver 192.168.0.1
nameserver 192.169.0.10
Проверяем имя хоста в/ets/hostname ->>proxy
Проверяем записи в/etc/hosts
127.0.0.1 localhost proxy
192.168.0.8 proxy proxy.example.local
Записи, относящиеся к ipv6 можно удалить …
Проверяем установки времени командой:
# date
Если нужно изменить, курим маны командой# man date
А лучше всего установить NTP клиент, и настроить получение даты и времени с контроллера домена.
Теперь пришло время обновить систему.
Даем команды в консоли:
# sudo aptitude update
#sudo aptitude upgrade
Теперь можно налить себе чашечку кофе, затянуть сигаретку и насладиться прекрасным мерцанием строчек обновления системы.
Перезагрузимся, что бы наверняка. :)
# sudo reboot
Как видите я взял основные настройки из своей старой статьи, зачем перепечатывать если есть то же самое, но обязательно все что написано нужно почитать, так как для AD есть изменения.
Ну что начнем вкусно готовить Kerberos для авторизации в Active Directory, конечно по статье дорогого mr.bublika
# apt-get install samba krb5-user winbind
# nano /etc/krb5.conf
И приводим файл в соответствии нижеизложенному.
[logging] default = FILE:/var/log/krb5.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
[libdefaults]
default_realm = EXAMPLE.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24000
[realms]
EXAMPLE.LOCAL = {
kdc = yourdomaincontroller.example.local
admin_server = yourdomaincontroller.example.local
default_domain = EXAMPLE.LOCAL
}
[domain_realm]
.example.local = EXAMPLE.LOCAL
example.local = EXAMPLE.LOCAL
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = false
krb4_convert = false
}
Теперь правим конфиг /etc/samba/smb.conf
[global]
workgroup = EXAMPLE
realm = EXAMPLE.LOCAL
security = ADS
encrypt passwords = true
dns proxy = no
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
idmap uid = 10000 - 40000
idmap gid = 10000 - 40000
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes
template shell = /bin/bash
# /etc/init.d/winbind stop
# /etc/init.d/samba restart #(может быть smbd)
# /etc/init.d/winbind start
Проверяем:
# kinit Administrator@EXAMPLE.LOCAL ##типа дай билетик,если пароль спросила и не ругалась, значит дала.
Cмотрим командой klist , выдать должно что-то вроде
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@EXAMPLE.LOCAL
Valid starting Expires Service principal
08/06/09 12:09:34 08/06/09 22:09:39 krbtgt/ EXAMPLE.LOCAL@EXAMPLE.LOCAL
renew until 08/07/09 12:09:34
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached
Теперь самое интересное, вводим в домен:
# net ads join -U Administrator# имя домена не нужно оно по умолчанию стоит @EXAMPLE.LOCAL
если ругнуласьDNS update failed! - Парадокс, но вы в домене.
Ручками впишите машину в виндовый ДНС, что бы логинились виндопользователи
# nano /etc/nsswitch.conf
passwd: compat winbind
group: compat winbind
shadow: compat winbind
hosts: files dns wins
networks: files dns
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Проверяем:
# wbinfo -u # список пользователей
# wbinfo -g # список групп
# net ads info # вообще о домене
дальше работаем и наслаждаемся.
# sudo su
# aptitude install mc htop openssh-server make
# aptitude install apache2 apache2-doc apache2-utils ssl-cert mysql-server \
libmysqlclient15-dev libapache2-mod-php5 php5 php5-common php5-dev \
php5-mcrypt php5-imagick php5-mysql php5-gd libpcre3 libpcre3-dev php5-ldap \
php-fpdf squid3 squidguard gcc make
libgd2-xpm
В течении скачивания и начала установки будет запрос на ввод пароля пользователя root для MySQL его обязательно вводим,
и обязательно запоминаем.
Скачиваем SAMS.
Переходим в папку /usr/src
# cd /usr/src/
# wget http://sams.perm.ru/download/sams-1.0.5.tar.bz2
Распаковываем его
# tar xvf sams-1.0.5.tar.bz2
Переходим в папку sams-1.0.5
# cd sams-1.0.5
И стандартно конфигурируем его и устанавливаем:
# ./configure
# make && make install
ВНИМАНИЕ!!! Если при конфигурировании выдает ошибки такого вида "checking for libmysqlclient in /usr/lib… configure: error: Cannot find MySQL’s libmysqlclient in /usr/lib" и
"checking for libpcre in /usr/lib… configure: error: Cannot find PCRE’s libpcre in /usr/lib" то команду на конфигурирование sams даем следующим образом:
# ./configure --with-mysql-libpath=/usr/lib/i386-linux-gnu/ –with-pcre-libpath=/usr/lib/i386-linux-gnu/
после чего собираем и устанавливаем обычно:
# make && make install
Далее делаем симлинк:
# ln -s /usr/local/share/sams /var/www/sams
С текущей версии SAMS научился работать с PHP в режиме safe_mode=On. Но это требует дополнительной настройки конфигурации.
Для этого редактируем файл конфигурации php /etc/php5/apache2/php.ini
Включаем режим safe mode. Для этого выставляем параметр safe_mode. Если такого параметра нет, то ничего не добавляем.
safe_mode = On
SAMS для некоторых функций WEB интерфейса использует системные команды, например wbinfo. В режиме safe_mode php блокирует доступ к системным командам.
Php позволяет выполнять системные команды, расположенные в каталоге, заданном параметром safe_mode_exec_dir. Изменяем этот параметр:
safe_mode_exec_dir = “/usr/local/share/sams/bin”
Далее разрешаем исполнение системных скриптов из кода php.
Ищем в файле конфигурации параметр и убираем из него запрет вызова функций phpinfo system shell_exec exec:
disable_functions = “chdir,dl,ini_get_all,popen,proc_open,passthru,pcntl_exec”
В /etc/sams.conf приводим примерно к следующему виду:
[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=127.0.0.1
MYSQLUSER=dude<---Сюда прописываете своего пользователя
MYSQLPASSWORD=dudeproxy<---Сюда прописывате пароль пользователя dude
MYSQLVERSION=5.0
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid3
SQUIDLOGDIR=/var/log/squid3
SQUIDCACHEDIR=/var/spool/squid3
SAMSPATH=/usr/local
SQUIDPATH=/usr/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/var/db/squidguard
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=192.168.0.10 <<--Сюда вписывается IP адрес контроллера домена
LDAPBASEDN=example.local
LDAPUSER=NameUserAdminPrivilegesINAD <<--Сюда вписываем имя пользователя с правами администратора AD, лучше создать отдельного с правами админа.
LDAPUSERPASSWD=PasswordUserAdmin <<--Сюда вписываем пароль от этого пользователя
LDAPUSERSGROUP=domain users
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=0
В файле /usr/src/sams-1.0.5/mysql/create_sams_user.sql прописываем вышеназначенного пользователя.
GRANT ALL ON squidctrl.* TO dude@localhost IDENTIFIED BY “dudeproxy”;
GRANT ALL ON squidlog.* TO dude@localhost IDENTIFIED BY “dudeproxy”;
Сохраняемся.
Переходим в каталог/usr/local/src/sams-1.0.5/mysql/
# cd /usr/local/src/sams-1.0.5/mysql/
Редактируем файл squid_db.sql и в конце каждой процедуры создания таблицы убираем TYPE=MyISAM,
таким образом в процедуре создания каждой таблицы не должно быть TYPE=MyISAM.
Пример, БЫЛО:
DROP TABLE IF EXISTS `cache`;
CREATE TABLE `cache` (
`date` date,
`time` time,
`user` char(25),
`domain` char(25),
`size` BIGINT UNSIGNED NULL,
`ipaddr` char(15) NOT NULL,
`period` BIGINT UNSIGNED NULL,
`url` char(100) NOT NULL,
`hit` BIGINT UNSIGNED NULL,
`method` char(15) NOT NULL
) TYPE=MyISAM;<<--Убираем то что выделено красным
СТАЛО:
DROP TABLE IF EXISTS `cache`;
CREATE TABLE `cache` (
`date` date,
`time` time,
`user` char(25),
`domain` char(25),
`size` BIGINT UNSIGNED NULL,
`ipaddr` char(15) NOT NULL,
`period` BIGINT UNSIGNED NULL,
`url` char(100) NOT NULL,
`hit` BIGINT UNSIGNED NULL,
`method` char(15) NOT NULL
);
И так убираем для всех таблиц в этом файле.
После сохранения импортируем файлы в MySQL
# mysql -u root -p < sams_db.sql
# mysql -u root -p < squid_db.sql
# mysql -u root -p < create_sams_user.sql
# mcedit /etc/squid3/squid.conf
ВНИМАНИЕ!!! Ни в коем случае не менять структуру файла и не удалять коменты
Расскомментируем следующие строки и приведем в определенный вид, но не менять структуру.
[...]
auth_param basic casesensitive off
[...]
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmmssp
auth_param ntlm children 100
auth_param ntlm keep_alive off
[...]
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 100
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
[...]
http_port 3128
[...]
сache_dir ufs /var/spool/squid 100 16 256
[...]
access_log /var/log/squid3/access.log squid
[...]
pid_filename /var/run/squid3.pid
#ps axw | grep squid
Изменим скрипт запуска и остановки SAMS.
# mcedit /etc/init.d/sams
Удаляем все содержимое и копипастим данный скрипт
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: sams
# Required-Start: $local_fs $network $time
# Required-Stop:
# Should-Start: $named $mysql $squid
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starting sams daemon
# Description: Squid Account Management System (SAMS)
# Starting sams management daemon - samsdaemon
### END INIT INFO
#
# Author: Pavel Vinogradov
#
# /etc/init.d/sams: start and stop the sams daemon
SAMSPATH=`cat /etc/sams.conf | grep SAMSPATH | tr "SAMSPATH=" "\0"`
NAME="sams"
DAEMON=$SAMSPATH/bin/samsdaemon
LOCKFILE=/var/lock/samsd
PIDFILE=/var/run/samsdaemon.pid
RETVAL=0
SAMS_ENABLE=true
test -x $DAEMON || exit 0
if ! [ -x "/lib/lsb/init-functions" ]; then
. /lib/lsb/init-functions
else
echo "E: /lib/lsb/init-functions not found, lsb-base (>= 3.0-6) needed"
exit 1
fi
. /etc/default/rcS
case "$1" in
start)
if "$SAMS_ENABLE"; then
log_daemon_msg "Starting $NAME daemon" "$NAME"
if [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) >/dev/null 2>&1; then
log_progress_msg "apparently already running"
log_end_msg 0
exit 0
fi
start-stop-daemon --start --quiet --background \
--pidfile $PIDFILE \
--exec $DAEMON
RETVAL=$?
[ $RETVAL -eq 0 ] && touch "$LOCKFILE"
log_end_msg $RETVAL
else
[ "VERBOSE" != no ] && log_warning_msg "$NAME daemon not enabled, not starting. Please read /usr/share/doc/sams/README.Debian."
fi
;;
stop)
if "$SAMS_ENABLE"; then
log_daemon_msg "Stopping $NAME daemon" "$NAME"
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f "$LOCKFILE"
log_end_msg $RETVAL
else
[ "VERBOSE" != no ] && log_warning_msg "$NAME daemon not enabled, not stoping..."
fi
;;
restart|force-reload)
/etc/init.d/sams stop
/etc/init.d/sams start
;;
*)
echo "Usage: ${0##*/} {start|stop|restart}"
RETVAL=1
;;
esac
Сохраняемся.
Далее даем команду:
# update-rc.d sams defaults
Для закрепления всего перезагружаем сервер.
# reboot
Переходим в директорию /usr/local/shareЗАМЕТКА. Для установленной версии php5 и сервера mysql-5.1 и выше в WEB интерфейсе будут проблемы с настройками.ÂÂÂÂÂ
Необходимо сделать следующее.
1. В файле/usr/local/share/sams/src/webconfigtray.php закомментировать таким образом следующие строчки.
/* function GetHostName()
* {
* if (!($value=getenv('SERVER_NAME')))
* { $value="N.A."; }
* return($value);
*}
*/
2. В файле /usr/local/share/sams/src/configtray.php закомментировать таким образом следующие строчки.
/* function GetHostName()
* {
* if (!($value=getenv('SERVER_NAME')))
* {ÂÂ $value="N.A."; }
* return($value);
*}
*/
На компьютере запускаем веб браузер, любой, какой душе угодно, я люблю Mozilla Firefox
набираем в адресной строке:
http://192.168.0.8/sams
В системе уже зарегистрированны два пользователя:
1. Администратор
Login: admin
PSWD: qwerty
2. Аудитор/Статистика
Login: auditor
PSWD: audit
Нажимаем в нижнем окне на иконку с двумя человечками, и входим под администратором.
Комментарии
На сайте есть кнопочка скайп, можете звонить мне через нее )))
Ну хотя бы дублирующие строки уберите :)
Юрий, домен ema.kz - внешний. вы используете в самбе этот домен как локальный? не совсем понял. Обычно в локальной сети не используют глобальные имена.
realm = ema.kz
security = ADS
encrypt passwords = true
dns proxy = no
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
domain master = no
local master = no
и т.д как написанно в мануале теперь хочу перезапустить прописываю : # wbinfo -u # список пользователей
# wbinfo -g # список групп
# net ads info # вообще о домене
пишет такая команда не найдена через какую команду прописывать? просто я 1й раз с таким сталкиваюсь нужна помощь) заранее благодарю!
За авторизацию отвечает строка:
auth_param ntlm program /usr/bin/ntlm_a uth --helper-protocol=squid-2.5-ntlmmssp
В моем случае это:
auth_param negotiate program /usr/lib/squid3 /negotiate_kerb eros_auth -d -s HTTP/my-proxy.mydomain.localMYDOMAIN.LOCAL
Если связка настроена правильно, то и авторизовать будет.
Этот механизм я достаточно давно использую для линукс-клиентов в виндосетях. Очень удобно. Очень удобно использовать в доменах выше 2003. Я давно уже не использовал Proxy и Sams в частности. если самс поддерживает керберос, это здорово.
RSS лента комментариев этой записи