Улучшение безопасности: программная настройка прав доступа пользователей IIS_IUSRS в Delphi 10.2 Tokyo
Разработчики, использующие среду Delphi 10.2 Tokyo для создания приложений на языке Object Pascal, часто сталкиваются с необходимостью настройки прав доступа к файлам и каталогам. Одной из распространенных задач является предоставление прав на запись для пользователя IIS_IUSRS, что необходимо для корректной работы веб-приложений, размещенных на сервере, использующем IIS (Internet Information Services).
Описание проблемы
Задача состоит в том, чтобы программно добавить права на запись для пользователя IIS_IUSRS в определенную директорию. Встроенных функций в Delphi для решения этой задачи нет, поэтому разработчикам приходится использовать Win32 API.
Подтвержденный ответ
Для выполнения поставленной задачи можно использовать функцию SetNamedSecurityInfo(), которая позволяет обновить дескриптор безопасности директории, добавив в него желаемые разрешения для пользователя.
Пример кода на Object Pascal для использования SetNamedSecurityInfo():
uses
SysUtils,
Secur32;
procedure SetDirectoryPermissions(const DirectoryPath: string; const User: string; const AccessMask: DWORD);
var
SD: PSecuritityDescriptor;
DACL: PACE;
Access: PACCESS_ALLOWED_ACE;
SID: PSID;
ACECount: Integer;
ErrorCode: DWORD;
begin
// Получение SID пользователя
if not OpenProcessToken(Handle(CurrentThread), TOKEN_READ, SID) then
Exit;
// Проверка и создание дескриптора безопасности
if not InitializeSecurityDescriptor(SD, SECURITY_DESCRIPTOR_REVISION) then
Exit;
// Создание списка доступа
if not AllocateAndInitializeSid(S-1-1-0, SD) then
Exit;
// Подготовка дескриптора доступа к доступу
ACECount := SizeOf(TACE) + SizeOf(DWORD) * (Length(AccessMask) div SizeOf(DWORD));
SetLength(Access, ACECount);
FillChar(Access[0], SizeOf(TACE) + SizeOf(DWORD) * (Length(AccessMask) div SizeOf(DWORD)), #0);
Access[].Header := ACE_HEADER(AccessMask, AceTypeAllow);
Access[].Mask := AccessMask;
Access[].SidStart := SizeOf(TACEHeader);
// Открытие списка дескрипторов управления
if not InitializeAcl(DACL, SizeOf(TACL) + ACECount, ACL_REVISION) then
Exit;
// Добавление ACES в список ACL
if not AddAce(DACL, FALSE, Access, Length(Access), @ACECount) then
Exit;
// Установка списка дескрипторов управления в дескриптор безопасности
if not SetSecurityDescriptorDacl(SD, TRUE, DACL, FALSE) then
Exit;
// Установка дескриптора безопасности для указанного объекта
ErrorCode := SetNamedSecurityInfo(PChar(DirectoryPath), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, SD, nil);
end;
Альтернативный ответ
В качестве альтернативного подхода можно использовать утилиту командной строки icacls, которая позволяет управлять правами доступа к файлам и каталогам. Пример использования icacls:
Эта команда предоставляет полный доступ к указанной директории и всем вложенным объектам для пользователя IIS_IUSRS. Вы можете проверить результаты выполнения команды через вкладку "Безопасность" в свойствах папки в Проводнике Windows.
Для выполнения этой команды из Delphi, вы можете использовать компоненты, такие как TProcess из пакета Indy, для запуска внешних процессов.
Заключение
В статье было рассмотрено две методики для предоставления прав доступа пользователю IIS_IUSRS в Delphi 10.2 Tokyo: использование функции SetNamedSecurityInfo() из Win32 API и использование утилиты командной строки icacls. Выбор метода зависит от конкретных требований проекта и удобства интеграции с вашим кодом.
Разработчики в среде Delphi 10.2 Tokyo настраивают права доступа пользователя `IIS_IUSRS` для корректной работы веб-приложений на сервере с IIS, используя программные средства или утилиты командной строки.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.