Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 8 и 8.1 (http://forum.oszone.net/forumdisplay.php?f=116)
-   -   [решено] Запуск приложения с обычными/пониженными правами (http://forum.oszone.net/showthread.php?t=275729)

parkone 14-01-2014 01:52 2288677

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

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

Что пробовал:

1) Стандартная утилита RUNAS, которая запускает программы с разрешениями, отличными от тех, которые предоставляет текущая учетная запись
Код:

RUNAS /trustlevel:<TrustLevel> program
/showtrustlevels  displays the trust levels that can be used as arguments to /trustlevel.
/trustlevel      <Level> should be one of levels enumerated in /showtrustlevels.

Говорят что работает, но моя попытка понизить права не удалась.
Elevation PowerToys, который как я понял основан на RUNAS тоже не выглядит работоспособным даже Elevation PowerToys последней версии.

2) Для повышения прав встречаются такие решения, может есть что-то подобное для понижения прав?
Код:

C:\Windows\System32\cmd.exe /C set __COMPAT_LAYER=RunAsInvoker & start “” “C:\Program Files (x86)\raidcall\raidcall.exe”
Но судя по доступным флагам такой возможности не предусмотрено.

3) Утилита PsExec с ключом -l [и ключом -d, чтобы не появлялись черные окна, которые ожидают закрытия запускаемой программы]
Единственный вариант который работает, программа запускается с пониженными правами (хотелось бы конечно с нормальными) даже при том что родительский процесс имеет права администратора.
Но что-то с передачей параметров запускаемому приложению проблемно. Например, запуская такой код появляется только окно MS Access, а база не загружается с указанными параметрами
Код:

PsExec.exe -l -d  "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "C:\база данных.accdb"
Если ли еще варианты? Или как решить вопрос с передачей параметров в последнем варианте? Пробовал запустить батник, содержащий нужные инструкции - не помогло.
Upd: Похоже права понижаются слишком сильно, например, нет возможности создания пустой базы данных. Возможно ли повысить заниженные права до нормальных (чтобы Process Explorer показывал "средний обязательный уровень" вместо "низкий обязательный уровень")?

Тэги: Force Run As Limited User, Force a program to run without administrator privileges, Runs a program as non-elevated user, Запуск приложения без повышенных прав (с правами обычного пользователя), Понижение прав приложений

Vadikan 14-01-2014 10:07 2288746

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

parkone 14-01-2014 12:47 2288841

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

Iska 14-01-2014 13:29 2288868

Цитата:

Цитата parkone
но винда дает нормальные средства только для повышения прав, понижение через одно место кое-как только работает. »

Это Ваша цель достаточно специфична. Ничто не мешает Вам в этом случае написать свой «RunAsNormalUser.exe».

parkone 14-01-2014 14:05 2288892

Iska, разве что Марк Руссинович залогинится и даст несколько советов как это сделать )

На текущий момент вижу только вариант иметь какую-то предварительно запущенную с нормальными правами оболочку, которая сможет принимать команды на запуск дочерних процессов от управляющей программы (имеющей права администратора). Может кто подскажет чем можно воспользоваться для этих целей?

Vadikan 14-01-2014 17:09 2289021

parkone, тогда запускайте программу с обычными правами, а уже для запущенных из нее программ форсируйте повышение (ваш способ 2)

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

parkone 14-01-2014 17:41 2289046

Vadikan, совсем не мифическая ) программа - AutoHotkey, в моем случае ее скрипты должны иметь доступ ко всем приложениями, а т.к. некоторые приложения запущены от имени администратора, то понятно что и AutoHotkey должен иметь эти же привелегии. Кроме прочего, скрипты ahk запускают дочерние процессы, которые наследуют права администратора, последнее как раз мешает. Часть проблемы решается обходным путем, эмулированием нажатий Win+1,2,3 и т.п. Но прикреплять все программы в панель задач - нонсенс.
Решение с повышением понятно не подходит, т.к. ahk запущена перманентно.
Придется поковыряться еще с RUNAS и если не получится, то попробовать запустить nircmd как службу и попробовать сделать запуск через него, хотя службы похоже имеют еще большие права, но нужно попробовать )

Iska 14-01-2014 18:28 2289079

parkone, здесь: Run as standard (limited) user - Scripts - AutoHotkey Community смотрели, пробовали?

parkone 14-01-2014 18:32 2289083

Iska, попробую, спасибо!

То что по ссылке не заработало, но решение отсюда работает (на основе Task Scheduler Scripting Objects) позволяя запускать с параметрами и средним обязательным уровнем. Собственно то что я хотел попытаться сделать, но до использования Task Scheduler в качестве оболочки вряд ли бы додумался, не говоря о реализации ))
читать дальше »

Код:

RunAsUser(Target, Arguments, WorkingDirectory)
{
static TASK_TRIGGER_REGISTRATION := 7 ; trigger on registration.
static TASK_ACTION_EXEC := 0 ; specifies an executable action.
static TASK_CREATE := 2
static TASK_RUNLEVEL_LUA := 0
static TASK_LOGON_INTERACTIVE_TOKEN := 3
objService := ComObjCreate("Schedule.Service")
objService.Connect()

objFolder := objService.GetFolder("\")
objTaskDefinition := objService.NewTask(0)

principal := objTaskDefinition.Principal
principal.LogonType := TASK_LOGON_INTERACTIVE_TOKEN ; Set the logon type to TASK_LOGON_PASSWORD
principal.RunLevel := TASK_RUNLEVEL_LUA ; Tasks will be run with the least privileges.

colTasks := objTaskDefinition.Triggers
objTrigger := colTasks.Create(TASK_TRIGGER_REGISTRATION)
endTime += 1, Minutes ;end time = 1 minutes from now
FormatTime,endTime,%endTime%,yyyy-MM-ddTHH`:mm`:ss
objTrigger.EndBoundary := endTime
colActions := objTaskDefinition.Actions
objAction := colActions.Create(TASK_ACTION_EXEC)
objAction.ID := "7plus run"
objAction.Path := Target
objAction.Arguments := Arguments
objAction.WorkingDirectory := WorkingDirectory ? WorkingDirectory : A_WorkingDir
objInfo := objTaskDefinition.RegistrationInfo
objInfo.Author := "7plus"
objInfo.Description := "Runs a program as non-elevated user"
objSettings := objTaskDefinition.Settings
objSettings.Priority := 6 ; здесь работает
objSettings.Enabled := True
objSettings.Hidden := False
objSettings.DeleteExpiredTaskAfter := "PT0S"
objSettings.StartWhenAvailable := True
objSettings.ExecutionTimeLimit := "PT0S"
objSettings.DisallowStartIfOnBatteries := False
objSettings.StopIfGoingOnBatteries := False
; objSettings.Priority := 6 ; здесь выдает ошибку
objFolder.RegisterTaskDefinition("", objTaskDefinition, TASK_CREATE , "", "", TASK_LOGON_INTERACTIVE_TOKEN )
}



Не разобрался только как добавить приоритет создаваемой задачи, вот так не работает
Код:

objSettings.Priority := 6
В свойстве TaskDefinition.Settings по документации присутствует свойство Priority

Upd. Разобрался, просто перенес свойство Priority повыше, начало нормально работать ) Мозг перегрелся, но вопрос решен. Спасибо Iska и Vadikan за помощь!

P.S. запуск с пониженными правами через командную строку и schtasks.exe


Время: 21:49.

Время: 21:49.
© OSzone.net 2001-