Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
кто оунер? 08.11.05 20:07 Число просмотров: 2919
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
|
|
<programming>
|
[Win32] SetFileSecurity ???? :-(((( Help 08.11.05 18:24
Автор: Tamas Статус: Member Отредактировано 08.11.05 19:09 Количество правок: 2
|
народ у меня такая проблема...
мне нужно из под SYSTEM
в цикле выполнять SetFileSecurity для определённого фаила...
ну тобиш выставлят разрешения для фаила NT AUTHORITY\SYSTEM:F
всё бы хорошо но когда другой процесс меняет разрешение допустим на BUILTIN\Администраторы:F
SetFileSecurity начинает кричать типа доступ запрёщён ??????
если запустить всё это от имини Администратор
то всё работает как надо другой процесс меняет разрешение
а SetFileSecurity меняет его обратно... на NT AUTHORITY\SYSTEM:F
не смотря на то что в списке доступа нет BUILTIN\Администраторы:F
а только один NT AUTHORITY\SYSTEM:F
до пустим такой пример
от имени SYSTEM
c:\>cacls aaa.exe
c:\>cacls aaa.exe BUILTIN\Администраторы:F
NT AUTHORITY\SYSTEM:F
BUILTIN\Пользователи:R
c:\>cacls aaa.exe /g Администратор:F
разрешение поменялось....
теперь допустим
c:\>cacls aaa.exe /g SYSTEM:F
а вот теперь хрен на рыло доступ запрёщён ???
от имени Администратор
c:\>cacls aaa.exe
c:\>cacls aaa.exe BUILTIN\Администраторы:F
NT AUTHORITY\SYSTEM:F
BUILTIN\Пользователи:R
c:\>cacls aaa.exe /g SYSTEM:F
разрешение поменялось....
теперь допустим
c:\>cacls aaa.exe /g Администратор:F
а так работает.............
так что получается что Администратор имеет большие привелегии чем SYSTEM ?
пробовал получать привелегии SE_SECURITY_NAME
тоже не какой реакции тоже самое...
вот код
bool SetFileOnlyForSystem(unsigned char *FileName)
{
SID_IDENTIFIER_AUTHORITY IdentifierAuthority=SECURITY_NT_AUTHORITY;
SID *Sid;
ACL *Acl;
SECURITY_DESCRIPTOR *SecurityDescriptor;
if(FileName==NULL)return false;
if(!strlen(FileName))return false;
Acl=LocalAlloc(LPTR,sizeof(*Acl));
SecurityDescriptor=LocalAlloc(LPTR,sizeof(*SecurityDescriptor));
if(!AllocateAndInitializeSid(&IdentifierAuthority,1,SECURITY_LOCAL_SYSTEM_RID,0,0,0,0,0,0,0,&Sid))
{
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return false;
}
if(!InitializeAcl(Acl,(sizeof(*Acl)+sizeof(ACCESS_ALLOWED_ACE)+GetLengthSid(Sid)-sizeof(unsigned long)),ACL_REVISION))
{
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return false;
}
if(!AddAccessAllowedAce(Acl,ACL_REVISION,0xFFFFFFFF,Sid))
{
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return false;
}
if(!InitializeSecurityDescriptor(SecurityDescriptor,SECURITY_DESCRIPTOR_REVISION))
{
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return false;
}
if(!SetSecurityDescriptorDacl(SecurityDescriptor,true,Acl,true))
{
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return false;
}
if(!SetFileSecurity(FileName,DACL_SECURITY_INFORMATION,SecurityDescriptor))
{
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return false;
}
FreeSid(Sid);
LocalFree(Acl);
LocalFree(SecurityDescriptor);
return true;
}
ну а так я пробывал получать привелегии...(хотя тут не только SE_SECURITY_NAME)
bool GetPrivilegeForProcess(void *Handle)
{
void *hToken;
TOKEN_PRIVILEGES Luid0;
TOKEN_PRIVILEGES Luid1;
TOKEN_PRIVILEGES Luid2;
if(Handle==NULL)return false;
if(!OpenProcessToken(Handle,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))return false;
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid0.Privileges[0].Luid))
{
CloseHandle(hToken);
return false;
}
if(!LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&Luid1.Privileges[0].Luid))
{
CloseHandle(hToken);
return false;
}
if(!LookupPrivilegeValue(NULL,SE_SECURITY_NAME,&Luid2.Privileges[0].Luid))
{
CloseHandle(hToken);
return false;
}
Luid0.PrivilegeCount=1;
Luid0.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
Luid1.PrivilegeCount=1;
Luid1.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
Luid2.PrivilegeCount=1;
Luid2.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken,false,&Luid0,0,(PTOKEN_PRIVILEGES)NULL,0))
{
return false;
}
if(!AdjustTokenPrivileges(hToken,false,&Luid1,0,(PTOKEN_PRIVILEGES)NULL,0))
{
CloseHandle(hToken);
return false;
}
if(!AdjustTokenPrivileges(hToken,false,&Luid2,0,(PTOKEN_PRIVILEGES)NULL,0))
{
CloseHandle(hToken);
return false;
}
CloseHandle(hToken);
return true;
}
|
|
кто оунер? 08.11.05 20:07
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
|
|
| |
всё я понел по чему это проесходит... 08.11.05 20:59
Автор: Tamas Статус: Member
|
|
|
|