среда, 26 ноября 2008 г.

Bounce report на русском языке в Postfix


Сама идея посылки сообщений от SMTP-сервера пользователю на любом языке, кроме английского, лично мне кажется в корне неверной, но иногда очень просят ;( Тогда приступаем.
Шаблоны сообщений сервера (всего их 4: failure_template, delay_template, success_template и verify_template) лежат в файле, описывамом в main.cf как bounce_template_file
т.е. добавляем к нашему конфигу примерно такую строку:
bounce_template_file = /etc/postfix/bounce.cf

Теперь дело за малым - создать сам файл. Шаблоны по умолчанию (чтобы было, что править) можно получить либо командой:
$ postconf -b
либо лично у меня уже был файлик bounce.cf.default в директории с конфигами postfix
Пишем в наш файл что-то типа:

success_template = <
EOF
Charset: windows-1251

From: MAILER-DAEMON (Mail Delivery System)
Subject: Successful Mail Delivery Report

Ваше письмо успешно доставлено получателю.
Подробности приведены ниже.
С уважением, Программа Postfix на сервере $myhostname
--------------------------------------------------------------------
EOF

(...и три других шаблона в том же духе).

Прошу обратить внимание, что указанный charset действует только в теле письма, а не в заголовках - они должны быть в гольном ascii. За справкой о прочих возможностях/невозможностях оращайтесь к man-странице bounce(5) - там все довольно неплохо описано.

вторник, 11 ноября 2008 г.

Работа с привилегиями пользователей в MySQL


Памятка по операциям выдачи-отъема привилегий пользователей в MySQL (тестировалось на версии 5.1.24). Предполагается, что все последующие действия совершаются от имени учетной записи root сервера MySQL.
Пусть имеется база данных myDb0 с таблицами myTbl1 и myTbl2. Создадим пользователя newusr с правами на чтение из первой таблицы и чтение-вставку во вторую.
mysql> grant select on mydb0.mytbl1 to 'newusr'@'localhost' identified by 'qwerty123';
mysql> grant select, insert on mydb0.mytbl2 to 'newusr'@'localhost';
Заметим в скобках: (
  1. предложение identified by 'qwerty123' нужно только при первом grant для данного пользователя;
  2. для выполнения второго grant (т.е. выдача привилегий уже существующему пользователю) права root необязательны - достаточно иметь привилегию grant на те объекты, к которым мы выделяем права).
Просмотреть существующие привилегии можно командой:
mysql> show grants for 'newusr'@'localhost';
Удалить права можно командой вида:
mysql> revoke insert on mydb0.mytbl2 from 'newusr'@'localhost';
Но если прав выдавалось много, то проще воспользоваться таблицами в системной базе данных mysql. Та есть, например, таблица - tables_priv (сруктура такая: Host char(60), Db char(64), User char(16), Table_name char(64), Grantor char(77), Timestamp timestamp, Table_priv set('Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger'), Column_priv set('Select', 'Insert', 'Update', 'References'), PRIMARY KEY (Host, Db, User, Table_name)), а, значит можно применить, такую, например, массовую операцию:
mysql> delete from mysql.tables_priv where user='newusr' and db='mydb0';
Если пользователю выдавалась привилегия на все таблицы базы (т.е. mydb0.*), то удалять ее надо из таблицы db(структура такая: Host char(60), Db char(64), User char(16), Select_priv enum('N','Y'), Insert_priv enum('N','Y'), Update_priv enum('N','Y'), Delete_priv enum('N','Y'), Create_priv enum('N','Y'), Drop_priv enum('N','Y'), Grant_priv enum('N','Y'), References_priv enum('N','Y'), Index_priv enum('N','Y'), Alter_priv enum('N','Y'), Create_tmp_table_priv` enum('N','Y'), Lock_tables_priv` enum('N','Y'), Create_view_priv enum('N','Y'), Show_view_priv enum('N','Y'), Create_routine_priv enum('N','Y'), Alter_routine_priv enum('N','Y'), Execute_priv enum('N','Y'), Event_priv enum('N','Y'), Trigger_priv enum('N','Y'), PRIMARY KEY (Host, Db, User)):
mysql> delete from mysql.db where user='newusr' and db='mydb0';
Все операции над этими таблицами не приводит к непосредсвенному изменению привилегий (т.е. вывод show privs не изменится), чтобы записать изменения не забудем выполнить:
mysql> flush privileges;
И еще два замечания в скобках: (
  1. при удалении таблиц и баз данных строчки в таблицах db и tables_priv никуда не исчезают - т.е. при создании нового объекта со старым именем к нему применятся прежде существовавшие права. Хорошо это или плохо, сразу не скажешь, но забывать об этом не рекомендуется;
  2. привилегия grant usage on *.*, отображаемая командой show grants, является привилегией по умолчанию при создании пользователя и может быть удалена только удалением самого пользователя командой drop user 'newusr'@'localhost' или delete from mysql.user where user='sel').

среда, 5 ноября 2008 г.

Создание интерфейсов VLAN во FreeBSD 7.0 и Mandriva 2008.1



Задача - нужно создать два VLAN интерфейса (для определенности - номера VLAN: 62 и 99) на одной сетевой карте (пусть в Linux она будет eth0, во freebsd - em0). Кособокость обеих способов примерно одинакова, так что дальше нет ни слова пропаганды - просто констатация.

FreeBSD
Пересобираем ядро, добавив в конфиг строку
device vlan
или пишем в /boot/loader.conf
if_vlan_load="YES"
потом пишем в /etc/rc.conf такое:
cloned_interfaces="vlan62 vlan99"
ifconfig_vlan99="inet x.x.x.x netmask y.y.y.y vlan 99 vlandev em0"
ifconfig_vlan62="inet z.z.z.z netmask w.w.w.w vlan 62 vlandev em0"
после перезагрузки должны появиться интерефейсы vlan62 и vlan99

Mandriva
(аналогично все завелось на CentOS 5.2, в инете сообщалось, что та же схема работает и в других redhat-подобных дисрибутивах)
Должен быть установлен пакет, содержащий команду vconfig. В мандриве этот пакет звался vlan-utils и по умолчанию не был установлен - в CentOS 5.2 пакет vconfig стоял по умолчанию - ну там вообще много всего лишнего ;)
Короче говоря, делаем
$ which vconfig
и при отрицательном ответе хватаемся за urpmf (для мандривы) или yum search для CentOS.
Потом создаем файл /etc/sysconfig/network-scripts/ifcfg-eth0.62
в нем пишем такое:
DEVICE=eth0.62
VLAN=yes
BOOTPROTO=static
IPADDR=x.x.x.x
NETMASK=y.y.y.y
ONBOOT=yes
аналогично создаем и файл ifcfg-eth0.99
После команды
# /etc/init.d/network restart
у нас должны появиться интерфейсы eth0.62 и eth0.99
Для других семейств Linux привожу "сырые" команды оболочки (в самом крайнем случае, их можно и вписать в /etc/rc.local). Создание VLAN интерфейса:
# vconfig add eth0 62
удаление: (мне пригодилось и в мандриве ;)
# vconfig rem eth0.62

P.S. интерфейся Linux вида eth0.62 для комады sysctl будут выглядеть как eth0/62 - лишняя точка сбила бы команду с толку.
P.P.S. ежели используется VirtualBox, то следует заметить что на драйверах Intel PRO (em(4)) vlan не заведется - это не мной первым замечено - нужно использовать PCnet (le(4)).