Авторизация в Apache c помощью MySQL (mod-auth-mysql)

MySQL авторизация – неплохой вариант, особенно для сайтов, использующих эту БД.
Порывшись в инете, разобрался, как её настроить и вот шаги, котором следует последовать 🙂
1. Устанавливаем необходимый софт (имеется в виду, что веб-сервер уже есть и настроен):
apt-get install libapache2-mod-auth-mysql
a2enmod auth_mysql

2. Создаем для примера БД:

mysql -u root -p
mysql> grant all on auth.* to auth_user@localhost identified by ‘<auth_password>’;
mysql> flush privileges;
mysql> create database auth;
mysql> use auth;
mysql> CREATE TABLE `clients` (
`username` varchar(25) NOT NULL default ”,
`passwd` varchar(25) NOT NULL default ”,
`groups` varchar(25) NOT NULL default ”,
PRIMARY KEY (`username`),
KEY `groups` (`groups`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
mysql> INSERT INTO `clients` VALUES (‘<username>’, ‘<password>’, ‘<group>’);

3. Редактируем файл виртуалхоста (или .htaccess нужной папки), например:

nano /etc/apache2/sites-available/default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride All

        </Directory>
        <Directory /var/www/>    
                AuthMYSQL on     #включает авторизацию по мускулю
                AuthMySQL_Authoritative on
                AuthMySQL_DB auth     #имя БД, в которой находится наша авторизация
                AuthMySQL_Host 127.0.0.1     #адрес или имя хоста с мускулем

                #AuthMySQL_Port 3306     #порт, если отличен от дефолтового
                #AuthMySQL_Socket <socket>    #сокет, если используется

                AuthMySQL_User auth_user     #пользователь БД
                AuthMySQL_Password <auth_password>     #пароль пользователя БД
                AuthMySQL_Password_Table clients     #таблица паролей
                AuthMySQL_Username_Field username     #поле, содержащее имя пользователя
                AuthMySQL_Password_Field passwd     #поле, содержащее праоль пользователя
                #AuthMySQL_Group_Table clients     #поле, содержащее принадлежность к группе
                AuthMySQL_Empty_Passwords off     #запретить пустые пароли
                Auth_MySQL_Encrypted_Passwords off    #если on - указывается, что пароли зашифрованы
                AuthMySQL_Encryption_Types Plaintext     #типа шифрования - может быть Plaintext, Crypt_DES, MySQL. Можно через пробел указывать несколько методов, которые будут использоваться по-очереди
                AuthBasicAuthoritative Off     #Отключить Basic-авторизацию - какойто костыль, без него не работает
                AuthUserFile /dev/null     #типа файл с паролями - тоже костыль
                Require valid-user     #требовать авторизацию. Тут также можно указывать имена групп (несколько - через пробелы): Require group assassins templars .Или конкретных пользователей: Require user leonardo vincent .Это удаобно, если прописывать опции в .htaccess
                AuthName "Please Auth!"     #приветствие
                AuthType Basic #костыль
                <Limit GET POST> #ограничения для запросов                Require valid-user     
                </Limit>     

                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py
                PythonHandler index
        </Directory>

service apache2 restart

Идем на страничку http://127.0.0.1 и авторизуемся.
P. S.

1. http://www.cgi101.com/book/ch20/mod_auth_mysql.html – здесь неплохое описание опций.
2. Можно в конфиге апача или модуля прописать параметры подключения к БД – так в некоторых случаях секьюрнее:

Auth_MySQL_Info <host> <user> <password>
Auth_MySQL_General_DB <database_name>

Запуск Wireshark под обычным (non-root) пользователем

Всё нижесказанное валидно для Oracle Linux 6 (RedHat 6, CentOS 6) 64 бита, в других дистрибутивах команды будут немного отличаться. Wireshark установлен не из пакетов, а их исходников, как я писал здесь

1. Устанавливаем зависимости (если еще не установлены):

yum install ibcap.x86_64 libcap-devel.x86_64

2. Проверяем наличие группы wireshark и если ее нет, создаем:

cat /etc/group
groupadd wireshark

3. Добавляем пользователя, под которым нужно использовать wireshark, в эту группу:

usermod -a -G wireshark user
newgrp wireshark

Устанавливаем права команде dumpcap и добавляем ее в нашу группу:
setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/dumpcap
chgrp wireshark
/usr/local/bin/dumpcap
chmod 750 /usr/local/bin/dumpcap
4. Проверяем:
getcap /usr/local/bin/dumpcap
su user
wireshark

Всё. Должно работать.

http://geckich.blogspot.com/

Установка Wireshark в Oracle Linux из исходников

Вначале попытался установить из пакетов, получил ерроры о конфликтах в зависимостях и решил попробовтаь из сорцов:

yum install libpcap libpcap-devel.x86_64
wget http://wiresharkdownloads.riverbed.com/wireshark/src/wireshark-1.8.2.tar.bz2
tar -xjvf wireshark-1.8.2.tar.bz2
cd wireshark-1.8.2
./configure
make
make install

Запускаем:

wireshark

http://geckich.blogspot.com/

Восстановление загрузки Windows 7 / Vista

По тем или иным причинам в винде может похериться загрузчик. Такая последоваельность действий поможет его восстановить – и всё будет окей, если сама винда не повреждена.

Имеется в вид, что восстановление из точки не помогает.

1. Настройте параметры BIOS таким образом, чтобы первым устройством загрузки был DVD-привод (во многих биосах при загрузке можно нажать [F11] и единоразово выбрать устройство для загрузки)
2. Вставьте установочный компакт-диск с Windows 7 и загрузитесь с него до этого окна:


3. Щелкните “Восстановление системы” (“Repair your computer”).
4. Выберите операционную систему, которую необходимо восстановить, и нажмите “Далее” (“Next”).

5. В окне “Параметры восстановления системы” (“System Recovery Options”) выберите пункт “Командная строка” (“Command Prompt”).

А вот теперь надо начинать шаманить)

6. Для начала, пробуем команду:
bootsect /NT60 SYS

Вместо SYS можно вставить букве раздела, где лежит ваша винда, если она не определилась автоматически (или по команде bootrec  /ScanOS), например:

bootsect /NT60 d:
7. Перезагружаемся и пробуем загрузиться с hdd. Если получилось – высылаем мне пиво) а если нет, пробуем дальше.

