Отключение 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

Установка полноценного Firefox в Linux Debian вместо Iceweasel

Лично я предпочитаю в качеств ебраузера использовать Google Chrome… по многим причинам. Но иногда он нужен – полноценный фаерфокс, с некоторыми его полезными плагинами. А в Debian по-умолчанию установлен кривой Iceweasel. Вот как исправить это недоразумение.

1) удаляем Iceweasel

sudo apt-get remove iceweasel

2) идем на сайт мозиллы http://www.mozilla.org/en-US/firefox/new/ и скачиваем текущую версию фаерфокса.
3) распаковываем архив
bzip2 -d firefox-14.0.1.tar.bz2
tar -xvf firefox-14.0.1.tar
cd firefox
4) запускаем!
./firefox
Для удобвства можно сделать линки себе куда нужно.
http://geckich.blogspot.com/

Debian, ошибка в логах mpt-statusd: detected non-optimal RAID status

Было замечено, и не только мной, что у Debian 6 Squeeze, установленном на виртуальную машину, часто в лог /var/log/messages сыплет сообщения типа:

mpt-statusd: detected non-optimal RAID status

Устраняется это отключением демона, следящего за RAID (которого в этой ситуации нету):

/etc/init.d/mpt-statusd stop

echo RUNDAEMON=no > /etc/default/mpt-statusd

Всё.

http://geckich.blogspot.com/

Ошибка при входящеми звонке в Asterisk

Вот только что долбался с тем, что почему-то Asterisk перестал обрабатывать входящие звонки, а в логе ( tail -n 400 /var/log/asterisk/messages ) при этом писал ошибку типа:

WARNING[31425] pbx.c: Channel ‘ваш канал’ sent into invalid extension ‘s’ in context ‘ваш контекст’, but no invalid handler

Продолбался, пронервничался, а оказалось всё просто – mistype в названии контекста! 🙂
В общем, такая ошибка вылазит в двух случаях:
1) нет такого экстеншна в контексте, либо нет в принципе такого контекста (или он закомментирован или т.п .)
2) ошибка в названии контекста/экстеншна, соответственно, Asterisk его не видит.
Вот так всё просто… иногда 🙂
http://geckich.blogspot.com/

Debian 7 тормоза при переключении вкладок в Chrome

После установка Debian 7 Wheezy мною было замечено, что Google Chrome начинает немприятно тормозить при переключении вкладок, если их больше 4-5. Это меня через минут 10-15 начало жутко кумарить и я полез искать решение.

Нашел 2 варианта. Остановился на 1м, но приведу оба – вдруг кому подойдет больше 2й.
1) заставиь хром юзать старую библиотеку libcairo2 v1.10.2-7. Необходимо скачать пакет с библиотекой, извлечь ее и скормить хрому. Для 64-битной системы команды:
wget http://backports.debian.org/debian-backports/pool/main/c/cairo/libcairo2_1.10.2-7~bpo60+1_amd64.deb

dpkg -x libcairo2_1.10.2-7~bpo60+1_amd64.deb /opt/libcairo2


ln -s /opt/libcairo2/usr/lib/libcairo.so.* /opt/google/chrome/

2) Для видеокарт nVidia еще работает команда:

nvidia-settings -a InitialPixmapPlacement=0
Но, при этом заметно возрастает нагрузка на CPU, потому я сделал как в 1-м методе, хотя у меня и nVidia.
Надеюсь, вам это поможет также.
http://geckich.blogspot.com/

Настройка почты в Redmine

Здесь я опишу настройку Redmine для отправки почты через свой почтовый сервер.

Redmine настроен на сервере Linux Debian 6 через mod_passenger веб-сервера apache2

В зависимости от вашей инсталляции редактируем файл /etc/redmine/default/email.yml (Debian, из пакетов) или /usr/share/redmine/config/email.yml (смотрите, не перепутайте, типа как я – и парился, почему ж оно не вхавывает новые настройки… 🙂 ) и прописываем настройки, заменив адреса и т. д. на свои:

production:
  delivery_method: :smtp
  smtp_settings:
    address: 192.168.1.2
    port: 25
    domain: mydomain.com
    authentication: :plain
    user_name: “redmine@mydomain.com”
    password: “Password”


development:

  delivery_method: :smtp
  smtp_settings:
    address: 192.168.1.2
    port: 25
    domain: mydomain.com
    authentication: :plain
    user_name: “redmine@mydomain.com”
    password: “Password”

http://geckich.blogspot.com/

Cisco Any Connect VPN in Linux

Чтобы подключиться из Linux к Cisco Any Connect VPN нужно установить пакет  (в Debian):

aptitude install openvpn

Затем набрать команду:

openconnect -u user 192.168.0.0

подтвердить сертификат, ввести пароль и когда в консольке повиснет сообщение Established DTLS connection, открываем новую и работаем с удаленными машинами.

http://geckich.blogspot.com/

Исправление ошибок "Server sent passive reply with unroutable address. Using server address instead." или "500 illegal port command" при подключении к FTP серверу на vsftpd

