[Конспект админа] Что делать, если программа хочет прав администратора, а вы нет


    (с) Вася Ложкин.


    К сожалению, в работе сисадмина нет-нет да и приходится разрешать пользователям запускать всякий софт с админскими правами. Чаще всего это какие-нибудь странные китайские программы для работы с оборудованием. Но бывают и другие ситуации вроде небезызвестного bnk.exe.


    Выдавать пользователю права администратора, чтобы решить проблему быстро и просто, противоречит нормам инфобезопасности. Можно, конечно, дать ему отдельный компьютер и поместить в изолированную сеть, но — это дорого и вообще…


    Попробуем разобрать решения, которые позволят и программу запустить, и безопасника с финансистом не обозлить.


    Ну, и зачем тебе права?


    Программа может запрашивать права администратора условно в двух случаях:


    1. Когда хочет получить доступ туда, куда «простым смертным» нельзя: например, создавать файлы в системных каталогах.
    2. Когда программу скомпилировали со специальным флагом «Требовать права администратора».

    С первым случаем все понятно: берем в руки замечательную программу Марка Руссиновича Process Monitor, смотрим, что происходит, и куда программа пытается залезть:



    Куда это лезет этот 7Zip?


    И по результатам исследования выдаем права пользователю на нужный каталог или ветку реестра.


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


    Если сильно упростить, то в специальном манифесте программы (к слову, установщики — это тоже программы) могут быть три варианта запуска:


    • asInvoker. Программа запускается с теми же правами, что и породивший ее процесс (как правило, это explorer.exe c правами пользователя);
    • highestAvailable. Программа попросит максимально доступные пользователю права (у администратора появится окно с запросом повышения UAC, у пользователя — нет);
    • requireAdministrator. Программа будет требовать права администратора в любом случае.

    Если разработчик твердо решил требовать права администратора, даже если они не нужны, то обойти это можно малой кровью.


    Нет, не будет тебе прав


    В системе Windows, начиная с Vista, появилась служба UAC, которая помимо прочего отвечает за запросы программ на повышение прав. Не все программы «переваривали» работу с этой службой. Поэтому в системе был доработан механизм совместимости приложений, позволяющий прямо задать программе ее поведение — запрашивать права или нет.


    Простейшим вариантом работы с этим механизмом будет использование переменных среды.


    Рассмотрим пример с редактором реестра. Действительно, запуская regedit.exe под администратором, мы получаем запрос на повышение прав:



    Запрос повышение прав.


    Если же мы запустим редактор реестра из консоли, предварительно поменяв значение переменной среды __COMPAT_LAYER на:


    set __COMPAT_LAYER=RUNASINVOKER
    

    То запроса UAC не будет, как и административных прав у приложения:



    Бесправный редактор реестра.


    Этим можно пользоваться, запуская программы батниками или добавляя контекстное меню через реестр. Подробнее читайте в материале How to Run Program without Admin Privileges and to Bypass UAC Prompt?


    С конкретным примером такой неприятной программы можно столкнуться при загрузке классификаторов банков из 1С с сайта РБК по ссылке http://cbrates.rbc.ru/bnk/bnk.exe. Если обновление классификаторов отдается на откуп самим пользователям и нет возможности поменять загрузку на bnk.zip (а современные 1С это поддерживают), то приходится придумывать костыли. Ведь bnk.exe — самораспаковывающийся архив, в котором зачем-то прописано «Требовать права администратора».


    Поскольку ярлычками тут обойтись не выйдет, ведь 1С сама скачивает файл и запускает его, то придется применять тяжелую артиллерию — Microsoft Application Compatibility Toolkit.


    Документация к ПО, как обычно, доступна на официальном сайте, загрузить можно как часть Windows Assessment and Deployment Kit. Сам процесс решения проблемы несложен.


    Необходимо поставить утилиту, запустить Compatibility Administrator и создать Application Fix в новой или имеющейся базе данных:



    Создаем исправление приложения.


    Имя и издатель значения не имеют. Имеет значение только расположение файла — тут нужно указать реальный проблемный bnk.exe (где он будет лежать на самом деле — не важно).


    Далее необходимо в списке исправлений выбрать RunAsInvoker.



    Выбираем нужный фикс.


    Все остальное оставляем по умолчанию, сохраняем базу данных. Должно получиться примерно так:



    Созданный фикс для bnk.exe.


    После этого достаточно будет установить базу данных, щелкнув по ней правой кнопкой и выбрав Install. Теперь пользователи смогут сами грузить классификаторы банков.


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


    Ну ладно, держи права


    Казалось бы, самым очевидным решением для запуска нашего странного ПО выглядит использование встроенной утилиты Runas. Документация доступна на сайте Microsoft.


    Ну, посмотрим, что из этого выйдет.


    Команда:


    runas /savecred /user:Администратор "C:\Program Files\7-Zip\7zFM.exe" 
    

    Действительно, RunAs запустит 7zip с правами учетной записи «Администратор», спросит пароль и запомнит его. Потом ярлык с такой строкой запуска будет запускать 7zip под Администратором без вопросов.


    )


    Вводим пароль.


    Есть один существенный недостаток: пароль запоминается на уровне системы, и теперь, используя команду Runas, можно будет запускать абсолютно любую программу. Это мало чем отличается от прямого предоставления админских прав сотрудникам, так что использовать это решение не стоит.


    Зато runas может быть полезен, когда сотрудник знает пароль администратора, но работает под ограниченной учетной записью (по идее так должен делать каждый системный администратор).

    Если мы начали с консольных команд, то перейдем к более высокоуровневым скриптам. Интересное решение было предложено в статье «Планктонная Windows», где упомянутый выше Runas обвязывался js-скриптом и пропускался через обфускатор. У решения есть и очевидный минус — скрипт можно раскодировать.


    Чуть более интересным методом в 2к20 являются возможности PowerShell и его работа с паролями. Подробнее можно почитать в материале «Защита и шифрование паролей в скриптах PowerShell».


    Если вкратце: в PS работа с паролями производится через специальный тип данных SecureString и объект PSCredential. Например, можно ввести пароль интерактивно:


    $Cred = Get-Credential
    

    Затем сохранить пароль в зашифрованном виде в файл:


    $Cred.Password | ConvertFrom-SecureString | Set-Content c:\pass.txt
    

    И теперь использовать этот файл для неинтерактивной работы:


    $username = "Domain\Администратор"
    
    $pass = Get-Content C:\pass.txt | ConvertTo-SecureString
    
    $creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pass
    

    К сожалению, файл этот можно использовать только на том ПК, на котором его создали. Чтобы этого избежать, можно сделать отдельный ключ шифрования. Например так:


    $AESKey = New-Object Byte[] 32
    
    [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)
    
    $AESKey | out-file C:\password_aes.key
    

    Теперь при помощи этого ключа пароль можно зашифровать:


    $Cred.Password| ConvertFrom-SecureString -Key (get-content C:\password_aes.key
    
    )| Set-Content C:\pass.txt
    

    И расшифровать:


    $pass = Get-Content C:\pass.txt | ConvertTo-SecureString -Key (get-content C:\password_aes.key)
    

    К сожалению, с безопасностью дела обстоят так же печально: утащить пароль не составляет трудностей, если есть доступ к файлу с ключом шифрования и зашифрованным паролем. Да, можно добавить обфускации и скомпилировать скрипт в .exe вместе с нужными файлами. Но нужно понимать, что это — полумеры.


    В свое время я использовал для решения подобных задач свой любимый AutoIt, где компилировал скрипт с командой RunAs и радовался… До тех пор, пока не узнал, что AutoIt (особенно старых версий) декомпилируется на раз-два.

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


    На свете существует несколько сторонних решений, призванных решить задачу. Остановлюсь на парочке из них.


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


    Программа состоит из трех модулей. AdmiLink — это графическое окно, где можно создать ярлык на нужное приложение (в принципе, в ряде случаев достаточно только его).



    Основное окно программы.


    Помимо непосредственно создания ярлыка (и да, запрос UAC тоже можно подавлять), есть и дополнительные функции вроде калькулятора, терминала и удобных настроек политик безопасности. Со всеми возможностями программы читателю предлагается разобраться самостоятельно.


    Второй модуль называется AdmiRun и представляет из себя консольную утилиту. Она умеет запускать приложения от имени администратора, получив в качестве одного из параметров строку, созданную через AdmiLink. В строке шифруется имя пользователя и пароль, при этом участвует и путь к программе.


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


    Третий модуль — AdmiLaunch — отвечает за запуск окон в разных режимах, и он используется для запуска AdmiRun, если создавать ярлык через AdmiLink.


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


    RunAsRob — довольно интересное ПО за авторством немецкого разработчика Оливера Хессинга (Oliver Hessing). В отличие от AdmiLink, ПО устанавливается как служба, запускаемая под привилегированной учетной записью (администратора или системы). Как следствие, подготовленный ярлык обращается к службе, которая уже в свою очередь запускает заданное ПО.


    Особенность программы в том, что есть возможность авторизовать не только программы, но и папки (включая сетевые). А хранение настроек в реестре позволило добавить шаблоны групповых политик, примерно как мы писали в статье «Погружение в шаблоны и приручение GPO Windows». Благодаря этому при необходимости настройки можно применять прямо из Active Directory.



    Основное окно программы.


    Программа богато документирована на официальном сайте.


    У этого автора есть еще и программа RunAsSpc, позволяющая запускать исполняемые файлы под правами другого пользователя, передавая учетные данные через зашифрованный файл.


    Мне остается только добавить, что это ПО бесплатно только для личного использования.


    Но учтите, что из программы, запущенной под административными правами, можно натворить бед. Например, запустить привилегированную командную консоль через диалог Файл — Открыть.



    Запускаем cmd.exe прямо из редактора реестра.


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


    А вам приходилось городить странные костыли? Предлагаю делиться историями в комментариях.

    Сервер Молл
    серверы HP, Dell и Lenovo: новые и восстановленные

    Комментарии 85

      0
      С картинками беда — они не подгружаются в пост.
        0
        Спасибо, поправили
        0
        Время от времени сталкиваюсь с инсталляторами, которые, несмотря на поддерживаемый портабельный режим, при запуске требуют обязательных админских прав. Хак с __COMPAT_LAYER иногда помогает, но часть инсталляторов оказываются хитромудрыми и сами себя перезапускают с требованием повышенных привилегий, игнорируя эту переменную.
          0
          а это точно инсталлятор перезапускается, а не инсталлятор распаковывается и запускает бинарник? во втором случае хак может не помочь, в отличие от фикса через тулкит
            0
            Последний раз, когда я на это наткнулся, в диалоге UAC было указано, что запускается тот же самый файл, что стартанул я, но с дополнительными параметрами. Но да, бывает, что и распакованный файл стартует; я забыл про такой сценарий, хотя тоже сталкивался.
              0
              Если запускается тот же файл, то, скорее всего, это инсталлятор от InnoSetup. Его можно распаковать программой innounp
                0
                Да, я обычно в таких случаях как раз и пытаюсь распаковать. Но не всегда это оказывается Inno. Бывает, что и UniExtract не справляется.
              0
              а это точно инсталлятор перезапускается, а не инсталлятор распаковывается и запускает бинарник? во втором случае хак может не помочь, в отличие от фикса через тулкит

              А разве переменные среды окружения не наследуются дочерними процесами?
                0
                Во-первых, зависит от аргументов, переданных функции запуска процесса.
                Во-вторых, если программа явным образом запускает другую с повышенными привилегиями, то, насколько я понимаю, переменная игнорируется.
            0
            Скажите, что со скайпом делать? Он без админских прав не обновляется.
              0
              Попробуйте дать пользователю права на папку со Skype, либо устанавливать не в Program Files.
                0
                Насколько я помню, скайп по умолчанию туда ставит (он вообще не спрашивает куда его поставить)
                0
                Использовать web.skype.com, создать ярлык из Chrome, выглядит практически как скайп-standalone — пользователи не видят разницы
                  0

                  Использую плиточный Скайп, но он глючит

                +1
                > Ведь bnk.exe — самораспаковывающийся архив, в котором зачем-то прописано «Требовать права администратора».

                — Скажите, а как Вы справляетесь со стрессами?
                — Нахожу источник стресса и ломаю ему ноги

                Там в bnk.exe координаты автора не указаны, не?
                  0

                  В powershell для шифрования можно использовать сертификат, который будет распространяться через pki, а работать с ними можно через командлеты *-cmsmessage

                    +4
                    А вам приходилось городить странные костыли?

                    Было несколько лет назад такое: написали сервис, который требовал для работы минимум IE10, а лучше хромиумное что-то или Fx.
                    У пользователей есть в лучшем случае IE9. Безопасники лютуют: приложения запускаются только по белому списку, а хром официально запрещено запускать (даже если установить переносную версию). Пользователи тоже не всегда отличаются умом и сообразительностью, им чем проще — тем лучше.
                    При этом безопасники готовы разрешить запуск одного проверенного ими приложения, с условием, что с его помощью за пределы указанного сервиса выбраться будет нельзя; если приложение будет хотя бы выглядеть как один цельный бинарник, шанс пройти проверку у него будет выше.
                    То есть нужно этакое окно на один-единственный сайт. Тупо sitename.exe, можно даже без браузерного интерфейса, вся навигация вполне обеспечивается самим сайтом.

                    Мысль нулевая: допилить ресурс, чтобы работал в старых версиях IE. С негодованием отвергается всеми, ещё полчаса разработческий чатик кипит ненавистью.
                    Мысль первая: взять хромиум, допилить, собрать на его базе sitename.exe. Отказано по очевидным причинам.
                    Мысль вторая: сваять на чём-то вроде Delphi приложение с веб-контролом. Для Дельфи есть хромиумный компонент, так что идея не выглядела нереализуемой. Но хотелось ещё проще, и без добавления сущностей.
                    Мысль третья: доработать сам сервис, впилив в него какое-нибудь REST API, а потом на любом ЯП под любую платформу пилить нативные приложения. В целом идея зашибись, но требует времени (а sitename.exe нужен послезавтра) и сил на поддержку (каждую клиентскую фичу нужно дублировать в API и в приложении).
                    Мысль четвёртая: взять браузер, и виртуализировать его в чём-то наподобие XenApp. Идея ложится со скрипом — добавляется новая сущность в виде среды виртуализации, на которую безопасники могут залупиться ещё сильнее, например.
                    Мысль пятая: сделать приложение на каком-нибудь специально созданном для этого инструменте, типа электрона или что там в те годы было. Но дико не хочется тащить за собой весь обвес и поддерживать тоже.

                    Остановился я вот на чём: взял браузер Vivaldi, интерфейс которого написан на HTML+JS+CSS, а кишки — всё тот же хромиум. Не буду отдельно расписывать все манипуляции (они здесь, кому интересно), но в итоге получилось выкинуть из браузера весь интерфейс и меню, убрать хоткеи, впилить в него белый список и отучить ходить за пределы собственного каталога. Получилось просто окно, в котором открывался и нормально работал нужный сайт:
                    image

                    Каталог с браузером убирался в sfx-архив sitename.exe. Безопасники внесли в белый список этот файл и %tmpdir%\vivaldi.exe — и voilà, задача решена с приемлимым количеством приседаний.

                    И, в общем, этим костылём пользовались, пока пользователей не перевели на яндекс.браузер.
                      0

                      А почему это проще, чем


                      сваять на чём-то вроде Delphi приложение с веб-контролом.
                        +1
                        Такого на Delphi я не делал (речь не о дефолтном контроле, наследуемом, вроде бы, из системного IE, а о чём-то хромиумном), да и сам язык на тот момент уже подзабыл. Ловить ошибки на чужих компах (а они, в такой ситуации, неизбежны), опять же, — ну, не то, чтоб нереализуемо, но… Стоило сначала попробовать другие варианты.
                        И с вивальди сразу и хорошо получилось, буквально за час времени.
                          +1

                          А почему в таком случае CEF не попробовали?

                            0
                            CEF

                            Я сейчас впервые вижу эту аббревиатуру.
                            Нет, я слышал, что встраивать хром как-то можно, но и тогда, и сейчас не знал, как. Соответственно, такое решение просто не пришло мне в голову. А опыт деконструкции Вивальди уже был, вот и всплыло.
                              0
                              CEF, он же Chromium Embedded Framework. Сам написан на C++, но есть множество форков. Хороший вариант, когда нужна автоматизация при отсутствии API, или когда нужен двиг браузера, но не нужен его обвес по UI.
                              Для личных проектов раньше пользовался еще Awesonium, сейчас кажется они Ultralight называются. Единственный минус: free for non-commerce. В остальном очень похож был на CEF.

                              PS. А IE контрол обычно дергает установленный в системе IE, а это привет той же проблеме, от которой вы хотели сбежать.

                        +1

                        Странно, что хром запретили, а Вивальди — нет. Он же на том же движке, если не ошибаюсь?

                          +1
                          Не ошибаетесь. Я махнул рукой на поиски логики в тех решениях.
                          • НЛО прилетело и опубликовало эту надпись здесь
                          –7
                          <sarcasmmode=on>
                          Уже пора написать что в линуксе таких проблем нет?
                          <sarcasmmode=off>
                          0
                          Я читал, что в Windows теперь есть sandbox. Очень было бы интересно, если бы можно было бы что-то по аналогии с flatpak в Windows использовать. Одна из проблем, которую я вижу у друзей — это при слетании системы или вылетании диска все нужно переустанавливать. Было бы круто, если бы просто были файлы с контейнерами с софтом, все упростилось бы.
                            0
                            В одной из контор где я работал админские права на собственную рабочую станцию были у всех пользователей. Ииии… И ничего, ни одного происшествия связанного именно с этим.
                                +3
                                Намекаете что те, у кого случилась таки неприятность — погибли, и не могут нам об этом рассказать?
                                  +1
                                  В данном случае можно трактовать чуть шире — если я чего-то не видел/не знаю, то это не значит что это не случалось. При желании впрочем можно придумать сценарии когда не вовремя вышедший из строя компьютер может стоить кому-то жизни.
                                  Ну а если серьёзно, то мой не малый опыт админства говорит о том, что ничего хорошего с админскими правами не случится. С появлением UAC конечно в этом плане стало гораздо легче, а вот во времена XP это была реально беда. К полностью неработоспособной системе это может приводило и не столь часто, но зоопарки были знатные. Тут ведь опять же как оценивать происшествие, есть оно или нет? Вот сидит скажем среднестатистический бухгалтер среднестатистической конторы и всё у него вроде и хорошо, ему-то какое дело, что на машине зоопарк? Потом во всей конторе перестаёт почта отправляться и оказывается, что провайдер TCP 25 заблокировал потому что спам валил. Шифровальщиков-вымогателей тогда не придумали ещё и незамедлительный эффект не наступал.
                                    0
                                    Я тоже видел админские права у обычных пользователей, хотя постойте — это же была вирлаба ЛК, так что пользователи были не такие и простые
                                    0
                                    Я рискну предположить, что тут иная ситуация.
                                    Система считается надежной, потому что она работает и при этом не ломается. А не ломается она просто потому, что ее никто особо и не пытается ломать. (Эдакий Неуловимый Джо — его никто не ловит, потому что он задаром никому не нужен). Хотя сломать можно все что угодно, если хорошо постараться, но принцип разумной достаточности никто не отменял.

                                    Это я к тому, что если организация небольшая, работа преимущественно конторская, и все сотрудники на виду и все грамотные, то такой подход (да пускай все работают под админскими аккаунтами с пустыми паролями, главное чтобы у всех антивирусы работали, обновления ставились, и резервные копии создавались своевременно) — вполне допустим. Для крупной организации, (например, для банка) — уже категорически недопустим.
                                      +2
                                      Знаю пару мест, где тоже так думали… пока не грохнуло. Времени на всё про всё уходило 10-15 лет. Ресурсы злоумышленникам нужны всегда; не найдут сами, что с ними делать, так коллегам доступы продадут. И по фигу, крупная это контора или никому не нужная мелочь.
                                      +1
                                      Это примерно как пользователи говорят мол я 7 лет без антивируса и ничего. И приэтом куча тех, кто стал жертвами вымогателей тоже работая и не защищаясь.
                                        +1
                                        Как и куча тех, кто с любыми системами защиты умудряется поналовить всякого разного, от рекламы проституток, до локера. В реале люди думают куда и где идут и с кем контактируют, но в интернете им на все пофиг и принцип один: если что-то вылезло, значит надо ткнуть, и пофиг, что оно ведет не пойми куда.
                                    +2

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

                                      0
                                      За 6 лет не было ни одного, так что я думаю подход можно считать безопасным и проверенным временем.
                                        +2

                                        Вторая часть утверждения:
                                        Если неприятность не может произойти, то она всё равно где-нибудь произойдет. Причем произойдет в таком месте, где её никто не ожидает...

                                          +3

                                          10 лет езжу на летней резине круглый год (снег/лёд присутствуют) без происшествий — подход можно считать безопасным и проверенным временем.

                                            +1
                                            Если у вас есть бэкап автомобиля и самого себя, то вполне себе безопасный подход. Если что случится, спокойно восстановите уничтоженное.
                                              0

                                              Я не автомобилист, но, кмк, вполне себе разумный подход, если аккуратно водить: самая низкая температура в январе, но и она колеблется от -2 до +3 по Цельсию, то есть днём льда на дорогах, наверное, мало. Погода с 1971 по 2000


                                              Ну, и я надеюсь, что 10 лет не на одних и тех же шинах. :)

                                                0
                                                что 10 лет не на одних и тех же шинах
                                                Почему нет? Если пробег в пару тыщ в год…
                                                  0
                                                  от времени на ней появляются трещины
                                                  0
                                                  Если чистый асфальт, то не страшно, а если каша, то риски возрастают многократно, особенно учитывая, что мало кто из водителей (практически никто) вообще умеет управлять машиной в заносе и сносе. Первый снег каждый год это подтверждает, ибо заранее почти никто не переобувается.
                                            +3
                                            И шито может произойти? убить свои документы можно и без админских прав. Убитая станция расскатывается из образа за время сравнимое с его копированием, то есть это не трабл. Антивирь управляемый доменными политиками не даёт локальному админу разгуляться слишком сильно.

                                            В общем, моё ИМХО — самое ценное на компе это то, что делает пользователь под своими правами. Если это не защищено, то оно выстрелит и без админ прав. А если защищено, то локальное админство не страшно ни разу.
                                              0

                                              С антивирусом — особо ничего

                                          –4
                                          Вот бы еще кто объяснил как «Брат 2: Обратно в Америку» запустить из-под свежей винды :)
                                            0

                                            Вам сюда: https://qna.habr.com/

                                              0
                                              Да там глухо — это древняя игрушка, в которой захардкодена проверка на версию винды = 98 и если не совпадает, то не идет ни в какую. Там уже копий на форумах много сломано и в определенной мере название игры стало именем нарицательным в том смысле, что «не работает чуть менее, чем полностью»
                                                0

                                                Если 98/95, то её можно навернуть поверх DosBox.

                                              +2

                                              Существует windows-версия Wine.

                                              0
                                              Использовал неоднократно Admlink для выдачи прав админа на определённые программы (в частности для установки шрифтов в Windows через ПО FontManager) Благо что с 1903 поддерживается установка шрифтов в пространство пользователя и от этого элегантного «костыля» отказался. Хочу так же заметить что в домене прекрасно работает один и тот же ярлык, созданный с помощью Admlink на всех компьютерах без необходимости внесения дополнительных изменений.
                                                0
                                                Шрифты кладутся в произвольный каталог и динамически грузятся в сессию пользователя менеджером шрифтов. Оно так изначально спроектировано ещё с 2k (а то и с NT), нужно только подобрать по вкусу сторонний сторонний менеджер шрифтов.
                                                  0
                                                  Возможно вы правы, однако эмпирические тесты со встроенным менеджером шрифтов Corel Draw показали что без прав админа он не хочет запускаться.
                                                  0
                                                  Ну так это потому что генерируется строка запуска не от локального, а от доменного админа. А его идентификатор, внезапно, на всех пк в домене одинаков)
                                                    0
                                                    Используемая учётная запись имеет у меня только права локального админа, однако да. Ваш посыл про единый SID для пользователя верен. И именно поэтому я обратил на это внимание не вдаваясь в технические подробности. Факт в том, что программа исправно работает на иных компьютерах даже если на нём никогда не вводились админские учётные данные которые «зашиты» в ярлыке.
                                                  +1
                                                  Возник вопрос в обратную тему, но тоже на тему костылей: никто не знает приемлемого способа залогиниться/запустить определённую программу под учёткой юзера от админа, не зная пароля юзера? Виндовый такой аналог su/sudo? Часто поддержке нужно, когда разбирают заявки, пришедшие с другого конца света, когда сессии юзера живой нет давно, а воспроизвести проблему нужно…
                                                    –1
                                                    Если есть админиские права, то создать тестового юзера с аналогичными правами не проблема, и воспроизвести ситуацию из под него.
                                                      0
                                                      Вы прям КО… В нормально энтерпрайз среде очень часто нужно запустить определенное ПО с профилем определенного пользователя.
                                                        0
                                                        Побуду, ещё одним капитаном )
                                                        Имхо, если такое возможно — то это серьезная дырка в безопасности. Или у вас админы «святее папы римского»?
                                                        А так, сменить пароль пользователя на новый, сообщить пользователю чтобы сменил обратно.

                                                        Упс, поторопился написать — ниже уже обсуждено.
                                                          +1
                                                          Все *nix системы с этой «дырой» как-то справляются :) Админ в любом случае практически все может прочитать, что не зашифровано.
                                                      0

                                                      Зависит от требуемой широты решения.


                                                      Если надо иногда некоторым пользователям на время давать права администратора, то есть, например, Avecto Defpoint. Можно разрешить пользователю запускать только определенное ПО от админа, или же давать это право только на пару часов (например).


                                                      Более самостоятельно решение — можно создавать виртуальный аккаунт с нужными правами. Он будет удален, если я не ошибаюсь, когда завершатся все потоки с ним. Например, IIS использует эту технику, чтобы разделять разные пулы (чтобы сайты не лезли в память друг другу).

                                                        0
                                                        Не очень понял как мне помогут обозначенные решения. Сценарий моей постоянной головной боли таков:

                                                        1. Есть некое проприетарное ERP-ПО (например DATEV немецкий), они связывают логины в ДЦ с Windows SID юзера. Профиль пользователя локальный лежит в %APPDATA% и зашифрован ключом, который приходит с ДЦ для нужного SID.
                                                        2. Пользователь рапортует о проблеме внутри этого ПО.
                                                        3. Админ входит под своей учеткой (ессна получает другой профиль), у него проблема не воспроизводится (все работает штатно).
                                                        4. Ему нужно зайти к пользователю, чтобы воспроизвести проблему, которая завязана на его профиль и разобраться в ней. Можно бы залезть как-то удаленно к пользователю, но сам пользователь уже оффлайн.

                                                        Как быть?
                                                          0

                                                          Понял, Вы правы. Тогда у меня нет ответа для решения задачи в общем случае. Могу только посоветовать Windows Remote Assistance — если все компы в домене, можно удаленно попросить пользователя дать управление. Будет такой аналог RDP, однако пользователь будет физически видеть всё, что Вы делаете (ну т.е. курсор будет сам ездить). Хотя уверен, вы уже это опробовали, так что каких-то новых идей нет...

                                                            0
                                                            Как я уже сказал — что делать если пользователь оффлайн? Т.е. к моменту обработки его заявки он залогаутился и ушел домой. Удаленные сессии у нас давно настроены двумя разными способами…
                                                              +2
                                                              Как я уже сказал — что делать если пользователь оффлайн

                                                              Заходить от имени пользователя без его ведома, да еще и не оставляя следов — опасно, так как по сути это дыра в безопасности. Условно, перестает работать аудит, так как теперь учетная запись человека уже не аутентифицирует её.


                                                              Однако и тут есть путь, хоть он и более сложный. В новом Active Directory можно добавить свой authentication method. В этом случае проверка пароля может быть делегирована внешнему сервису. Этот метод используется, например, для нестандартных удаленных рабочих столов (когда у пользователя только тонкий клиент, так что при старте удаленного строла сам пароль может не спрашиваться).


                                                              Получается следующая схема:


                                                              1. Сначала необходимо создать сервис, который будет аутентифицировать пользователя. В теории, если админ хочет зайти под чужим именем, ему надо запросить временный ключ у этой компоненты (конечно, с ttl и так далее).
                                                              2. Необходимо настроить Active Directory, чтобы она доверяла этому сервису.
                                                              3. Если админу надо зайти полностью под именем другого пользователя, он может запросить ключ у сервиса выше, а потом, с помощью него, зайти на машину. Мне пока непонятно, как самой клиентской винде сообщить об этом, однако, я думаю, здесь есть решение.

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

                                                                0
                                                                Уже интересно. Изучу вопрос, спасибо за наводку.
                                                          0
                                                          «Если надо иногда некоторым пользователям на время давать права администратора. Можно разрешить пользователю запускать только определенное ПО от админа, или же давать это право только на пару часов (например).»
                                                          Дав даже один раз запустить софт от админа, юзеру не проблема (в Windows точно) тут же нарулить себе на данной машине права локального админа навсегда. Если это удаленный рабочий стол, то юзер станет админом этого терминального сервера… Класс!
                                                            0

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


                                                            С моей точки зрения, админам необходимо четко различать: или пользователь на компе может быть хотя бы иногда админом (тогда политика безопасности выстраивается так, что данный комп уже скомпрометирован, т.е. ему не доверяют). Или же нет (тогда проще; например, можно доверять работе программ, до которых пользователю не добраться). И если пользователь хоть иногда бывает админом, тогда в чем проблема разрешить ему всегда им быть (UAC оградит от детских ошибок)?


                                                            Однако я отвечал на конкретный вопрос. Я уверен, что Programmierus в курсе, что даже временные админские права опасны.

                                                        0

                                                        Почему бы просто не использовать fakeroot?

                                                          0

                                                          А есть ли эквивалент его под Винду?

                                                            +1
                                                            Sandboxie — собраются открыть свой код. Интересно.
                                                          +1
                                                          Не давать админские права, принудительно запрещать/разрешать запуск тех или иных программ — это все мне понятно. Но мне решительно непонятно другое: ведь в МакОС подобных механизмов не существует (или я ошибаюсь?), как с ними-то в корпоративной среде справляются? Или просто забивают с учетом их малочисленности и малой распрострененности троянов и проч?
                                                            0
                                                            Тоже интересно было бы послушать как оно делается на самом деле, но пока можно предположить что поскольку макось unix-based, то и решается все аналогичными методами — дается sudo на нужные команды. Если такие кейсы с требованием повышенных привилегий вообще там случаются конечно.
                                                              0
                                                              Как меня просветили более опытные товарищи, МакОС тоже поддерживает ограничения на манер Винды: принудительная установка апдейтов, запрет/разрешение запуска тех или иных приложений и т.д. Зарулить можно так, что юзер вообще шагу в сторону ступить не сможет.

                                                              Управляется все это дело либо через Active Directory, либо через Mac OS Server (есть и такой, оказывается: www.apple.com/ru/macos/server), либо через сторонние продукты, например:


                                                                0
                                                                а есть какая-нибудь ссылка на документацию по управлению макосью чисто через AD? насколько мне известно, тут только сторонние продукты, которые дружат с AD (почти любой MDM, или монстры типа MS SCCM)…
                                                          +2

                                                          Это все хорошо, когда админ сам знает, как настроить доступы и разбирается с неисправностями. А на практике, ты должен полдня гуглить, чтобы потом обьяснить админу, какие кнопки надо нажать, чтобы, например, docker desktop на винде заработал без админских прав и за непрозрачной проксей. В итоге вместотрешения ннпосредственной задачи, ты работаешь за админа. А админ потом за тебя — не работает. И так везде. А статья хорошая. В вакууме.

                                                            0
                                                            Ну так все от руководства зависит, а также от вашего фидбэка руководству и от масштаба проблемы. Если админы слабые и меняются каждые полгода то конечно такой опыт не передастся. А если админ постоянный, то первого случая будет достаточно для его обучения.
                                                            0

                                                            Да админ-то опытный, а вот руководство далеко и безопасники советской закалки. И специфика работы моей такая, что я не могу заранее сказать, что мне нужно, я ставлю эксперименты, пробую, создаю, удаляю. За каждым чихом админа звать неудобно. Если бы суперадмин знал почему утилита х в конкретно в нашей сети в линуксе не работает с моей машины — было бы круто. А так я должен это загуглить, провести пару проверок гипотез (для которых требуются права админа) и потом сработавшую гипотезу применить, несработавшие почистить. Админ стоит над плечом чисто для ввода пароля. В итоге человекочасы*2. А безопасность налицо — пароли всевозможных проксей в открытом виде в куче линукс-конфигов. Даешь интернет, б… ть!

                                                              0
                                                              Мы тоже страдаем от проблемы, что некоторый софт требует права администратора. Пытаемся использовать разные ухищрения, но есть ряд трудностей.

                                                              1. Поиск конкретных мест где нужны права. Это хорошо если права нужны только на запуск, а если в процессе работы появляются такие моменты, то нужно заново траблшутить. И это еще хорошо если ПО прямо говорит «permission denied», а то бывает просто падает без конкретных ошибок.
                                                              2. Запуск разными средствами от имени админской УЗ это рабочий вариант, но только если идет локальная работа. Что делать при сетевом доступе, когда каждый пользователь состоит в десятках разных групп, а где-то прописан напрямую. Создавать 2 УЗ на каждого пользователя? Как то не очень…
                                                              3. Что делать с софтом, у которого права администратора прописаны в системных требованиях? А ТП сразу отклоняет все запросы если их софт работает без прав администратора. Каждую проблему тестировать с правами, а потом убирать назад?
                                                                0
                                                                Да на виртуалке её запустить типа Virtual PC. И всё.
                                                                  0
                                                                  Да на виртуалке её запустить типа Virtual PC. И всё.

                                                                  А если ей требуется взаимодействие с другим ПО, ну или это программа ставится как дополнение/расширение функционала имеющегося ПО?
                                                                  Так оно обычно и бывает, если это не основная программа, а вспомогательная утилита.
                                                                  А если основная, то ей нужен доступ к сетевым принтерам, сетевым папкам и т.п. — еще раз настраивать полноценную рабочую станцию.
                                                                  Еще есть вопрос про стоимость лицензии Windows, той, что запускается в виртуальной машине.

                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                Самое читаемое