суббота, 25 июня 2016 г.

Backup данных мобильного приложения для Android вручную

Возникла необходимость бэкапить базу 1С (на мобильной платформе), но простых средств для этого не нашел. Если бы 1С была установлена на SD-карту, то было бы проще.

Сдампить файлы можно с помощью adb. Можно сдампить все файлы или непосредственно файл информационной базы (1Сv8.1CD). Смартфон должен быть рутован, чтобы иметь доступ к каталогу /data/data.

adb pull /data/data/com.e1c.mobile /BACKUP_CATALOG
pull: building file list...
pull: /data/data/com.e1c.mobile/lib/lib1cem.so -> /BACKUP_CATALOG

...
pull: /data/data/com.e1c.mobile/files/635945ff-47fc-3acb-8013-e5205e122daa/1Cv8.1CD -> /BACKUP_CATALOG/com.e1c.mobile/files/635945ff-47fc-3acb-8013-e5205e122daa/1Cv8.1CD
...
47 files pulled. 0 files skipped.
3937 KB/s (71636410 bytes in 17.766s)









понедельник, 18 апреля 2016 г.

Fail2Ban custom actions


Можно настроить запуск сторонних утилит при выполнении определенных действий fail2ban с атакующим (например, только при отправке в бан). Например, хочется иметь список всех произведенных баннов с указанием точного времени бана. Т.е. надо при каждом бане сохранить время бана и ip-адрес забанненого хоста. Для хранения подойдет текстовый файл формата CSV (в дальнейшем можно перейти к sqlite).


Создаем файл с описанием своих действий - за шаблон берется файл /etc/fail2ban/action.d/dummyconf.

Струкрура, в принципе понятна, - в секции [Init] можно определить переменные, которые будут доступны в этом файле.

Нам понадобится только действие actionban. Здесь указываем команду, которая будет выполняться, когда fail2ban будет отправлять хост в бан. Имя файла для записи данных будем передавать через переменную <file>, значение которой устанавливается в секции [Init].


~$  cat /etc/fail2ban/action.d/csv.conf
# Fail2Ban configuration file#
# $Revision$
# Date: 2016-04-18

