michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
161 stars 52 forks source link

Plugin unable to access pageant keys when running in elevated Far. #143

Open AnrDaemon opened 9 years ago

AnrDaemon commented 9 years ago

По ходу жизни постоянно приходится запускать Far с повышением привилегий. При этом NetBox не видит работающего рядом PageAnt. putty/plink в этой же ситуации без проблем коннектятся и авторизуются.

VictorVG commented 9 years ago

Правильно ибо NetBox к ним дороги не знает. Настройки путей в NetBox - Интеграция проверьте, раз, и тут прочитайте http://msdn.microsoft.com/ru-ru/library/7d83bc18.aspx (русский перевод той же статьи MSDN):

Путь поиска, используемый Windows для обнаружения библиотеки DLL

Используя механизмы явного и неявного связывания, Windows сначала выполняет поиск
"известных библиотек DLL", таких как Kernel32.dll и User32.dll. Затем Windows выполняет 
поиск библиотек DLL в следующей последовательности:

1)    Каталог, в котором находится исполняемый модуль текущего процесса.
2)    Текущий каталог.
3)    Системный каталог Windows. Путь к этому каталогу извлекается с помощью 
       функции GetSystemDirectory().
4)    Каталог Windows. Путь к этому каталогу извлекается с помощью функции GetWindowsDirectory().
5)    Каталоги, указанные в переменной среды PATH.

Примечание:

    Переменная среды LIBPATH не используется.

эти правила применяются ОС для поиска любых исполняемых файлов если в команде не указан абсолютный путь к исполняемому модулю.

AnrDaemon commented 9 years ago

При чём тут это?… Пути интеграции, естественно, прописаны верные, но они тут совершенно не при чём. PageAnt запущен в сессии обычного пользователя. В него загружены ключи. Запускаю Far - NetBox работает. Перезапускаю этот же Far с повышением привилегий. Все те же самые настройки, тот же самый пользователь, только на этот раз в полными правами - NetBox не видит ключи в PageAnt. Требует пароля. Тут же прямо в Far'е запускаю plink -ssh тотжехост - коннектится по ключам.

VictorVG commented 9 years ago

Как вы думаете тут есть телепаты? Что до запроса пароля, то всё правильно - механизм повышения привилегий в любой ОС при своём срабатывании запускает новую копию задачи в новой сессии от имени другого пользователя. Со всеми вытекающими...

AnrDaemon commented 9 years ago

Пользователь тот же. putty работает. NetBox нет. sessions (На скриншоте mintty, а не putty, если это не очевидно. Привилегированный слева.)

VictorVG commented 9 years ago

