SQLAlchemy в Python

В python для работы с MySQL есть библиотечка SQLAlchemy.

У неё много всяких фишек-плюшек, но я в подавляющем большинстве случаев использую конструкции такого типа:

from sqlalchemy import create_engine
b_connection_string = 'mysql://user:password@localhost/db_name'
user = "admin"
db = create_engine(db_connection_string)
for row in db.execute("select Permissions from users where Name = "%s""%(user)):
result.append(str(row))
Где в 1й строчке мы импортируем функцию, затем создаем соединение с БД, а затем выполняем какой-то запрос. В итоге мы получим такую конструкцию (в данном примере):

[“(‘On, Off, Bla-bla’,)”]

Теперь можно облагородить результат, добавив , например:

result = result[0].replace("('","")
result = result.replace("',)","")
result = result.replace(", ", ",")

Получим в result:  ‘On, Off, Bla-bla’

http://geckich.blogspot.com/

Как с помощью iptables разрешить доступ к локальному порту только для списка IP адресов

Возможно, есть способы и попроще, но я сделал так.
Защищать будем, например, Asterisk (по-умолчанию порт для протокола SIP 5060)

Создаем новую цепочку:

iptables -N asterisk-manual
iptables -I INPUT -i eth0 -p udp –dport 5060 -j asterisk-manual

Прописываем, из каких адресов можно подключаться и в конце запрещаем остальным:

iptables -A asterisk-manual -s 192.168.1.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.2.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.3.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.4.2 -j ACCEPT
iptables -A asterisk-manual -j DROP

И сохраняем правила:

iptables-save

Чтобы добавить новый адрес вначале удалим последнюю строчку (по ее номеру), а затем добавим новую и восстановим запрещающую:

iptables -L asterisk-manual -n –line-numbers
iptables -D asterisk-manual 5
iptables -A asterisk-manual -s 192.168.4.3 -j ACCEPT
iptables -A asterisk-manual -j DROP

Не забываем сохраняться:

iptables-save

http://geckich.blogspot.com/

Как разрешить обычному пользователю Linux выполнять команду shutdown

В некоторых дистрибутивах обычный пользователь не может из консоли выключить/перезагрузить компьютер под управлением ОС Linux. Разрешаем так:

which shutdown
chmod u+s /sbin/shutdown

http://geckich.blogspot.com/

Быстрое сохраниение и восстановление конфигурации alsa в Linux

Чтобы сохранить текущую конфигурацию выполняем:

alsactl store -f ./alsamixer.conf

Для восстановления конфигурации:

alsactl restore -f ./alsamixer.conf

http://geckich.blogspot.com/

Открытие портов в iptables в RHEL дистрибутивах (RedHat, Oracle Linux, CentOS, etc.)

nano /etc/sysconfig/iptables

Добавляем запись, например:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

Сохраняем и рестартуем iptables:

/etc/init.d/iptables restart

Возможно Selinux будет ругаться при рестарте. Придется его отключить:

nano /etc/selinux/config 

И изменяем строчку SELINUX:
SELINUX=disabled
http://geckich.blogspot.com/

Добавление статического роута в RHEL дистрибутивах (RedHat, Oracle, CentOS, etc.)

Роуты нужно класть в папку /etc/sysconfig/network-scripts/ в виде текстового файлика route-X где Х – имя интерфейса. Например:

nano /etc/sysconfig/network-scripts/route-eth0

в формате

192.168.1.0/24 via 192.168.1.1

или

ADDRESS0=192.168.1.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.1.1

Если роутов нужно больше одного, то для первого формата просто записываем с новой строки, а для второго – меняем цифру:

ADDRESS1=192.168.2.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.2.1

Проверяем:

netstat -rn
route -n

Добавить не статический роут можно командой:

route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.1

http://geckich.blogspot.com/

Hello world! с помощью mod_python

Написание сайта с использованием mod_python состоит из двух этапов: конфигурирование сервера (apache) и собственно написание кода.

1. Конфигурация сервера:
Вначале установим модуль, если его еще нет:

aptitude install libapache2-mod-python
a2enmod python

Подредактируем, например, на Debian файл /etc/apache2/sites-available/default :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py        #говорит апачу передавать обработку файлов *.py в mod_python
                PythonHandler index                     #говорит, в каком файле находится обработчик хэндлеров.
                DirectoryIndex index.py                #указывает, какой файл отображается по-умолчанию в директории
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        AddHandler mod_python .py
        PythonHandler mod_python.publisher
        PythonDebug On                                  #включает выведение ошибок в браузер - удобно пр иотладке
        DirectoryIndex index.py
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Активируем виртуалхост (если он не активен) и перезапускаем веб-сервер, чтобы изменения вступили в силу:

a2ensite default
service apache2 restart

2. Написание кода:
from mod_python import apache          #импорт класса apache
def handler(req):                      #функция обработки хэндлера
    req.content_type = "text/html"     #задаем тип содержимого веб-страницы
    req.send_http_header()             #посылка дефолтового хэдера html-страницы
    req.write("Hello World!")          #отправляем Hello World! на страницу
    return apache.OK                   #рендеринг страницы с кодом ОК

Называем файл index.py и сохраняем в директорию виртуал-хоста (в нашем примере это /var/www), не забывая сменить хозяина файла на www-data. Перед проверкой нужно удалить дефолтовый файл index.html из директории виртуалхоста и удалить русскоязычные буквы из питоновского файла – иначе будет ругаться.

Вот так выглядит Hello World на mod_python:

Кодинг на Python в NetBeans (7.2.1)

Я перепробовал много IDE для написания кода на питончике – начиная с обычного nano и заканчивая платными продуктами – PyCharm и WingIDE. Но в итоге выбор пал на бесплатный NetBeans, т. к. выкладывать 100 баксов за платную ИДЕ как-то не хочется… Итак, приступим (описанное здесь я тестировал на ОС Debian 7 и Oracle Linux 6.3).

1. Качаем Java SE SDK с официального сайта Oracle и устанавливаем

2. Качаем с оф. сайта последнюю стабильную версию (на момент написания статьи это была версия 7.2.1) – http://netbeans.org/downloads/ и качаем любую версию, устанавливаем. При установке может попросить указать папку с Java SDK – указываем (если мы качали .tar.gz).

3. А теперь сама “Магия” 🙂 Запускаем наш свеженький NetBeans и переходим в меню Tools > Plugins, вкладка Settings и нажимаем Add, указываем какое-то вменяемое имя и как URL – http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz

4. Переходим на вкладку Available Plugins и в поиску набираем python. Будет 3 плугина – устанавливаем, презапускаем IDE, ждем пока она проиндексирует питоновские модули, и кодим на питоне с автодополнением и т. п. 🙂

http://geckich.blogspot.com/

Отключения службы фаерволла в Windows Server 2008 и 2012 без потери доступа по RDP

Если просто остановить службу, то у нас отвалится RDP  и порт 3389 будет блокирован на сервере.
Чтобы этого не допустить, то надо не сразу останавливать службу, а вначале выполнить команды в консоли с правами администратора:
netsh firewall set portopening protocol=TCP port=3389 mode=ENABLE
netsh advfirewall set allprofiles state off

Иначе прийдется бежать за монитором 🙂
http://geckich.blogspot.com/