В моей системе Windows 10 Алиса - разработчик / администратор, а Боб - обычный пользователь. Алиса написала набор программ для использования Бобом (.bat
файлы и / или ярлыки, которые запускают .py
файлы в python.exe
). Когда Боб дважды щелкает эти программы, они должны запускаться с использованием разрешений файловой системы Алисы (или какого-либо другого повышенного пользователя), при этом Бобу не нужно знать пароль этого другого пользователя или действительно делать что-то особенное, кроме первоначального двойного щелчка для запуска. Но в то же время Бобу не следует разрешать запускать что - либо еще с измененными разрешениями.
Вот минимальный пример программы, которую я хочу запустить, назовем ее WhiteHat.bat
:
:: This is WhiteHat.bat
@echo User %1 is running this program as %USERNAME%
@pause
Все мои исследования пока указывают на runas
. Например, Алиса подготавливает следующий файл в той же папке, что и WhiteHat.bat
:
::This is RunWhiteHatAsAlice.bat
@runas /noprofile /user:%COMPUTERNAME%\Alice /savecred "%~dp0WhiteHat.bat \"%USERNAME%\""
В первый раз, когда Боб дважды щелкает RunWhiteHatAsAlice.bat
, Алиса вводит свой пароль. Впоследствии Боб может дважды щелкнуть по нему без присутствия Алисы, и он увидит:
User Bob is running this program as Alice
Все идет нормально. Но проблема в том, что теперь у Боба, похоже, есть разрешение на все, что угодно Алисе Если он пишет следующие два файла в своем собственном домашнем каталоге:
:: This is BlackHat.bat
@echo User %1 is DELETING ALL FILES as %USERNAME%
@pause
а также
:: This is RunBlackHatAsAlice.bat
@runas /noprofile /user:%COMPUTERNAME%\Alice /savecred "%~dp0BlackHat.bat \"%USERNAME%\""
затем он, кажется, может использовать сохраненные учетные данные (которые Алиса предназначала для использования только для запуска WhiteHat.bat
) для запуска любого произвольного кода в BlackHat.bat
.
Я думаю, поэтому, что runas
не способ делать то, что я хочу? Если только я не пропустил ту часть документации, в которой объясняется, как ограничить область действия пользователя с сохраненными учетными данными.
Каков соответствующий способ сделать это? Системы POSIXoid будут просто использовать setuid
- есть ли эквивалент?
Пояснение: настоящее приложение "белая шляпа", конечно, может вызвать изменения в файлах файловой системы (скажем, оно записывает в TheData.txt
). Я не хочу просто давать Бобу разрешение на TheData.txt
. Я хочу, чтобы он мог изменить это, конечно, но только в соответствии с определенной логикой, которая запрограммирована в пакетных /python-файлах. Я не хочу, чтобы он мог открыть это в блокноте и запутать это произвольно.