Как разрешить администраторам редактировать конфигурационные файлы моего приложения без повышения прав доступа?

StackOverflow https://stackoverflow.com/questions/2444265

Вопрос

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

К сожалению, в Windows Server 2008 даже локальные администраторы больше не имеют прав администратора (из-за UAC), если только они не запускают приложение с повышенными правами доступа.Это вызвало жалобы пользователей, которые не могут использовать свой любимый текстовый редактор для открытия и сохранения изменений в файлах конфигурации - они могут открывать файлы (поскольку любой может читать), но не могут сохранять.

У кого-нибудь есть рекомендации относительно того, что мы можем сделать (если вообще что-либо) в настройках нашего приложения, чтобы упростить редактирование для администраторов на Windows Server 2008?

Сопутствующие вопросы:если администратор Windows Server 2008 хочет отредактировать конфигурационный файл только для администраторов, как он обычно это делает?Вынужден ли он использовать текстовый редактор, который достаточно умен, чтобы автоматически повышать уровень прав при необходимости, как это делает проводник Windows в ответ на ошибки отказа в доступе?Запускает ли он редактор из окна командной строки с повышенными правами доступа?Что-то еще?

Это было полезно?

Решение

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

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

Одним из обходных путей, который, к сожалению, требует нетривиального объема работы, может быть:

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

Единственное, что должно сделать небольшое приложение, это найти зарегистрированный обработчик для файла .txt в реестре, а затем использовать его для открытия файла - с повышенными привилегиями.

Другие советы

Это несложно для достойных админов.Откройте текстовый редактор с повышенными правами, откройте файл, сохраните, готово.Большинство людей, редактирующих конфигурационные файлы, уже привыкли к этому ритуалу.Пользователи Unix делают это рефлекторно (с помощью sudo);это сложно только в Windows, потому что для некоторых пользователей это все еще немного незнакомая территория.

Реально, у них была бы та же проблема, если бы это был параметр реестра HKLM, за исключением того, что им пришлось бы повысить уровень regedit или Powershell или чего-то еще, что они обычно используют для редактирования параметров реестра.

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

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

Если бы это была не служба, вы могли бы использовать %USERPROFILE% для хранения параметров конфигурации, но обычно службы запускаются под учетными данными, отличными от обычной учетной записи системного администратора.

Приложения Dotnet могут сохранять информацию в папке, возвращаемой средой.GetFolderPath(Среда.SpecialFolder.CommonApplicationData);пользователям могут потребоваться права доступа для записи в эту папку за пределами вашего сервиса, но если им не нравится ваш пользовательский интерфейс администратора, а им нравится их текстовый редактор, это то же самое, что и первоначальная проблема:им просто нужно научиться использовать UAC.

Что касается второго вопроса:для быстрого решения я добавляю блокнот на панель быстрого доступа Windows, щелкаю правой кнопкой мыши, запускаюсь от имени администратора, открываю файл, вношу изменения и сохраняю его.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top