-
Здраствуйте мастера! Проблема в том,что я начал изучать дескрипторы бузопасности и вот этим кодом заблокировал тестируемую папку Test. Что мне надо изменить,чтобы обратно ее разблокировать? Дело в том, что при повторе SetFileSecurity возвращает false, это что?, я для себя заблокировал папку по полной?- возвращает ведь она ERROR_ACCESS_DENIED, или все-таки ее можно разблокировать?Подскажите? Сильно плиз не пинайте. вот код, которым заблокировал
procedure TForm1.Button1Click(Sender: TObject);
var
acl:_ACL;
sd:SECURITY_DESCRIPTOR;
begin
InitializeAcl(acl,sizeof(acl),2);
InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);
setsecuritydescriptordacl(@sd,true,@acl,true);
windows.SetFileSecurity('Test',DACL_SECURITY_INFORMATION,@sd);
end;
-
> Что мне надо изменить,чтобы обратно ее разблокировать
Стать владельцем файла и выставить разрешения заново.
-
а как это программно сделать? или подскажите пожалуйста как заблокировать файл оставшись его владельцем?
-
точно! вы правы, немогу разблокировать файлы которые я не созвавал(были на диске) вот поэтому наверное у них ACCESS_DENIED. но вот только как разблокировать :( подскажите?
-
Админ может стать владельцем любого объекта, файла в том числе, ко бы его ни создавал. А владелец может менять все его настройки защиты.
> а как это программно сделать?
SetSecutityDescriptorOwner
-
Еще владельцем может стать обладатель привилегии SE_TAKE_OWNERSHIP, или у кого есть на объект право WRITE_OWNER. Но последний вариант не для тя, ты то пустой DACL воткнул.
-
> SetSecutityDescriptorOwner
Думаю, привилегию SE_TAKE_OWNERSHIP_NAME получить сначала придется.
-
> Еще владельцем может стать обладатель привилегии SE_TAKE_OWNERSHIP
Вот поэтому админ и может стать владельцем. У админского процесса в маркере по-умолчанию эта привилегия присутствует.
-
>Думаю, привилегию SE_TAKE_OWNERSHIP_NAME получить сначала придется > Вот поэтому админ и может стать владельцем
Спасибо, я в курсях, ага.
> У админского процесса в маркере по-умолчанию эта привилегия > присутствует.
Строго говоря наоборот. Она есть у всех процессов, запущенных от имени членов группы Администраторы потому, что по умолчанию имеется у членов этой группы.
Эта типа если придираться.
-
Вот сделал, только че требуются еще какие-то дополнительные привилегии, что-ли? получил все какие знаю.Выдает { Not all privileges referenced are assigned to the caller. } ERROR_NOT_ALL_ASSIGNED = 1300; вот код. подскажите че не так?
type PTOKEN_USER = ^TOKEN_USER; _TOKEN_USER = record User : TSidAndAttributes; end; TOKEN_USER = _TOKEN_USER;
procedure TForm1.Button1Click(Sender: TObject); var acl:_ACL; sd:SECURITY_DESCRIPTOR; HT: THandle; PR, prpr: TOKEN_PRIVILEGES; cp: dword; var lpDomain : PWideChar; Sid : PSID; cbDomain,cbSid : Cardinal; peUse : Cardinal; begin cbSid:=128; cbDomain:=64;
GetMem(Sid,cbSid); GetMem(lpDomain,cbDomain*SizeOf(WideChar));
begin ReAllocMem(Sid,cbSid); ReAllocMem(lpDomain,cbDomain*SizeOf(WideChar)); LookupAccountNameW(nil,'Cj',Sid,cbSid,lpDomain,cbDomain,peUse); end;
OpenThreadToken(GetCurrentThread, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, false, hT); OpenProcessToken(GetCurrentProcess, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, hT); Pr.PrivilegeCount := 28;
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'secreatetokenprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seassignprimarytokenprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'selockmemoryprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seincreasequotaprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seunsolicitedinputprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'semachineaccountprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'setcbprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesecurityprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'setakeownershipprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seloaddriverprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesystemprofileprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesystemtimeprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seprofilesingleprocessprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seincreasebasepriorityprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'secreatepagefileprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'secreatepermanentprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sebackupprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'serestoreprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seshutdownprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sedebugprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seauditprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesystemenvironmentprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sechangenotifyprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seremoteshutdownprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seundockprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesyncagentprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seenabledelegationprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'semanagevolumeprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
CloseHandle(hT);
InitializeAcl(acl,sizeof(acl),2);
InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION); //sd
windows.SetSecurityDescriptorOwner(@sd,sid,false);
windows.SetFileSecurity('text_programs\BSOD',OWNER_SECURITY_INFORMATION,@sd); caption:=inttostr(getlasterror);
end;
-
Вот сделал, только че требуются еще какие-то дополнительные привилегии, что-ли? получил все какие знаю.Выдает { Not all privileges referenced are assigned to the caller. } ERROR_NOT_ALL_ASSIGNED = 1300; вот код. подскажите че не так?
type PTOKEN_USER = ^TOKEN_USER; _TOKEN_USER = record User : TSidAndAttributes; end; TOKEN_USER = _TOKEN_USER;
procedure TForm1.Button1Click(Sender: TObject); var acl:_ACL; sd:SECURITY_DESCRIPTOR; HT: THandle; PR, prpr: TOKEN_PRIVILEGES; cp: dword; var lpDomain : PWideChar; Sid : PSID; cbDomain,cbSid : Cardinal; peUse : Cardinal; begin cbSid:=128; cbDomain:=64;
GetMem(Sid,cbSid); GetMem(lpDomain,cbDomain*SizeOf(WideChar));
begin ReAllocMem(Sid,cbSid); ReAllocMem(lpDomain,cbDomain*SizeOf(WideChar)); LookupAccountNameW(nil,'Cj',Sid,cbSid,lpDomain,cbDomain,peUse); end;
OpenThreadToken(GetCurrentThread, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, false, hT); OpenProcessToken(GetCurrentProcess, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, hT); Pr.PrivilegeCount := 28;
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'secreatetokenprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seassignprimarytokenprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'selockmemoryprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seincreasequotaprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seunsolicitedinputprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'semachineaccountprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'setcbprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesecurityprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'setakeownershipprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seloaddriverprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesystemprofileprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesystemtimeprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seprofilesingleprocessprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seincreasebasepriorityprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'secreatepagefileprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'secreatepermanentprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sebackupprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'serestoreprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seshutdownprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sedebugprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seauditprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesystemenvironmentprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sechangenotifyprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seremoteshutdownprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seundockprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'sesyncagentprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'seenabledelegationprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(nil, 'semanagevolumeprivilege', Pr.Privileges[0].Luid); AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);
CloseHandle(hT);
InitializeAcl(acl,sizeof(acl),2);
InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION); //sd
windows.SetSecurityDescriptorOwner(@sd,sid,false);
windows.SetFileSecurity('text_programs\BSOD',OWNER_SECURITY_INFORMATION,@sd); caption:=inttostr(getlasterror);
end;
-
чета Опера тормозит sorry
-
> только че требуются еще
Еще требуется книжки всякие читать, MSDN, статьи разные. И ваще научиться с WinApi работать, прежде чем за такие вещи браться.
> получил все какие знаю
Откуда такая уверенность? Я дык в упор не вижу, чтобы ты "получил" хоть одну привилегию. И даже, что гарантированно включил уже имеющуюся, не вижу.
-
> Откуда такая уверенность? Я дык в упор не вижу, чтобы ты > "получил" хоть одну привилегию. И даже, что гарантированно > включил уже имеющуюся, не вижу.
в ProcessViewer-е проверял
-
> в ProcessViewer-е проверял
Да проверяй чем хош. Нет у тя кода получения привилегий, понятно? Просто нет. У тя тут попытки включить для текущего маркера кучу привилегий. Разбирайся в чем разница.
И что самое смешное, тя совершенно не интересует успешность этих попыток. Спрашивается, нафига тогда включать? ProcessViewer-ом он проверял. А юзеру тож предложишь ProcessViewer юзать?
У тя ваще ни одной проверки вызовов нет, а за такое нать прилюдно розгами сечь в назидание. Вот ты вызвал SetSecurityDescriptorOwner, а откель ты знаешь 1) что ты туда нормальный SID передал 2) Что Owner сменился А нифига ты этого не знаешь.
Ну ладно, нагородил ты этот код, пусть он даже успешно отработал. А хочешь-то чего? Как вставлял пустой список контроля доступа, так и продолжаешь вставлять. А пустой список - запрет для всех. Чего нать то? доступ получить? Ну так и давай себе разрешения.
> я начал изучать дескрипторы бузопасности
Нифига ты еще не начал изучать. та начал тыкаться наугад, авось чего получится. а эт не та область, где можно обойтись методом тыка.
-
> А хочешь-то чего? Как вставлял пустой список контроля доступа, > так и продолжаешь вставлять. А пустой список - запрет для > всех. Чего нать то? доступ получить? Ну так и давай себе > разрешения.
Мы же вроде уже разобрались, что можно никому не давать доступ, но будучи Owner-ом DACL все равно можно подменить. А Owner-ом может стать любой, имеющий привилегию SE_TAKE_OWNERSHIP_NAME.
> Cj © (19.02.08 10:18) [11]
Ты что-то слишком много телодвижений делаешь ненужных. Ты владелец объекта? Если да, то установить новый DACL ты сможешь в любом случае, ничего для этого не нужно. Если нет - то сначала владельцем ужно стать. Для этого нужно включить привелегию SE_TAKE_OWNERSHIP_NAME (если ты обычный юзер - ты не сможешь этого сделать, если конечно явно не изменить набор привилегий учеток по-умолчанию. У не-админских процессов этой привилегии в маркере попросту нет и включать там нечего). После включения привилегии - установить Owner-ом себя. Советую почитать хотя бы Соломона и Руссиновича, у них написано что как и почему.
-
> Мы же вроде уже разобрались, что можно никому не давать > доступ, но будучи Owner-ом DACL все равно можно подменить
Я не знаю, кто там с чем разбирался/разобрался, мне тут разбираться не с чем. Но стать владельцем - не самоцель. Для того и делают себя владельцем, шоб иметь возможность назначить необходимые разрешения себе, любимому. И хрена толку, что он владелец, если список доступа назначает опять пустой?
Владелец имеет возможность управлять настройками безопасности - все, список исчерпывающий. А чтоб иметь возможность что-то полезное делать с объектом, нужны конкретные права. А сам факт владения тут не приделах.
Эт я и сказал в предыдущем посте. Че не понятно-то?
-
2 Ins
> можно никому не давать доступ, но будучи Owner-ом DACL все > равно можно подменить
Хе, сразу не заметил:) А в чем разница-та? Между "права давать" и "DACL"подменить". DACL-то, эт че? Не права чтол-ли, кому чего можно?
-
> Хе, сразу не заметил:) А в чем разница-та? Между "права > давать" и "DACL"подменить". DACL-то, эт че? Не права чтол- > ли, кому чего можно?
Что-то я не совсем понял, что Вы хотитие этим сказать... Автор спрашивает, можно ли как-нибудь получить доступ к папке, для которой закрыт абсолютно любой вид доступа и абсолютно для всех. Ответ - можно. Так как владелец имеет право изменять DACL, даже если в самом DACL это явно запретить. Согласны?
Если да, то задача сводится к тому, чтобы стать владельцем объекта (если владелец изначально некто другой).
-
> Что-то я не совсем понял, что Вы хотитие этим сказать
Я хочу сказать, что фраза "можно никому не давать доступ, но будучи Owner-ом DACL все равно можно подменить" в свете обсуждаемого вопроса звучит абсурдно - замена DACL и есть "дача" прав или запретов.
Вопрос озвучен так:
> вот этим кодом заблокировал тестируемую папку Test. Что > мне надо изменить,чтобы обратно ее разблокировать?
Из кода видно, что автор заблокировал доступ, назначив пустой DACL. Соответственно, чтобы снять эту блокировку, ему надо назначить непустой DACL, с правами для себя. А вклинившийся в обсуждение Qwner - всего лишь средство решения данной задачи. И в контексте этого, а также последующего обсуждения, замечание
> Мы же вроде уже разобрались, что можно никому не давать > доступ, но будучи Owner-ом DACL все равно можно подменить. > А Owner-ом может стать любой, имеющий привилегию SE_TAKE_OWNERSHIP_NAME. >
звучит как минимум странно.
Причем ответ-то правильный емы был дан сразу же, в первом посте. А во втором посте он (автор) уточнил направление
> а как это программно сделать?
-
> А вклинившийся в обсуждение Qwner - всего лишь средство > решения данной задачи.... > Причем ответ-то правильный емы был дан сразу же, в первом > посте.
Снова либо я не понимаю суть вашей претензии, либо вы сами себе противоречите, так как Owner "вклинился" в первом же посте, который вы (и я) считаете правилным ответом.
> звучит как минимум странно.
ОК. Если это неочевидно, то уточню, фразу следует читать так:
Мы же вроде уже разобрались, что можно никому не давать доступ изначально, но будучи Owner-ом...
Хотя на этот вопрос можно ответить и в духе "надо было изначально не запрещать, не пришлось бы выеживаться".
|