Запуск «Аргос-Налогоплательщик» без админа

Posted: 2015-04-29 in IT, Software
Метки:,

Всем привет. Сегодня я расскажу о том, как расчистить авгиевы конюшни без помощи Геракла заставить работать кривой говнософт, написанный программиздами без ознакомления с современными майкрософтовскими мануалами. Пример такого софта — ПО для сдачи бухгалтерской и налоговой отчётности «Аргос-Налогоплательщик» ( http://argos-nalog.ru/elektronnaya-otchetnost/ ).

Сперва немного общих слов о самой софтине в целом. Софтина сама написана на Java (что есть весьма хорошо), для обеспечения юридической значимости ЭЦП используется отечественная криптография на ГОСТ-овских криптоалгоритмах, реализованных в программе Крипто-Про (неизбежное зло, но более-менее рабочее и отлаженное), для связи использует обычные почтовые протоколы SMTP и POP3, посредством которых и шлёт всякую сделанную бухами отчетность, криптуя и подписывая её православным и духовно-скрепным ГОСТ-ом.

База данных у неё файловая, при чём в отдельный файл кладётся каждая мелочь. Если у вас письмо пришло из налоговой — заголовок будет в одном файле, тело — в другом, вложения — каждое в своём отдельном файле. Метаданные — тоже отдельно. База достаточно ценна, поэтому даже для небольшой бухгалтерии, работавшей 2-3 года в этой софтине, ваш файловый сервер должен быть готов принять на грудь примерно 250 Мб говна, раскиданного в виде ~ 75 000 мелких файлов по ~ 69 000 каталогов. Что мешало для хранения почты и документов применить стандартнейший Unix-Mailbox или встраиваемубю БД SQLite — непонятно. Сомневаюсь, что операции в них будут сильно дольше, чем в десятках тысяч мелких файлов на файловом сервере =).

Если вы хоть немного интересовались тем, как пишется софт под виндовс, то наверняка слышали, что начиная уже с Windows 2000 майкрософт настоятельно рекомендует в Program Files помещать только исполнимый код (exe, dll), статические части программ (ресурсы), общие конфиги, настраиваемые админом для всех пользователей, тогда как рабочие файлы, пользовательско-специфичные конфиги и прочие настройки должны лежать в профиле пользователя.

Если это файловое хранение — то в Documents and Settings / Users, если реестр — то HKCU, но никак не в %WinDir%, %ProgramDir% / HKLM !! Хранение всего в одной куче уже даже во времена виндовс-ХР (ныне окончательно почившей в бозе) считалось весьма дурным тоном и криворукожопием вкупе с неумением читать маны на MSDN.
Разработчики Аргоса умудрились тут наступить на несколько типов граблей разом.

Первое — рабочая база (естественно, она должна быть открыта на запись) лежит по умолчанию в Program Files, в подкаталоге Argos/E-Tax/Archive.
Второе — для работы софтины требуется право записи в часть подкаталогов установленной программы. Помимо каталога Archive, на запись также должны быть открыты подкаталоги target, SNP, dbstorage, config_history и Temp (не путать с системным %Temp%, у этой программы он свой).
Также на запись должны быть доступны некоторые XML-конфиги: config.xml, editorConfig.xml, pps*.xml.
Третье — для запуска компонента «Редактор» применяется активация ActiveX-компонента уже из пользовательского %Temp%.
Четвертое — логи лежат там же, где и база, в подкаталоге Logs, естественно они должны быть доступны на запись пользователю Аргоса.
Пятое — механизм автообновления Аргоса и его модулей под обычным пользователем с включенным SRP не работает из-за невозможность запуска произвольных бинарных файлов под пользователм и закрытой записи в Program Fies. Это просто повальная беда всей виндовс-платформы, как только мы хотим работать в более-менее безопасных окружениях и при этом иметь работающие автообновления для стороннего софта. Решения есть, но это всегда сторонние костыли, и я не уверен, что эти костыли что-либо знают про Аргос и ему подобные программы.

Это всё не очень большая проблема, пока у вас — говноконтора без штатного админа. где одинокий печальный бухгалтер сидит с правами локального админа и творит чёрти что (как правило, до первого залёта на какой-нить GPCode или CTB-Locker).

В случае же минимально поставленной безопасности, которая для виндовс-систем включает в себя работу под обычным не-админским пользователем + электрификацию всей страны SRP-политики в режиме балого списка, каждый из этих пунктов доставляет админу изрядный геморрой.

1). В настройках программы, конечно, можно указать размещение каталога с базой. Но это не отменяет требование открытых на запись подкаталогов Temp, Logs и прочих. Поэтому если просто разрешить запись в требуемые подкаталоги — в системе защиты будет пробита изрядного размера дырень. Поэтому правильный путь тут такой — путь в настройках программы не меняем, на файловом сервере делаем расшаренный каталог, доступный бухам на запись. Подключать SMB-ресурсы надо только как сетевые диски.
Обращение по netbios-именам в стиле \\ServerName\BuhShareName может быть не понято кривым софтом. Поэтому подключаем \\ServerName\BuhShareName как X:\, там создаём подкаталог Argos, где будут храниться все изменяемые программой файлы, представляющие какую-либо значимую ценность.
Потом копируем требуемые каталоги на файловый сервер, в Program Files/Argos/E-Tax их стираем нахуй (уделить бэкапам максимум внимания на этом этапе!!), и заменяем православными симлинками. Для этого открываем cmd-шелл в C:\Program Files\Argos\E-Tax, и убедившись, что у нас перенесены на файловый сервер в X:\Argos требуемые каталоги, даём пачку команд на создание вместо них симлинков:

cd C:\Program Files\Argos\E-Tax
mklink /D Archive X:\Argos\Archive
mklink /D config_history X:\Argos\config_history
mklink /D dbstorage X:\Argos\dbstorage
mklink /D SNP X:\Argos\SNP
mklink /D target X:\Argos\target
mklink /D Temp X:\Argos\Temp
mklink /D Logs X:\Argos\Logs

Файловая система должны быть NTFS, само собой. Впрочем, если у вас на системном разделе с виндовс в 2015-м году всё ещё FAT — то вам лучше воспользоваться другой статьей моего блога, пока бухгалтеры вас не покарали за просранные базы более жестокими способами.

2). Конфиги в XML не имеют столь большой ценности, их вам в любой момент пришлёт саппорт аргоса. Их проще разрешить изменять обычным пользователям, и просто один раз скопировать в X:\Argos, чем городить дополнительные симлинки.

3). С актив-Хэ компонентом засада была в том, что его блокировка, в отличие от блокировки скопированного notepad.exe, почему-то не вызывала событий в Event Log системы. Почему так — не скажу, в виндовс разбираюсь довольно слабо. То ли сломалось чего, то ли Аргос взывает компонент каким-то хитрым способом, то ли над патчами недостаточно медитировал Верховный Индус Микрософта. Зато в логах самой программы я таки нашёл требуемое:

27.04.2015 11:33:17 SEVERE : Unable to open activeX control
java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
no swt-win32-3738 in java.library.path
no swt-win32 in java.library.path
C:\Users\buh-user\.swt\lib\win32\x86\swt-win32-3738.dll: Эта программа заблокирована групповой политикой. За дополнительными сведениями обращайтесь к системному администратору
Can't load library: C:\Users\buh-user\.swt\lib\win32\x86\swt-win32.dll

at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.C.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.argos.snp.NPEditor.(Unknown Source)
at com.argos.etax.payerclient.actions.SNPEditorAction$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Из всего этого джавовского эксцепшена нам нужет только путь к файлу. Добавляем его в белый список SRP по хэшу. Конечно, при обновлении софта хэш придется обновить, но это небольшая плата за сохранение приемлимого уровня защиты компьютеров бухгалтерии. После этого обязательно перезапускаем Аргос — и компонент Редактора должен заработать.

4). Чем ещё классны симлинки. Софт видит их как подкаталоги в Program Files, и в софте не требуется никаких перенастроек. Но механизм SRP анализирует их путь от диска рзмещения!
То есть несмотря на то, что все файлы разрешено запускать из Program Files, файлы в симлинкнутых каталогах механизм SRP считает принадлежащими диску X, что совершенно правильно. То есть из C:\Program Files\Argos\E-Tax файлы запускаться будут, а из симлинкнутого C:\Program Files\Argos\E-Tax\Arhive ( => X:\Argos\Archive ) — уже нет, что и программе работать не мешает, и нам не сильно ослабляет защиту.

5). Вообще обновления стороннего ПО на виндовс — это боль. Пакетный менеджер пока появился только в виндовс-10.1, и то в весьма зачаточном состоянии. И если встроенное ПО корректно обновляется системным виндовс-апдейтом (ну, как правило 😀 :D), то сторонний софт тупо наивно полагает, что все сидят под локал-админом, и их обновляторы ничера под обычным юзером не обновляют. Этой участи не избежали обновляторы для Java, Adobe и ещё кучи софтин, и аргос тут не исключение. Правильный путь — консольная тулза, которую можно было бы в фоне запускать от админа планировщиком, не беспокоя пользователей. Но это типа не виндовс-вей, так что пока что остаётся только тихо страдать и также тихо мечтать в розовых снах об `yum update` под виндовс.
Тут конечно обновления не так критичны, как на яву и флеш. Ручное обновление требует админского вмшательства — заходим админом, монитруем сетевой диск той же буквой, обновляем программу и модули. не забываем ихз этого админа выйти. чтобы бухгалтер чего не натворил.

P.S. На эту тему я попиливаю Аргос уже год, но нихера не меняется. Если вам эта статья сложна, и вас пугают симлинки на виндовс — то ваш путь лежит к веб-интерфейсным системам типа ТаксКома. Там тоже есть демоны Хаоса и тираниды Актив-Хэ и кривые компоненты для IE, но обновление форм отчетности происходит на сервере, и от вас никак не зависит, да и бэкапить ничего не требуется, за хранение данных отвечает такском.

Большое спасибо саппорту Аргоса, который помог в меру своих сил, знаний и возможностей таки запустить софт по-уму, без выдачи бухам прав локального админа.

- комментарии
  1. Karman:

    Круть. Раньше тоже похожий софт ковырял. Так и пришлось выдать права на изменение в папке программулины.

    У бУхов и кадров полно такого(((( но оно хоть не возникает внезапно.

    Что делать с СД/двд дисками от разных презентаций? Вместо пдф и док там запулят авторан, да еще и с установкой.

  2. За последние годы такого софта стало заметно меньше. Виндовс-виста и выше с её UAC и брутально-анальным принуждением к работе под юзером таки заставили программиздов открыть MSDN. Та же 1С, программы из ПФР и налоговой (налогоплательщики-20хх), всякие проверялки отчетности — всё это корректно работает в режиме белых списков SRP под обычным пользователем. Исключения встречаются, да.

    Авторан — зарЭзать, секир-башка ему даже микрософт уже официально сделал. Гонять на виртуалке в случае острой необходимости. Ну и само собой, чморить и пиздить ногами разработчегофф, кто так делает.

    Недовольных — высылать благим матом на форум Касперских и Паутиныча, пущай порассказывают пострадавшим от CTB-Locker, как им безопасность и SRp-политики работать мешали. Особенно тем, с кого за закриптованные базы сразу по 20 биткоинов вымогают.

    Просветление разом наступит.