8. Вот неплохая последовательность команд с сайта MS (http://support.microsoft.com/kb/927392):

bcdedit /export C:BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:bootbcd bcd.old
bootrec /RebuildBcd
Далее юзаем:
bootrec  /FixMbr
bootrec  /FixBoot

Перезагружаемся, и если не помогло – значит, не всё так просто. Грузимся с какого-нибудь LiveCD, копируем важные данные с системного раздела и, если нет бекапного образа,  переустанавливаем винду
http://geckich.blogspot.com/

Установка kDevelop 4 в Oracle Linux 6

Всё нижеизложенное  проделал в Oracle Linux 6.3, но скорее всего действия валидны и для RedHat/CentOS 6, т. к. они все “из одной пробирки”.

Итак. Последнюю версию kDevelop – 4.3 – установить мне не удалось, т. к. необходимые ей kdelibs-devel были слишком старой версии в системе, а чтобы их обновить, пришлось бы переколбашивать всю систему с высоким шансом ее угробить, потому пришлось поставить старенькую версию kDevelop – 4.0.2.

1. Ставим зависимости:

yum install qtwebkit.x86_64 kdelibs-devel kdebase-workspace-devel

2. Качаем отсюда http://download.kde.org/stable/kdevelop/4.0.2/src/ и распаковываем сорцы:

cd /home/user/Downloads
wget http://download.kde.org/stable/kdevelop/4.0.2/src/kdevelop-4.0.2.tar.bz2
wget http://download.kde.org/stable/kdevelop/4.0.2/src/kdevplatform-1.0.2.tar.bz2
tar -xjvf kdevelop-4.0.2.tar.bz2
tar -xjvf kdevplatform-1.0.2.tar.bz2

3. Компилится оно немножко по-задроченному, потому создаем папки и копируем сорцы куда надо:

mkdir -p /home/user/src/kdevplatfom/build
mkdir -p /home/user/src/kdevelop/build
cp -R /home/user/Downloads/ kdevplatfom -1.0.2/* /home/user/src/kdevplatfom/
cp -R /home/user/Downloads/kdevelop-4.0.2/* /home/user/src/kdevelop/

4. Компилим и устанавливаем kdevplatform:

cd /home/user/src/kdevplatfom/
cmake -DCMAKE_INSTALL_PREFIX=/home/user/Downloads/kdevelop-4.0.2 ../
make
make install

5. Компилим и устанавливаем kdevelop:

cd /home/user/src/kdevelop
cmake -DCMAKE_PREFIX_PATH=/home/user/Downloads/kdevelop-4.0.2 -DCMAKE_INSTALL_PREFIX=/home/user/kdevelop4 ../
make install

6. Если всё делали из-под root, то фиксим права:

chown -R user:user /home/user/kdevelop4

7. Запускаем!

cd /home/user/kdevelop4/bin
./kdevelop

http://geckich.blogspot.com/

Django ошибка django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb при синхронизации БД.

Вы настроили параметры соединения с БД MySQL в settings.py, но при выполнении синхронизауии

python ./manage.py syncd

Вылетает простыня ошибок, а в конце:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Проблема в отсутствии моделя mysql для питона.
Решение:

apt-get install python-mysqldb

Для других конфигураций работают команды:

pip install MySQL-python
easy_install MySQL-python

http://geckich.blogspot.com/

Установка RoundCube Webmail

Сразу определюсь: ОС – Debian, MTA – Postfix, использую только защищенные подключения, веб-сервер Apache + modphp5.
В Debian, как всегда, есть два пути – ставить из сорцов или из пакетов. Я выбрал 2й путь.

apt-get install roundcube roundcube-mysql libapache2-mod-evasive
nano /etc/apache2/conf.d/roundcube

Добавляем строчки:

Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/

Alias /roundcube /var/lib/roundcube

chown -R www-data /var/lib/roundcube/
nano /var/lib/roundcube/config/main.inc.php

Здесь прописываем конфиги для своего почтового сервера. Пример:

$rcmail_config[‘force_https’] = TRUE;
$rcmail_config[‘default_host’] = ‘ssl://localhost:993’;
$rcmail_config[‘imap_auth_type’] = ‘check’;
$rcmail_config[‘smtp_server’] = ‘127.0.0.1’;
$rcmail_config[‘smtp_port’] = 465;

$rcmail_config[‘smtp_user’] = ‘%u’;

$rcmail_config[‘smtp_pass’] = ‘%p’;

$rcmail_config[‘smtp_auth_type’] = ‘LOGIN’;

nano /etc/apache2/sites-available/roundcube

<VirtualHost *:443>

    ServerAdmin admin@domain.com
    DocumentRoot /var/lib/roundcube/
    DirectoryIndex index.php

    ServerName webmail.domain.com
    ServerAlias www.webmail.domain.com


    SSLEngine On
    SSLCertificateFile /etc/ssl/server.cert
    SSLCertificateKeyFile /etc/ssl/server.key

</VirtualHost>

a2enmod ssl
a2ensite default-ssl


Чтобы увеличить максимальный размер вложенных в письмо файлов, нужно поменять следующее. Итак, приступим.

nano /etc/php5/apache2/php.ini

memory_limit = 256M
post_max_size = 128M
upload_max_filesize = 64M

Размеры ставьте как вам надо, но должно быть так: memory_limit > post_max_size > upload_max_filesize
Далее:

nano /etc/postfix/main.cf

message_size_limit = 64000000

Это значение в байтах.
И теперь самое западлянское, которое я не сразу нашел:

nano /var/lib/roundcube/.htaccess

php_value       upload_max_filesize     64M

php_value       post_max_size           128M
php_value       memory_limit            256M

Перезагружаем сервисы и смело топаем на https://webmail-address.int/roundcube

/etc/init.d/postfix restart

/etc/init.d/apache2 restart

http://geckich.blogspot.com/

Разрешение обычным пользователям использовать tcpdump

Возникла потребность разрешить программерам юзать tcpdump. Давать им рутовую консоль как-то не кошерно, потому нашел решение:

which tcpdump
chmod 4755 /sbin/tcpdump

Для зпрещения – chmod 700 или 755

http://geckich.blogspot.com/

Отключение USB Flash Drive но не клав/мышек в Linux

Задача: запретить юзверам юзать съемные USB-накопители.
Можно конечно втупую отрубить в BIOS, но тогда USB-клавы, мыши и другие нужные девайсы работать не будут.

Моё решение: Находим модуль usb-storage.ko и перемещаем в другое место. Ну или злостно удаляем 🙂

ls /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko
mv /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko /root

Включаются флешки обратным действием. На других системах, кроме Debian, для этого может потребоваться еще команда:

modprobe usb-storage

http://geckich.blogspot.com/

Настройка модемов Huawei для работы с АТС Asterisk PBX

После некоторых мучений и поисков, что чего и куда, решил написать статью для потомков о настройке модемов Huawei для работы с АТС Asterisk.
Для начала установим необходимые пакеты. Всё нижесказанное для системы Debian. Для других дистрибутивов нужно будет подправить команды и возможно пути.
aptitude install asterisk-dev libusb libusb-dev subversion build-essential
Теперь идём на реальную вин-машину. Втыкаем туда нашего зверька, винда должна пошуршать дровами, затем надо установить из памяти устройства программульку U’manager. Она установит дрова именно на сам модем. Для верности, заходим в свойства в прожке и проверяем, виден ли наш модем.

Теперь скачиваем прожку для крякания модемчиков Хуявей тут Huawei_Modem_Unlocker.zip

Вначале слева делаем Check Status и жмякаем SERVICE, если в логе внизу покажет, что модем залочен, то делаем ему UNLOCK и независимо от этого обязательно делаем ENABLE VOICE – ну собсно чтобы он звонил 🙂
Далее втыкаем донгл в сервер и, если у вас Asterisk на виртуалке, то заходим в свойства виртуальной машины и пробрасываем ей девайс:

Если у вас такой картинки нету, то ковыряем настройки. Может быть, надо зайти в свойства хоста и сделать как на картинке (Advanced settings – Edit – отмечаем юсб хабы):

Когда вы так или иначе прикрутили модем к серверу Asterisk, проверим:

lsmod | grep usb
usb_wwan                8068  1 option
usbserial              27676  6 option,usb_wwan
usb_storage            40217  0
usbhid                 33292  0
hid                    63257  1 usbhid
usbcore               123122  8 option,usb_wwan,usbserial,usb_storage,usbhid,uhci_hcd,ehci_hcd
nls_base                6377  1 usbcore
scsi_mod              126725  9 usb_storage,vmw_pvscsi,sd_mod,sg,sr_mod,mptspi,mptscsih,scsi_transport_spi,libata
ls /dev/ | grep USB
ttyUSB0
ttyUSB1
ttyUSB2
Если у вас примерно похожее, то всё окей.
В некоторых случаях модем линуксом сразу не определяется. А определяется как cr-rom или какой-нибудь флеш… в общем, ttyUSB нема. В этой ситуации может помочь утилитка USB Mode Switch, которая с помощью манипуляций правилами udev делает то, что нам нужно 🙂 Качаем ее с офф сайта (на Debian/Ubuntu она есть в репозиториях) http://www.draisberghof.de/usb_modeswitch/ затем распаковываем и компилируем. Не забываем установить утилиту tcl – без нее ругаться не будет, но и работать тоже… При следующем подключении модема, утилитка должна сработать и дать нам наши ttyUSB.
Теперь надо скачать для Asterisk-a модуль для работы с хуйвей модемами. Есть два варианта – модуль chan_datacard и chan_dongle. Мне вначале попался 1й и я заюзал его. Как оказалось, зря. Т. к. работало всё, кроме отправки USSD-запросов. А не знать свой баланс – пичалька. Потому ставить лучше 2й. Скачиваем последнюю версию с сайта http://code.google.com/p/asterisk-chan-dongle/downloads/list и компилим (предварительно сделав noload в modules.conf 1-му модулю, если он у вас уже есть):
wget http://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r10.tgz
tar -xzvf chan_dongle-1.1.r10.tgz 
cd chan_dongle-1.1.r10/
./configure 
make
make install
ls /usr/lib/asterisk/modules
cp etc/dongle.conf /etc/asterisk/
nano /etc/asterisk/dongle.conf

В конфиге прописываем параметры для нашего модемчика. Для моего Huawei E173 это выглядело так:

[defaults]

rxgain=4
txgain=4

[dongle0]
audio=/dev/ttyUSB1              ; tty port for audio connection;        no default value
data=/dev/ttyUSB2               ; tty port for AT commands;             no default value

Причем, номера ttyUSBх могут отличаться для разных модемов – находям, если что, методом “тыка”. А строки с усилением звука – потому что слишком низкий уровень звука по-умолчанию был у меня.
Далее, в папке etc, которая находится там, куда вы распаковали исходники модуля есть файл extensions.conf, в котором примеры чего и как прописывать в диалплан.
Если мы в /etc/asterisk/dongle.conf ничего явно не указали, то входящий вызов по-умолч. приходит в секцию [dongle-incoming].
Там я прописал :
include => dongle-incoming-sms
include => dongle-incoming-ussd

exten => s,n,Goto(incoming,s,1)
1е 2 строчки нужны для приема SMS и USSD-запросов. А 3я перекидывает вызов в стандартную секцию для входящих звонков моего диалплана. Содержимое инклюдов взял из гугла:
[dongle-incoming-ussd]
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} – ${DATACARD}: ${USSD}’ >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

[dongle-incoming-sms]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} – ${DATACARD} – ${CALLERID(num)}: ${SMS}’ >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
Далее, чтобы звонить через модем, нужно в секцию, где обрабатываются исходящие вызовы поместить такое:
exten => _7.,1,Dial(Dongle/dongle0/+${EXTEN})
exten => _0.,1,Dial(Dongle/dongle0/${EXTEN})
1-я строчка – для звонков в Россию. 2-я – для звонков на мобильные номера по Украине (я нахожусь в Украине – соотв., для других стран может быть по-другому здесь).
Дальше. Я так и не понял, как посылать USSD-запросы через диалплан (т. е. тупо набирая в SIP-телефоне). Но, через CLI Asterisk’a это делается просто:
asterisk -rx dongle ussd dongle0 *111#
Где dongle0 – как вы обозвали своё устройство в конфиге, а за ним сам запрос. Если в диаплане у вас прописана обработка USSD так же, как и у меня, то результаты запросов будут дописываться в файл /var/log/asterisk/ussd.txt.
Я написал скрипт на Python, который проверяет балланс через эту команду и отсылает результат на меил. Но о нем я напишу в другой статье.
входящие SMS сохраняются автоматом в файле /var/log/asterisk/sms.txt, если вы прописали как я.
З. Ы. Для тех, кто по каким-либо причинам решит юзать модуль chan_datacard, приведу кратко настройку его.
svn checkout http://chan-datacard.googlecode.com/svn/trunk/ chan-datacard-read-only

cd chan-datacard-read-only/
./configure
make install
cp etc/datacard.conf /etc/asterisk/datacard.conf
nano /etc/asterisk/datacard.conf
[E1550_t](!)
context=incoming-datacard       ; context for incoming calls
rxgain=3                        ; increase the incoming volume
txgain=-3                       ; increase the outgoint volume
autodeletesms=yes               ; auto delete incoming sms
resetdatacard=yes               ; reset datacard during initialization
u2diag=0                        ; set U2DIAG parameter (0 = disable everything except modem function)
[datacard0](E1550_t)
context=incoming-datacard
audio=/dev/ttyUSB1              ; tty for audio connection
data=/dev/ttyUSB2               ; tty for AT commands
group=1                         ; calling group
Диалплан:
[incoming-datacard]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} – ${DATACARD} – ${CALLERID(num)}: ${SMS}’ >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} – ${DATACARD}: ${USSD}’ >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
exten => s,1,Goto(succ-incoming,s,1)
exten => s,n,Hangup()

[outgoing]
exten => _0.,1,Dial(Datacard/datacard0/${EXTEN})
UPD:
Last chan_dongle url – https://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz
Полезные команды в Asterisk CLI:
dongle show device settings dongle0 – показывает все настройки для модема

UPD2:
Как выяснилось чуть позже, операторы не разрешают использовать свои обычные симки в GSM-гейтвеях или вот таких вот модемах (который по сути – дешевый GSM-гейт). Для того, чтобы оператор не заблокировал SIM-карточкУ, необходимо перейти на корпоративный тариф, разрешающий использование гейта (обычно тариф дороже обычных). О переходе и тарифе можете узнать у свогео ОПсоСа.
UPD3:
Обычный chan_dongle переехал на github: https://github.com/bg111/asterisk-chan-dongle (работает только с Asterisk 1.6, 1.8).
Форк для работы с Asterisk 11: https://github.com/jstasiak/asterisk-chan-dongle/
Форк для работы с Asterisk 13: https://github.com/oleg-krv/asterisk-chan-dongle