Вижу, но вы ошибаетесь говоря что пользователь тот же. Механизм описан в MSDN (https://msdn.microsoft.com/en-us/library/aa751843%28v=vs.110%29.aspx)

AnrDaemon commented 9 years ago

Знаете, мне, честно говоря, как-то без разницы, какой пользователь. Хоть фиолетовый в крапинку.

Факт в том, что две программы, предположительно построенные на одной библиотеке (базе кода, как хотите назовите), работают по-разному. Причём достаточно по-разному, чтобы создавать головную боль у пользователя.

AnrDaemon commented 9 years ago

А статья вообще выглядит ни к селу, ни к городу. Во-первых, при чём тут .Net 4.5, во-вторых, подзаголовок статьи "Elevation of privilege results from giving an attacker authorization permissions beyond those initially granted."

VictorVG commented 9 years ago

В таком случае пишите собственную ОС и там устанавливайте личные правила, а в действующей хотите или нет, но будете играть по её правилам. И ваш "баг-репорт" это грубое нежелание думать, а посему должен остаться без рассмотрения.

AnrDaemon commented 9 years ago

То есть вы хотите сказать, что люди, постящие вам баги, по определению не способны сложить 2+2 и проанализировать то, что они видят на экране?

Тогда делайте раз - логиньтесь под админом. Делайте два - запускайте pageant. Делайте три - добавляйте в него ключ. Делайте четыре - запускайте Far. Делайте пять - открывайте NetBox. Делайте шесть - соединяйтесь с сайтом по ключу из агента. Делайте семь - открывайте Far с повышением привилегий. Делайте восемь - заходите в каталог PuTTY. Делайте девять - запускайте plink -ssh user@host -v -agent exit. Делаете десять - открываете NetBox. Делаете одиннадцать - пытаетесь повторить подвиг plink'а.

Как выполните, доложите ваши наблюдения. Мне очень интересно, к каким выводам придёте вы. Свои я изложил выше.

VictorVG commented 9 years ago

Просто в отличии от вас я не делаю скоропалительных выводов. Вы приводите скриншот где я по приглашению вижу уровень прав, но отбрасываете "маленький пустяк" - взаимодействие процессов и делаете ошибочный вывод что раз консоль запущена пользователем А и там виден вывод привилегированной сессии, то значит всё происходит в рамках одного процесса, а раз так то я даю вам ложные данные чтобы запутать вас. На деле механизм работает иначе чем кажется по картинкам - объясню на примере утилиты su(1) (одно из её описаний тут - http://www.freebsd.org/cgi/man.cgi?query=su%281%29&apropos=0&sektion=0&manpath=FreeBSD+10.1-RELEASE&arch=default&format=html) которая позволяет выполнить одну или более команд от имени другого пользователя:

исходно мы работаем в сессии пользователя А и у нас на терминале выводится приглашение вида $ , но в процессе работы нам надо выполнить ряд операций от имени пользователей D и суперпользователя root ( в терминах Windows админа) и тогда мы выдаём в терминале команду su [options] username [user_password] и если всё прошло успешно олицетворяемся с другим пользователем. Для непривилегированной учётной записи приглашение не изменится, а для суперпользователя приобретёт вид #, НО! для успешности выполнения команды su [-m] root rootpswd необходимо чтобы мы входили в группу wheel в противном случае мы не получим повышенных прав. Если всё прошло успешно, то ОС запускает фоновую сессию куда из родительской сессии перенаправляются команды оператора, а их вывод перенаправляет на терминал вызвавшей сессии, но для оператора если он ввёл команду su с ключом -m видимого изменения среды не происходит ибо его домашний каталог и шелл не менялись. И если следовать вашей логике то пользователю A временно добавили права и другого пользователя в системе нет, но на деле ядро запустило ещё один сеанс, просто он скрыт и взаимодействует с нами через сетевые механизмы.

На платформе WINNT разработанной на основе ОС DEC OpenVMS используется упрощенный механизм повышения привилегий предполагающий что все пользователи входящие в локальную группу users имеют право олицетворения с с другими пользователями, но при запуске задачи/процесса/треда с повышенными привилегиями они выполняются в фоновом режиме в контексте того пользователя от имени которого инициировано их выполнение, а взаимодействие основного процесса и привилегированного идёт через механизмы ядра, и ваша "ирония" тут абсолютно неуместна т.к. в таком случае привелигированный процесс временно работает в отдельном сеансе и для передачи в него данных нужно использовать достаточно сложные механизмы. И тут есть возможное решение - плагин sudo. Вы должны установить у себя FarSudo (https://sourceforge.net/projects/farplugs/files/), запустить через него новую копию Far с правами админа и там можете выполнить все описанные вами операции. Это корректный способ, вы же вместо того, чтобы прочитать документацию по ОС и понять как работает механизм Elevation не разобравшись говорите "баг!" и предлагаете принять ошибочную гипотезу в качестве единственного допустимого объяснения происходящего.

AnrDaemon commented 9 years ago

Вы, прежде чем писать стену текста, проделали предложенную мной последовательность операций? Или у вас не возникает и тени мысли, что вы можете оказаться неправы, а все ваши аргументы - не относящимися к вопросу?

VictorVG commented 9 years ago

Конечно вы правы ибо вы не можете быть не правы, а документация по ОС это так, для дяди и её читать не надо, а можно сразу писать что вздумается. Упрямство в заблуждениях никому не приносит пользы.

AnrDaemon commented 9 years ago

То есть вы предложенную мною последовательность сами не произвели? И кто тут упрямствует в заблуждениях?

VictorVG commented 9 years ago

Вашу "проверку" я давно сделал - бред полный, но вы упорно ищете чёрную кошку в тёмной комнате лишь бы убедить себя в своей правоте.

AnrDaemon commented 9 years ago

Поясните, пожалуйста, выражение "бред полный"? Какое поведение вы наблюдаете?

VictorVG commented 9 years ago

ОС, фар и плагин ведут себя именно так как я вам написал - я вижу фоновый процесс с повышенными привилегиями и да, поскольку агент с загруженными вами в него ключами работает в сеансе другого пользователя при обращении к нему в текущей копии его процесса ранее введённых ключей нет. Именно это я вам неоднократно говорю, но именно это вы упорно игнорируете, а посему баг-репорт несостоятелен ибо вы не захотели думать, а думать надо.

AnrDaemon commented 9 years ago

Какой фоновый процесс? О чём вы? У меня растёт устойчивое чуство, что вы либо не понимаете, что нужно делать, либо не хотите понимать.

Ещё раз, по шагам.

  1. При включённом UAC.
  2. Залогиниться в систему под пользователем - членом группы "Администраторы".
  3. Запустить PageAnt с ключами.
  4. На иконке Far'a кликнуть правой кнопкой - "Запуск от имени администратора"
  5. Зайти этим Far'ом в каталог PuTTY.
  6. Выполнить команду plink -ssh user@host -v -agent exit (любое приложение, запущенное эскалированным приложением, получает те же самые права).
  7. Полюбоваться, как plink, запущенный с повышенными привилегиями, без проблем коннектится к удалённому серверу по ключам.
  8. Попробовать проделать то же самое в NetBox этого же самого Far'а.
  9. Обломаться о запрос пароля.

Это так сложно? Или, может, вы наблюдаете какое-то другое поведение? Или у вас есть "более другое" объяснение поведению plink, кроме как "works as intended"?

VictorVG commented 9 years ago

Я смотрю вы совсем не хотите слушать. Я проверил вашу "методику", вижу фоновый процесс но "его нет ибо мне, AnrDaemon, он не нужен" посему дальнейший разговор считаю бессмысленным...

AnrDaemon commented 9 years ago

КАКОЙ фоновый процесс? Уж снизойдите до ответа на простой вопрос, напоследок.

VictorVG commented 9 years ago

Читайте внимательно!

AnrDaemon commented 9 years ago

Прочитал, ни намёка не увидел. Запустил ещё раз тесты - никаких посторонних процессов нет. Привилегированный Far, его conhost, запущенный им cmd.exe и plink. Инфы по модулям не видно, потому что смотрим из непривилегированного Far'а. sessions2

VictorVG commented 9 years ago

А вы воспользуйтесь не Far-ом , а иным инструментом - Process Hacker (https://yadi.sk/d/193Gnglm4Ia5D , последний бинарник - v2.34 SVN r5687, x86, AMD64, инсталлируемая и "портабле" сборки, dbghelp.dll (эта может понадобится если в системе нет Debugging Tools for Windows), документация, исходники пришлось из архива убрать - народ упросил, а раз так, то пусть сами с SVN обновляются :) ) смотрите - он позволяет проконтролировать то, что иными методами не посмотреть (только при инсталляции укажите установку драйвера - именно он и позволяет нам в самые "тёмные углы" системы заглянуть.

P.S.

Если вы используете Far 2.0, то под него точно вряд-ли есть смысл что-то править ибо версии 1.xx и 2.0 давно уже отправлены в архив, и коли баг в коде Far.exe, то это практически навсегда.

AnrDaemon commented 9 years ago

Куда смотреть и что я должен там увидеть? Можете не ходить вокруг да около а просто ответить на простой вопрос?

VictorVG commented 9 years ago

В главном окне программы щёлкните ПКМ по списку колонок и увидите их настройки (колонки можно перетаскивать для удобства), там нас интересует колонка User Name - в ней мы видим кто запустил ту или иную задачу или процесс. Давайте её посмотрим, а в свойствах процесса (ПКМ на его имени, Propites) мы с вами увидим вкладки его счётчиков производительности, хендлов, тредов, загруженных в его процессе модулей, распределения памяти. РН позволяет нам пройтись по всему дереву вложенных процессов задачи и увидеть что в ней творится с максимальной точностью. Я несколько часов назад собрал и выложил его новую версию v2.34 r5689, адрес тот же (он постоянный, я просто обновляю архив) где поправлена пара ошибок в плагине ToolStatus.

AnrDaemon commented 9 years ago

Смотрим. Что дальше? ph1

VictorVG commented 9 years ago

Дерево видите? Мы с вами видим, что процессы pageant (PID = 3684) и far.exe (PID = 11520) с его дочками запущены в одной сессии, но в разных задачах, а значит ЦП будет блокировать для них доступ к чужому ОЗУ - "Общайтесь цивилизовано!". Давайте глянем что у вас выйдет при срабатывании механизма Elevation.

AnrDaemon commented 9 years ago

Они уже запущены с эскалацией привилегий (оранжевый цвет видите?) Pageant (выше) запущен в обычной сессии. plink, как видите, подключился к серверу и ждёт дальнейших указаний. А вот NetBox работать отказывается.

VictorVG commented 9 years ago

Вы немного не там смотрите - на вкладке процессов мы видим их дерево, а что и как происходит в сети нужно смотреть на вкладке Network.

AnrDaemon commented 9 years ago

Там как бы дохрена чего происходит. Куда именно смотреть?

VictorVG commented 9 years ago

На вкладке NetWork ищем наши процессы по имени (для удобства можем воспользоваться фильтром - CtrlK) и смотрим колонку State. Что там пишется?

AnrDaemon commented 9 years ago

Пишется там предсказуемо всё.

plink.exe (13860), daemon2, 57073, daemon2, 57074, TCP, Established,

Module:                plink.exe
Full path:             C:\Programs\PuTTY\plink.exe
File version:          Release 0.63
Description:           Command-line SSH, Telnet, and Rlogin client
PID:                   13860
Parent PID:            17120  (cmd.exe)
Priority:              8
Threads:               5
Owner:                 daemon2\anrdaemon (S-1-5-21-2916456319-725650362-4229827469-1000)
Session:               1

netstat -aon | grep ":22"

$ netstat -aon | iconv -f CP866 | grep ":22"
  TCP    0.0.0.0:22025          0.0.0.0:0              LISTENING       2732
  TCP    0.0.0.0:22110          0.0.0.0:0              LISTENING       2732
  TCP    192.168.1.10:57075     192.168.1.12:22        ESTABLISHED     2496

(2496 - dwnetfilter, компонент антивируса)

Скажите, что я должен увидеть. А то вокруг да около можно ходить годами.

VictorVG commented 9 years ago

Процессы pageant.exe и Far.exe смотрите. Или мы с вами исследем что-то иное?

AnrDaemon commented 9 years ago

pageant вообще с сетью не общается. Никогда. Смысл туда смотреть?

VictorVG commented 9 years ago

А давайте убедимся. Для поиска ответа нам надо исключить все побочные элементы.

AnrDaemon commented 9 years ago

Убедимся в чём? Он не слушает ни одного порта! Он даже не импортирует ни одной сетевой библиотеки!

AnrDaemon commented 9 years ago

Сами откройте свойства pageant в вашем хакере и поищите там ws2_32|mswsock|wshtcpip|wship6|DNSAPI

VictorVG commented 9 years ago

Я смотрю вы сами себя убедили в том что всё происходят именно как вы их хотите видеть и иного признать не готовы.

Вызов либ "в лоб" из секции импортов - это конечно единственный способ их вызова и других не бывает. :)

AnrDaemon commented 9 years ago

При чём тут секции импорта? Я говорю о конкретно загруженных в процесс модулях. PuTTY тоже не сразу подгружает сетевой стек. Только когда актуально пытается соединиться с кем-то. Найдите в Far'е плагин Process List, и там откройте для себя кнопочку F3. Очень, знаете ли, показательно. И никаких хакеров не надо.

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

Вы так и не объяснили, что именно ВЫ наблюдаете про воспроизведении указанных мной тестов. Только упоминаете каких-то призраков, которых кроме вас никто не видит.

AnrDaemon commented 9 years ago

Знаете что, давайте проще поступим. У вас тимвьювер есть? Я приду с работы часиков в семь по москве, уставший и злой. Самое то настроение для поиска несуществующих процессов. Я запущу демонстрацию экрана, а вы мне будете говорить, какие кнопочки нажимать и куда смотреть.

VictorVG commented 9 years ago

Не держу, увы, и в итоге отписываюсь от данного "баг-репорта" ибо вы искуственно ищите предлоги для оправдания его существования, а мне этим заниматься некогда - чужую работу нужно сдавать.

AnrDaemon commented 9 years ago

Предлоги сущестования чего? Вам видео что ли записать, чтобы вы разули глаза?

VictorVG commented 9 years ago

Вас что в детсве вежливости не научили?

AnrDaemon commented 9 years ago

Мой запас вежливости за две недели истощился окончательно. Вы как страус, засунули голову в msdn и твердите "не может быть, потому что не может быть никогда". Отказываетесь проделать простую последовательность действий. Посылаете меня ловить какие-то мифические процессы. Что я должен по-вашему, улыбаться сидеть?

VictorVG commented 9 years ago

Прежде всего если вы желаете найти реальную причину явления, то нужно исключить все казалось бы самые вероятные ошибочные гипотезы. А это без экспериментальной проверки не сделать. Мой покойный отец когда-то рассказал мне чем отличается наука от религии:

поп кричит - на веру его, на веру! , а учёный кричит - на зуб его, на зуб! .

Так что я вам предлагаю поступить просто - оставьте эту проблему на некоторое время и отдохните занявшись иными делами, а после мы с вами к ней вернёмся, но со свежими силами.

Нет не решаемых задач, просто есть задачи которые в данный момент мы не можем решить, но непременно решим позднее.

AnrDaemon commented 9 years ago

Я не прошу от вас решения. Всё, чего я прошу - проделать манипуляции, не требующие скачивания посторонних програм, и сравнить результаты с теми, что наблюдаю я. Могу предоставить свой сервер для тестов. Скиньте идентификатор вашего ключа.

VictorVG commented 9 years ago

У меня сейчас ключа нет поскольку по работе не был нужен и протух, так что можем свежий генерить.

Кстати, свежий Far 3.0 x86/x64 . х64 тут можно взять https://yadi.sk/d/S96fUFmedrYgE (линк постоянный, я обновляю начинку архива), и бинарники х86 и x64 без FarColorer и NetBox отдельно https://yadi.sk/d/YcBvzdw4eobuz номер версии смотрите в version.txt https://yadi.sk/i/c-fy-oF9b39Rf . Собирается с оптимизацией по скорости работы и расходу ОЗУ. Сгодится?

AnrDaemon commented 9 years ago

SSH ключи же не ограничены по времени? Far 3 я не пользуюсь, не было времени посмотреть статусы используемых мною плагинов. Это не так просто, когда тебя на форуме забанили. >.>

VictorVG commented 9 years ago

С Far3 могу помочь - только что меня парень спрашивал по поводу моей х86 сборки - http://forum.ru-board.com/topic.cgi?forum=5&topic=31718&start=6280#20 . Я тут под НГ менял железо, но получил проблемы с драйверами USB 3.0 контроллера от Renessans потому сейчас всё делаю по принципу "минёр ошибается только один раз", а это понятно медленно, но и я не намерен отступать.

AnrDaemon commented 9 years ago

Проблема в том, что я использую около 35 плагинов, ни от одного из которых я в принципе не могу отказаться. Это не считая десяти стандартных. Плюс ArcLite меня ДИКО БЕСИТ. Мало того, что его функциональность не совпадает с функционалом MultiArc, так ещё новые/неизвестные контейнеры к нему не прикрутишь десятью строчками в ini. (За это меня кстати и забанили…)

VictorVG commented 9 years ago

Так мы и сами набор можем посмотреть, это не проблема. Если что на ру-борде тема жива и активна и задача решаема, как и с архиваторами. Сам использую арклайт и МА в общей связке с обсервером в качестве главного по распаковке контейнеров и всё прекрасно работает в Фар3. Так что задачка чисто техническая, а значит надо повозится и решить. За чем-то дело встало?