[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart =

# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop =

# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionban = IP=<ip> && STAMP=<time> &&
printf %%b "$STAMP,$IP\n" >> <file>
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionunban =


[Init]
# Option: file
# Notes.: hosts.deny file path.
# Values: STR Default: /data/fail2ban_banned.log
#
file = /data/fail2ban_banned.log




После этого нужно в файле конфигурации jail.conf указать, что требуется выполнять новое действие


/etc/fail2ban/jail.conf
...
action_mwl = %(banaction)s[name=%(name)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-lines[name=%(name)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
+ csv[name=%(name)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

...



Пока не выяснил, где можно получить список всех возможных параметров (port, proto, ...), которые можно передать в action.


Перезапускаем fail2ban. Спустя некоторое время смотрим, что появляется в файле лога:


~ cat /data/fail2ban_banned.log
1460960053.17,180.250.100.138
1460960053.7,1.32.35.146
1460960054.38,59.95.53.201
1460960055.03,78.100.99.202
1460960086.79,94.97.110.61
1460960192.37,203.91.112.186
1460960405.06,139.0.22.106
1460960455.83,213.16.41.104


Через месяц уже можно пробовать агрегировать данные. Например, получим топ хостов, попадавших в бан не один раз

~$  cut -f2 -d',' fail2ban_sqlite.log | sort | uniq -c | sort -n -r | head
     18 197.188.244.18
     15 88.250.117.109
     13 211.198.141.133
     13 119.226.100.222
     11 85.175.227.88
     11 77.240.87.57
     11 175.139.185.161
     10 85.102.11.45
     10 2.50.133.220
     10 190.82.96.26


пятница, 18 марта 2016 г.

Продление льготного периода сервера терминалов


Имеется тестовый сервер терминалов на базе Windows 2008 R2.
После того, как истекает льготный 3-месячный период, клиенты не могут подключится по RPD.

На просторах сети было найдено решение:
http://anilgprabhu.blogspot.ru/2014/05/reset-trial-terminal-license-on-windows.html


Реестр - ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod
Необходимо для группы Администраторы дать разрешение "Полный доступ", после чего удалить ключ типа REG_BINARY в данной ветке и перезапустить сервер.

четверг, 14 января 2016 г.

Установка ESXi зависает на этапе initializing IOV




На материнке Gigabyte GA-B85M установка зависала на моменте Initializing IOV. Это происходит из-за неподдерживаемого железа.

Решение найдено здесь -  https://communities.vmware.com/thread/448394?start=0&tstart=0.

  1. As soon as you see the ESXi boot screen, you will see Press Shift+O on the bottom right. This takes you to a command line at the bottom left of the screen.
  1. Back space and clear the line if anything is there.
  1. Add "noIOMMU" to the command line.
  1. Press <Enter>
  1. After installation adds noIOMMU to kernelopt of vi /bootbank/boot.cfg.

После установки редактируем файл, указанный в пункте 5


~ # cat /bootbank/boot.cfg
bootstate=0
kernel=tboot.b00
title=Loading VMware ESXi
kernelopt= installerDiskDumpSlotSize=2560 no-auto-partition noIOMMU
...

пятница, 30 января 2015 г.

1С конфигурации Подрядчик строительства 4 ред. 2.0. Создаем роль с правами только на чтение

Создаем роль с возможностью только чтения данных без возможности изменения чего-либо

  • пригодится для всех пользователей 1С, которые не являются операторами (бухгалтерами) - им нужны в основном отчеты
  • для аудиторов
Для начала поставим на всех объектах конфигурации право Просмотр (Чтение добавится автоматически) + Ввод по строке.
Ясно, что возникнут проблемы, т.к. на некоторые объекты нужно право записи.


При запуске от тестового пользователя с данной ролью появляется сообщение:

"У текущего пользователя нет доступных ролей для запуска информационной базы".


Основная проблема типовых конфигураций - в конфе предусмотрено как минимум две роли:

  1. с минимально необходимыми правами для работе в конфе - но для работы именно оператора (с правами создания документов и наполнения справочников)
  2. полные права
И поэтому любой пользователь типовой конфы должен по-любому иметь эту роль с минимальными правами оператора. Нам же нужны минимальные права для аудитора (без возможности внесения каких-либо изменений).


В общем модуле УправлениеПользователями отраслевой конфигурации "Подрядчик строительства 4 ред. 2.0" можно найти такую функцию


// Процедура проверяет возможность запуска ИБ с определенными для текущего
// пользователя доступными ролями
//
Процедура ПроверитьВозможностьРаботыПользователя(Отказ) Экспорт

 Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("Бухгалтер") Тогда
  Отказ = Истина;
  #Если Клиент Тогда
  Предупреждение("У текущего пользователя нет доступных ролей, для запуска информационной базы.", 10, "Недостаточно прав доступа");
  #КонецЕсли
 КонецЕсли; 
 
КонецПроцедуры
 
Изменим логику с учетом новой роли:


Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("Бухгалтер") И НЕ РольДоступна("ТолькоЧтение")

После этого удалось запустить, но окно без интерфейса и сразу нарушение прав доступа


{ОбщийМодуль.ИмпНепоставляемый.Модуль(1732)}: Ошибка при вызове метода контекста (Установить)
по причине:
Нарушение прав доступа!
 
Это тоже очень круто, т.к. модуль поставляется в закрытом виде и не ясно, что именно он там хотел установить :(.

Смотрим журнал регистрации: отказано в доступе к константе "Каталог файлов защиты".

Для упрощения процесса поиска необходимых прав
посмотрим, какие константы может изменять роль Бухгалтер и установим по аналогии

  • ГотовностьПрограммыКРаботе
  • ИмпВалютаПланирования
  • ИмпИспользоватьМеханизмАвтоматическогоОбменаДанными
  • ИмпКаталогЗащитыФайлов
  • ИмпСерияПутевогоЛиста
  • Имп_КаталогФайловЗащиты
  • ИмпСистемаЗащиты
  • ФайлОбработкиИнтернетПоддержкиПользователей (этот не будем разрешать)
Снова пробуем запуститься - очередная ошибка прав доступа


{ОбщийМодуль.ИмпНепоставляемый.Модуль(1732)}: Ошибка при вызове метода контекста (Установить)
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.
объект: 'ПланОбмена.Полный'; право: 'Чтение'
Таблица: 'Node14', SDBL-команда: 'SELECT'.


Добавим право Просмотр для ПланыОбмена и право Использование для интерфейсов (Общий, Полный, Бухгалтерский). Тестовому пользователю назначим основной интерфейс Бухгалтерский.

Очередная попытка запуска - новая ошибка


{МодульОбычногоПриложения(108)}: Ошибка при получении значения атрибута контекста (ТекущийПользователь)
 Если Не ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь) Тогда
по причине:
Нарушение прав доступа!
 

Посмотрим права на ПараметрыСеанса для роли Бухгалтер и сделаем по аналогии
Чтение+изменение

  • ДатаОбновленияПовторноИспользуемыхЗначенийМРО
  • ИспользуемыеПланыОбмена
  • ОбменДаннымиВключен
  • ОбщиеЗначения
  • ПравилаВыборочнойРегистрацииОбъектов
  • ПравилаРегистрацииОбъектов
Нет доступа
  • ЗагрузкаПараметровРаботыПрограммы
  • ПараметрыКлиентаНаСервере

Следующая ошибка:




{МодульОбычногоПриложения(559)}: Ошибка при вызове метода контекста (ПолучитьФорму)

Обработки.ПанельФункций.ПолучитьФорму().Открыть();
по причине:
Нарушение прав доступа!

Даем право на запуск обработки ПанельФункций.

Следующая ошибка:


{ОбщийМодуль.УправлениеПользователями.Модуль(135)}: Ошибка при вызове метода контекста (Записать)
 МенеджерЗаписи.Записать(Истина);
по причине:
Нарушение прав доступа!


Однако после закрытия работа продолжается и появляются другие окна:

{МодульОбычногоПриложения(575)}: Ошибка при вызове метода контекста (ПолучитьФорму)
  Форма = Обработки.ДополнительнаяИнформация.ПолучитьФорму("ФормаРабочийСтол");
по причине:
Нарушение прав доступа! 
 
 

Смотрим в журнале регистрации - отказано в праве Изменение для регистра сведений НастройкиПользователей.
Даем права:

  • использование обработки ДополнительнаяИнформация
  • регистр сведений НастройкиПользователей - Просмотр и Редактирование


Следующая ошибка:


{МодульОбычногоПриложения(190)}: Ошибка при вызове метода контекста (Создать)
 БИ = Обработки.БухгалтерскиеИтоги.Создать();
по причине:
Нарушение прав доступа!


Даем право на использование обработки БухгалтерскиеИтоги.


Следующая ошибка - при попытке сохранить настройки отчета ОСВ (оборотно-сальдовой ведомости)


{ОбщийМодуль.СтандартныеОтчеты.Модуль(867)}: Ошибка при вызове метода контекста (СоздатьЭлемент)
Настройка = Справочники.СохраненныеНастройки.СоздатьЭлемент();
по причине:
Нарушение прав доступа!
  
 
Даем все права для справочника СохраненныеНастройки, кроме ИнтерактивноеУдаление и прав для предопределенных.



Спустя время обнаружились еще проблемы

  1. при просмотре документов появляется ошибка права просмотра - Обработка. Предупреждение об изменениях
  2. при просмотре кассовых документов ошибка права использования - Обработка. Механизм взаимодействия с торговым оборудованием (надо искать обработку ТОСервер).
  3. при просмотре движений документа ошибка права использования - Обработка. Корректировка движений
При просмотре кассовых документов также возникает ошибка при открытии

{МодульОбычногоПриложения(667)}: Ошибка при вызове метода контекста (Создать)
глСерверТО = Обработки.ТОСервер.Создать();
по причине:
Нарушение прав доступа!

среда, 20 февраля 2013 г.

NAS D-Link DNS 320. Настройка доступа по SSH.

По итогам обзора интерфейса NAS'a захотелось узнать, а возможно ли к нему получить рутовый доступ и установить свои приложения. Гугл подсказал, что всё уже давно придумали , и даже сайт со специальной тематикой есть nas-tweaks.net .
Оказывается, производитель предусмотрел возможность появления желания у владельца сетевого хранилища установить необходимые пакеты и приложения. Достаточно положить в корень диска скрипт с названием fun_plug.
Один немецкий товарищ уже все сделал, поэтому воспользуемся готовым решением. Оригинал статьи примера установки здесь.


Качаем два файла и помещаем их в корень раздела Volume_1 (главное - НЕ переименовывать):
  1. http://inreto.de/dns323/fun-plug/0.7/arm/fun_plug.tgz
  2. http://wolf-u.li/u/433
 
После чего делаем перезагрузку устройства.

После перезагрузки должны появиться каталог ffp и файл лога ffp.log:

**** fun_plug script for DNS-323 (2008-08-11 tp@fonz.de) ****
**** fun_plug script modded by Uli (2012-02-21 ffp@wolf-u.li) ****
Thu Feb 14 22:09:04 MAGT 2013
ln -snf /mnt/HD/HD_a2/ffp /ffp
* Installing /mnt/HD/HD_a2/fun_plug.tgz ...
* OK
* Running /ffp/etc/fun_plug.init ...
* Running /ffp/etc/rc ...
* /ffp/start/SERVERS.sh inactive
* /ffp/start/portmap.sh inactive
* /ffp/start/nfsd.sh inactive
* /ffp/start/LOGIN.sh inactive
* /ffp/start/telnetd.sh ...
Starting /ffp/sbin/telnetd -l /ffp/bin/sh
* /ffp/start/sshd.sh inactive
* /ffp/start/rsyncd.sh inactive
* /ffp/start/kickwebs.sh inactive
* /ffp/start/lighttpd.sh inactive
* /ffp/start/inetd.sh inactive
* /ffp/start/fp_master.sh inactive
* OK

Структура каталога ffp:

После установки запускается telnet, благодаря чему можно получить рутовый доступ к хранилищу по сети:

telnet 172.16.0.10
Trying 172.16.0.10...
Connected to 172.16.0.10.
Escape character is '^]'.
sh-4.1#

Меняем пароль рута:

sh-4.1# usermod -s /ffp/bin/sh root
sh-4.1# mkdir -p /ffp/home/root/
sh-4.1# sed -ie 's#:/home/root:#:/ffp/home/root:#g' /etc/passwd
sh-4.1# pwconv
sh-4.1# passwd
Changing password for root
Enter the new password (minimum of 5 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
passwd: password changed.

Проверяем правильность выполненных выше действий

sh-4.1# login
nas login: root
Password:
No mail.
root@nas:~# 

Необходимо сохранить пароль в NAS, иначе он исчезнет после перезагрузки (для этого тоже есть готовый скрипт):

root@nas:~# wget http://wolf-u.li/u/172/ -O /ffp/sbin/store-passwd.sh
--2013-02-15 00:01:26-- http://wolf-u.li/u/172/
Resolving wolf-u.li... 2a01:488:66:1000:53a9:2a6a:0:1, 83.169.42.106
Connecting to wolf-u.li|2a01:488:66:1000:53a9:2a6a:0:1|:80... failed: Address family not supported by protocol.
Connecting to wolf-u.li|83.169.42.106|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://wolf-u.li/downloads/3779-d2ee273e64e3c3166139f56fbb100067/store-passwd.sh [following]
--2013-02-15 00:01:27-- http://wolf-u.li/downloads/3779-d2ee273e64e3c3166139f56fbb100067/store-passwd.sh
Connecting to wolf-u.li|83.169.42.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 875 [application/octet-stream]
Saving to: `/ffp/sbin/store-passwd.sh'

100%[====================================================================================================================================================================================================>] 875 --.-K/s in 0s

2013-02-15 00:01:27 (16.0 MB/s) - `/ffp/sbin/store-passwd.sh' saved [875/875]

Сохраняем пароль:

root@nas:~# store-passwd.sh
Saving Userdata to /usr/local/config/

Включение SSH


Для этого необходимо сделать скрипт исполняемым и запустить вручную (после запуска сгенерируются 4!!! пары ключей)

root@nas:~# chmod a+x /ffp/start/sshd.sh
root@nas:~# sh /ffp/start/sshd.sh
Usage: sshd.sh start|stop|restart|status

root@nas:~# sh /ffp/start/sshd.sh start
Generating public/private rsa1 key pair.
...
Starting /ffp/sbin/sshd

Теперь подключаемся по SSH и отключаем Telnet:

ssh root@172.16.0.10
root@nas:~# sh /ffp/start/telnetd.sh stop
Stopping telnetd
root@nas:~# chmod -x /ffp/start/telnetd.sh

Важные замечания


Выполнение скрипта fun_plug создает новую группу пользователей utmp.
Скрипт, который устанавливает SSH-сервер, создает нового пользователя sshd и добавляет его в группу utmp. Этот пользователь только для внутреннего использования, поэтому не имеет возможности залогиниться (/sbin/nologin). Также этот пользователь имеет доступ на чтение по FTP к разделу Volume_1. Однако это не означает, что пользователь sshd действительно имеет доступ по FTP — вроде это баг.
 

воскресенье, 17 февраля 2013 г.

Проблемы при подлючении к серверу терминалов

На клиентском ПК (ОС: Windows XP + SP3) при попытке подключиться через RDP к серверу терминалов появляется сообщение:

"удаленный сеанс отключен из-за отсутствия доступных лицензий клиента сервера терминалов для этого компьютера".

Решение:

На клиентском ПК в реестре находим
HKLM->Software->Microsoft->MSLicensing
1.  создаем бэкап с помощью  "экспортировать".
2.  удаляем MSLicensing

Если при повторной попытке подключения к серверу терминалов появляется ошибка:

«Удаленный компьютер отключил сеанс, из-за ошибки в протоколе лицензирования. Попытайтесь подключиться к удаленному компьютеру снова или обратитесь к администратору сервера».


Причина: при этом подразделы HardwareID и Store внутри MSLicensing не создаются из-за недостаточных привилегий пользователя. 

Решение:  подключиться к серверу терминалов из-под доменного администратора. В результате создадутся нужные разделы и можно подключаться от обычного пользователя.