emhanik
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Aufym 10:34 02-08-2016 Цитата: В смысле «схемы»? Я использую, но по-своему: чтобы понизить привилегии запускаемых программ, когда KeePass работает с высоким уровнем целостности. Цитата: Признаюсь, только по диагонали глянул. Но сразу очень не понравилась передача паролей в командной строке. И в комментах на это указали. У меня, например, логируются все запуски, так что этот вариант вообще неприемлем. Теперь про «мое» использование схем: http://kibinimatik.blogspot.com/2016/07/keepass.html#keepass-advanced-exec Как видите, я добавил схему «LNK://»: она означает запуск проводником ярлыков, расположенных в подпапке LNK. Благодаря проводнику запуск происходит с ограниченными привилегиями, даже если KeePass имеет права администратора. Подобным образом, через проводник, открываются и схемы http, https и т.д. У метода был недостаток: нельзя в самом KeePass'е задать аргументы командной строки, только в ярлыке. Но сейчас я подумал: а чем не вариант завести временный ярлык и при каждом запуске вписывать в него нужную программу и ее аргументы командной строки? Подробно. В самом KeePass'е меняем схему cmd: Код: cmd://{APPDIR}\RunViaExplorer.js {BASE:RMVSCM} | Это значит, что вместо прямого запуска какой-либо программы KeePass запустит в своей папке скрипт RunViaExplorer.js, сообщив ему эту программу вместе с ее аргументами командной строки. Этот скрипт соответствующим образом изменит ярлык temp.lnk, находящийся в подпапке LNK (ее нужно создать), а затем откроет этот ярлык проводником. Потом скрипт заметет следы: удалит данные из ярлыка. Код скрипта: Код: var WshShell = WScript.CreateObject("WScript.Shell"); var appDir = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.length - WScript.ScriptName.length - 1); var pathTempLink = appDir + "\\LNK\\temp.lnk"; var tempLnk = WshShell.CreateShortcut(pathTempLink); var args = WScript.Arguments; tempLnk.TargetPath = args(0); tempLnk.Arguments = ""; for (var i = 1; i < args.Count(); ++i) { var bound = args(i).search(/\s/) == -1 ? '' : '"'; tempLnk.Arguments += bound + args(i) + bound + ' '; } tempLnk.Save(); WshShell.Run("%windir%\\explorer.exe " + pathTempLink, 1, true); tempLnk.TargetPath = "%comspec%"; tempLnk.Arguments = ""; tempLnk.Save(); | На случай, если нужно запустить команду прямо из KeePass'а безо всяких проводников и ярлыков, добавим схему cmdDirect: Код: По крайней мере, у меня AmmyAdmin нормально запустился командой Код: cmd://C:\Prgs\AmmyyAdmin\AA.exe -elevated -connect {USERNAME} | Ну и, конечно, можно завести отдельную схему AmmyyAdmin: Код: cmd://{APPDIR}\RunViaExplorer.js C:\Prgs\AmmyyAdmin\AA.exe -elevated -connect {USERNAME} | Тогда в записях вместо ссылки можно будет писать просто Код: Пароль вводится автонабором: окно: Код: последовательность: Код: Если все-таки желаете передавать его в командной строке — используйте ключ Код: Идеи сырые, жду замечаний. | Всего записей: 979 | Зарегистр. 18-12-2011 | Отправлено: 03:48 03-08-2016 | Исправлено: emhanik, 03:50 03-08-2016 |
|