Если у вас ftp сервер находится за роутером и вы из локальной сети подключаетесь отлично, а извне – сыпет ошибки типа “Server sent passive reply with unroutable address. Using server address instead.” or “500 illegal port command“, то вы по адресу 🙂 Причина этому безобразию – неправильно настроенный по-умолчанию Passive mode на фтп-сервере.

Для начала откройте в вашем роутере порты 4242…4252 для локального адреса фтп-сервера.

Затем в конфиг /etc/vsftpd.conf нужно добавить строчки:

connect_from_port_20=YES 
pasv_enable=YES 
pasv_addr_resolve=YES 
pasv_address=myaddress.dyndns.com
pasv_min_port=4242 
pasv_max_port=4252
Еще для пущей секьюрности можно добавить следующее:
#Включаем список пользователей, только которым можно подключаться к нашему фтп-серверу
userlist_enable=YES
userlist_deny=NO  
#пусть к списку
userlist_file=/etc/vsftpd.userlist 
#включение подробного логирования
logging log_ftp_protocol=YES 
#заключение пользователя в его домашней директории. Маст-хэв опция, если у вас используются локальные аккаунты
chroot_local_user chroot_local_user=YES
http://geckich.blogspot.com/

Установка сервера NIS в Debian Linux и настройка клиентов

NIS очень прикольная штука. Она позволяет авторизоваться на всех машинах, где есть её клиент с помощью учетных данных локальных пользователей на сервере. Ну т. е. если мы поменяем пароль на свою учетку, то все клиенты автоматом подтянут изменения. Да и просто удобно.

Итак, установим нужные пакеты и их зависимости командой:

aptitude -y install nis portmap

Когда спросит, введем имя нашего домена – например, example.com
Автостарт службы сфейлиться, но не пугайтесь – ему просто не хватает некоторых настроек.

Займемся конфигурацией.

1) nano /etc/default/nis

Здесь прописываем: 

NISSERVER=master

2) nano /etc/ypserv.securenets

Здесь закомментируем строчку, разрешающую доступ со всех IP:

# This line gives access to everybody. PLEASE ADJUST!
# make it comment
# 0.0.0.0 0.0.0.0

И пропишем адреса наших подсетей, например:
255.255.255.0                    10.86.35.0

3) nano /var/yp/Makefile

В 119-й линии добавим shadow:

ALL = passwd shadow group hosts rpc services netid protocols netgrp

4) nano /etc/hosts 

Добавим адрес нашего сервера NIS:
127.0.0.1 localhost nis.example.com nis
#Добавим также сетевой адрес сервера
10.86.35.10 nis.example.com nis

5) Обновим базу данных NIS сервера командой (введя на запрос имя нашего nis сервера как мы его прописали чуть выше – nis):

/usr/lib/yp/ypinit -m

Вывод команды:
At this point, we have to construct a list of the hosts which will run NIS
servers. master is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>
. next host to add: nis
next host to add:
# push Ctrl+D
The current list of NIS servers looks like this:

localhost
nis

Is this correct? [y/n: y]
y

We need a few minutes to build the databases…
Building /var/yp/server.world/ypservers…
gethostbyname(): Success
Running /var/yp/Makefile…
make[1]: Entering directory `/var/yp/server.world’
Updating passwd.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating passwd.byuid…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating group.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating group.bygid…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating shadow.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating hosts.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating hosts.byaddr…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating rpc.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating rpc.bynumber…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating services.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating services.byservicename…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating netid.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating protocols.bynumber…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating protocols.byname…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating netgroup…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating netgroup.byhost…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredUpdating netgroup.byuser…
failed to send ‘clear’ to local ypserv: RPC: Program not registeredmake[1]: Leaving directory `/var/yp/server.world’

master has been set up as a NIS master server.

Now you can run ypinit -s master on all slave server.

6) Запускаем демона NIS

/etc/init.d/nis start
Starting NIS services: ypserv yppasswdd ypxfrd ypbind.

7) Необходимо проапдейтить базу NIS:

cd /var/yp
make

Настройка клиентов NIS:

1) Установка:

aptitude -y install nis portmap
2) Конфигурация NIS Client – подредактируем несколько конфигов
nano /etc/yp.conf

# add at the last: (domain name) (server) (NIS server’s hostname)
domain example.com server nis.example.com

nano /etc/nsswitch.conf

passwd:      compat nis

group:          compat nis
shadow:         compat nis

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 nis
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

nano /etc/pam.d/common-session

Добавляем в конец для автоматического создания домашних директорий:

session optional pam_mkhomedir.so skel=/etc/skel umask=077

 /etc/init.d/nis restart

Всё. Можем заходить с помощью логина из NIS сервера.
Несколько полезных команд:

ypwhich – показывает адрес NIS-сервера

ypcat passwd  – показывает пользователей NIS-сервера
ypcat hosts – показывает список хостов
http://geckich.blogspot.com/