Конференция "WinAPI" » Понижение прав [D7]
 
  • QAZ (23.12.14 18:36) [0]
    Есть программа запущенная с правами админа (UAC), как из нее запустить другую программу от этого же юзера но без прав админа?

    и еще вдогонку, как записать из под того же (UAC) приложения файл, у которого будет доступ на запись обычному пользователю?
  • p © (23.12.14 20:12) [1]
    Единственное что приходит на ум взять токен своего процесса OpenProcessToken, установить ему IntegrityLevel в MEDIUM_INTEGRITY_SID - SetTokenInformation, а дальше запускать процесс - CreateProcessWithToken, и у процесса по идее будут ограниченные права
  • p © (23.12.14 20:42) [2]
    Да точняк так и есть, вот тебе исходник под XE2 чуть переделанный www.smalldonkey.net/delphi/vcl/run-as-system.zip

    Если с включенным UAC из своего процесса запускаю notepad.exe c IntegrityLevel ниже HIGH_INTEGRITY_SID, то в папку C:\ файлы писать уже не может, выше или HIGH_INTEGRITY_SID то могу
  • Rouse_ © (24.12.14 18:37) [3]
    В оригинале это делается немного по другому.
    Изначальная программа запускается без повышения привилегий и стартует копию себя с поднятием оных (так работают все инсталяторы). При необходимости запуска чего-то под учеткой пользователя, процесс с расширенными правами просто отправляет сигнал своему родителю, откуда выполняется банальный ShellExecute.
    С запуском из под админа посредством понижения привилегий может возникнуть целая череда проблем (некорректный доступ к реестру/системным папкам/виртуализация)
  • QAZ (24.12.14 20:11) [4]

    > так работают все инсталяторы

    слишком жирный вывод
    у 9 из 10 изначально админский манифест, либо "автощиток" по названию от винды

    > С запуском из под админа посредством понижения привилегий
    > может возникнуть целая череда проблем (некорректный доступ
    > к реестру/системным папкам/виртуализация)

    я хочу страдать, дай мне этот шанс
  • Rouse_ © (24.12.14 20:24) [5]

    > слишком жирный вывод
    > у 9 из 10 изначально админский манифест, либо "автощиток"
    > по названию от винды

    Да ну брось - кто эти 9 из 10 инсталяторов? :)
  • QAZ (24.12.14 20:59) [6]

    > Да ну брось - кто эти 9 из 10 инсталяторов? :)

    ну я залез в свой склад пиратского софта и посмотрел, без щитков в основном SFX архивы, аля "доунлоад эдишн", в которых уже "админизированые" инсталяторы
  • Rouse_ © (24.12.14 21:06) [7]

    > QAZ   (24.12.14 20:59) [6]

    Пфф, давай так (раз уж мы с инсталяторов начали).
    Скачай исходники InnoSetup и проследи по ним что и как фунциклирует...
    Да впрочем даже будет достаточно утилиты от Руссиновича - просто стартани инсталятор (любой) и посмотри по манагеру процессов, что от чего пляшет и кто является родительским процессом (оть тут смотри на привилегии процесса) :)
  • DVM © (25.12.14 11:07) [8]

    > Rouse_ ©   (24.12.14 21:06) [7]

    у InnoSetup изначально вшит манифест (сейчас только посмотрел)

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
       <security>
           <requestedPrivileges>
               <requestedExecutionLevel level="asInvoker"            uiAccess="false"/>
           </requestedPrivileges>
       </security>
    </trustInfo>

    не перезапускает он себя, запрос на повышение сразу при старте появляется.
  • QAZ (25.12.14 15:45) [9]

    > Rouse_ ©   (24.12.14 21:06) [7]

    когда я пишу "склад пиратского софта", я имею ввиду не поделки аля "смени иконку папке", а серьезный коммерческий софт, который сам знаешь где видал InnoSetup
    и все что описано в [4][6] я не придумал
    а всякие порождения процессов во всяких Русиновичах, это всего лишь копирование\извлечение во временую папку и запуск себя оттуда, на случай многодискового дистрибутива аля "вставте диск №2" или сетевой
  • Rouse_ © (25.12.14 17:33) [10]

    > не перезапускает он себя, запрос на повышение сразу при
    > старте появляется.

    Да щаз :)
    Во первых asInvoker не вызывает появления окна с поднятием (это как раз сделано для того чтобы небыло его автоматического полнятия из-за имени процесса SETUP)
    А во вторых открой процмон от руссиновича и посмотри как он себя не перезапускает (я думю два процесса один с админскими правами, висящий чайлдом у первого, запущенного от пользователя прояснит картину) :)


    > и все что описано в [4][6] я не придумал

    Подозреваю, но правильное решение я написал еще в [3] :)
  • QAZ (25.12.14 18:22) [11]
    Удалено модератором
  • Rouse_ © (25.12.14 18:33) [12]
    Удалено модератором
  • Rouse_ © (25.12.14 19:13) [13]

    > DVM ©   (25.12.14 11:07) [8]

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

    NeedToRespawnSelfElevated + RespawnSelfElevated

    Данный комментрарий, думаю не требует перевода:

    { Spawns a new process using the "runas" verb.
     Notes:
     1. Despite the function's name, the spawned process may not actually be
        elevated / running as administrator on Vista. If UAC is disabled, \"runas\"
        behaves like \"open\". Also, if a non-admin user is a member of a special
        system group like Backup Operators, they can select their own user account
        at a UAC dialog. Therefore, it is critical that the caller include some
        kind of protection against respawning more than once.
     2. If AExeFilename is on a network drive, Vista'
    s ShellExecuteEx function is
        smart enough to substitute it with a UNC path. XP does not do this, which
        causes the function to fail with ERROR_PATH_NOT_FOUND because the new
        user doesn't retain the original user's drive mappings. }

  • QAZ (25.12.14 19:23) [14]
    Удалено модератором
  • p © (25.12.14 19:29) [15]
    Смысл то чем? зачем нужен этот процесс с ограниченными правами?
  • Rouse_ © (25.12.14 19:35) [16]

    > QAZ   (25.12.14 19:23) [14]
    > блин, скинь уже код запуска от админа, раз сам такое придумал,
    >  че ребусы гадать :)

    http://www.jrsoftware.org/isinfo.php
    качай, изучай :)
  • QAZ (25.12.14 19:52) [17]

    > Смысл то чем? зачем нужен этот процесс с ограниченными правами?

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

    > качай, изучай :)

    ооокей, поставлю в своем списке печальный смайлик, напротив твоего ника :(
  • DVM © (25.12.14 22:17) [18]

    > Rouse_ ©   (25.12.14 17:33) [10]


    > Во первых asInvoker не вызывает появления окна с поднятием

    а ну да, я стормозил, почему то решил что там requireAdministrator
 
Конференция "WinAPI" » Понижение прав [D7]
Есть новые Нет новых   [118230   +21][b:0][p:0.002]