Сохранение и восстановление Ntfs прав на файлах
Есть сервак Windows 2003 Web Edition, есть папки с web-контентом... Задача следующая:
1. Нужно сохранить в какой-нить файл все NTFS права файлов и папок от указанной и ниже;
2. По шедулу проверять соответствуют ли они сохраненным в файле, если нет, то восстанавливать из файла.
Помогите... а то надоедает их ручками рихтовать... :)
З.Ы. А ежели есть у кого готовый vbs скриптик, то подайте пожалуйста. Очень нужно.
1. сохранить структуру папок и фаилов в виде
шаблонов Windows
смотри (%SystemRoot%\security\templates\setup security.inf)
например. Фаил в юникоде но его создание проблем не доставляет. Раздел фаила [File Security]
с форматом можно разобраться :))
права хранятся в виде SDDL (Security Descriptor Defenition Language), полезная штука, узнать его можно через Windows API
вот кусочек кода на дельфи:
function Get_File_Dir_SSD(const PName: WideString): WideString;
var
pSecurityDescriptor: PSECURITY_DESCRIPTOR;
dwRes: Cardinal;
pStringSecurityDescriptor: PAnsiChar;
SSDLen :ULONG;
label Cleanup;
begin
Result:= '';
{ test file or dir }
if not FileExists(PName) then if not DirectoryExists(PName) then
begin
FLastErrorCode:= ERROR_PATH_NOT_FOUND;
goto Cleanup;
end;
{ get SD }
dwRes:= GetNamedSecurityInfo(
PAnsiChar(WideCharToString(PWideChar(PName))),
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION or
OWNER_SECURITY_INFORMATION,
nil, nil, nil, nil, {ppsidOwner, ppsidGroup: PPSID; ppDacl, ppSacl: PACL;}
pSecurityDescriptor);
if dwRes <> ERROR_SUCCESS then
begin
FLastErrorCode:= GetLastError();
goto Cleanup;
end;
{ convert }
if not ConvertSecurityDescriptorToStringSecurityDescriptor(
pSecurityDescriptor,
SDDL_REVISION,
OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION,
pStringSecurityDescriptor,
SSDLen) then
begin
FLastErrorCode:= GetLastError();
goto Cleanup;
end;
{ set ret value SSD }
if SSDLen > 0 then
begin
Result:= pStringSecurityDescriptor;
FLastErrorCode:= GetLastError();
end;
Cleanup:
if pSecurityDescriptor <> nil then LocalFree(HLOCAL(pSecurityDescriptor));
if pStringSecurityDescriptor <> nil then LocalFree(HLOCAL(pStringSecurityDescriptor));
end;
если сохранить все в шаблоне финдовс то потом можно просто его же утилитой и восстанавливать все права (вот полная командная строка):
1.
%SystemRoot%\system32\secedit.exe /configure /db "полный путь к фаилу с базой, просто укажи и все, сожержание этого фаила пусть тебя не волнует" /cfg "полный путь к твоему шаблону" /log "типа путь к лог фаилу" /quiet
2. (обновление базы)
%SystemRoot%\system32\gpupdate.exe
или задавать права через API на подобии того как читал.
под 2003 все работает как часы.
Цитата:
Originally posted by dusty_rat
Может кто нить уже делал, если да то поделитесь опытом... ПЛЗ...
Есть сервак Windows 2003 Web Edition, есть папки с web-контентом... Задача следующая:
1. Нужно сохранить в какой-нить файл все NTFS права файлов и папок от указанной и ниже;
2. По шедулу проверять соответствуют ли они сохраненным в файле, если нет, то восстанавливать из файла.
Помогите... а то надоедает их ручками рихтовать... :)
З.Ы. А ежели есть у кого готовый vbs скриптик, то подайте пожалуйста. Очень нужно.
Может кто нить уже делал, если да то поделитесь опытом... ПЛЗ...
Есть сервак Windows 2003 Web Edition, есть папки с web-контентом... Задача следующая:
1. Нужно сохранить в какой-нить файл все NTFS права файлов и папок от указанной и ниже;
2. По шедулу проверять соответствуют ли они сохраненным в файле, если нет, то восстанавливать из файла.
Помогите... а то надоедает их ручками рихтовать... :)
З.Ы. А ежели есть у кого готовый vbs скриптик, то подайте пожалуйста. Очень нужно.
Спасибо. Буду тогда ваять эту утилитку. А хотелось vbs скриптик найти...:) Еще раз спасибо.
сможеш получить ту же самую информацию.
Цитата:
Originally posted by doctoraugust
Если чисто на VB то возможно сможеш это сделать через WMI, если попопаться в его классах, то
сможеш получить ту же самую информацию.
Если чисто на VB то возможно сможеш это сделать через WMI, если попопаться в его классах, то
сможеш получить ту же самую информацию.
Уже копаюсь... :) Просто это одноразовая задача и не хотелось придумывать велосипед. Блин, плохо, что нет стандартных средств... :(