Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сохранение и восстановление Ntfs прав на файлах

8.8K
22 ноября 2005 года
dusty_rat
30 / / 29.08.2005
Может кто нить уже делал, если да то поделитесь опытом... ПЛЗ...
Есть сервак Windows 2003 Web Edition, есть папки с web-контентом... Задача следующая:
1. Нужно сохранить в какой-нить файл все NTFS права файлов и папок от указанной и ниже;
2. По шедулу проверять соответствуют ли они сохраненным в файле, если нет, то восстанавливать из файла.
Помогите... а то надоедает их ручками рихтовать... :)
З.Ы. А ежели есть у кого готовый vbs скриптик, то подайте пожалуйста. Очень нужно.
9.4K
25 ноября 2005 года
doctoraugust
5 / / 21.12.2004
один из вариантов решения:

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 скриптик, то подайте пожалуйста. Очень нужно.

8.8K
30 ноября 2005 года
dusty_rat
30 / / 29.08.2005
Спасибо. Буду тогда ваять эту утилитку. А хотелось vbs скриптик найти...:) Еще раз спасибо.
9.4K
01 декабря 2005 года
doctoraugust
5 / / 21.12.2004
Если чисто на VB то возможно сможеш это сделать через WMI, если попопаться в его классах, то
сможеш получить ту же самую информацию.
8.8K
03 декабря 2005 года
dusty_rat
30 / / 29.08.2005
Цитата:
Originally posted by doctoraugust
Если чисто на VB то возможно сможеш это сделать через WMI, если попопаться в его классах, то
сможеш получить ту же самую информацию.


Уже копаюсь... :) Просто это одноразовая задача и не хотелось придумывать велосипед. Блин, плохо, что нет стандартных средств... :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог