Имя: Пароль:
1C
 
Как узнать, что текущая учетная запись ОС имеет административные права?
,
0 TormozIT
 
гуру
27.08.16
11:11
Как узнать, что текущая учетная запись ОС (не процесс!) имеет административные права?
1 TormozIT
 
гуру
27.08.16
11:13
На C#

public static bool IsAdmin()
{
    System.Security.Principal.WindowsIdentity id = System.Security.Principal.WindowsIdentity.GetCurrent();
    System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(id);
    
    return p.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);            
}

Есть ли способ через стандартные COM или WMI объекты Windows?
2 Рэйв
 
27.08.16
11:25
Усложняешь ты:-)
3 TormozIT
 
гуру
27.08.16
11:32
(2) По сравнению с чем?
4 Рэйв
 
27.08.16
11:34
(3)Со средним опытом адинесников в c#.
5 TormozIT
 
гуру
27.08.16
11:36
На паскале

public static bool IsAdministrator()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(identity);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
6 Рэйв
 
27.08.16
11:37
(5)Без админа в системе не взойдет, имхо
7 Asmody
 
27.08.16
11:41
WMI сделать запрос к группе Администраторы или Administrators
8 Рэйв
 
27.08.16
11:44
(7)Ну если есть пароли, то конечно:-)
9 Feunoir
 
27.08.16
11:59
(7) Быть в группе администраторов и являться администратором, в винде от Висты и выше со включенным UAC, не одно и то же.
10 TormozIT
 
гуру
27.08.16
12:33
(7) Это как?
11 TormozIT
 
гуру
27.08.16
12:41
Пока самый простой способ нашел такой.
Получаем результат команды системы "Net user <имя учетки>". Ищем в нем "Администраторы" или "Administrators". Если нашли, то учетка админская.
12 TormozIT
 
гуру
22.09.16
10:09
(11) такой способ не работает, когда учетка доменная является членом Администраторы(локальные) и Пользователи(доменные).
13 sitex
 
naïve
22.09.16
10:18
(12) Итого в домене проверяем или локального?
14 uno-group
 
22.09.16
10:23
Создай текстовый файл дай на него права толька админам и в попытке пробуй записать туда строку. удалось админ нет лузер
15 uno-group
 
22.09.16
10:24
можно системный файл ност юзать добавляя и удаляя пустую строку
16 TormozIT
 
гуру
22.09.16
10:31
(13) Проверяем произвольный ПК с произвольной учеткой. ПК может быть в домене или может быть в рабочей группе. Учетка может быть локальной или доменной. Проверить надо вхождение текущей учетки в группу локальных админов.
17 pessimist
 
22.09.16
10:33
(0) Поскольку понять что такое "административные права" сложно правильнее проверять что учётная запись имеет необходимые права. Например если нужны права на запись в определенный каталог то их и проверять.
18 TormozIT
 
гуру
22.09.16
10:35
(17) Про элевацию слышал? Отсутствие возможности выполнить действие еще не значит что нет прав на это у учетки. Мне надо именно права учетки проверить, а не фактическую возможность.
19 Torquader
 
22.09.16
10:38
(18) Просто, некоторые действия в системе назначаются пользователям и группе пользователей.
Например, можно вычеркнуть группу "Администраторы" из списка разрешения изменения времени - в итоге - пользователь "Администратор", а время поменять не может.

И ещё, пользователь, выступающей от имени операционной системы (SYSTEM) локально может всё,но администратором не является.

Так что - проще через WMI запросить группы текущего пользователя и посмотреть - нет ли среди них встроенной группы "Администраторы".
20 Лефмихалыч
 
22.09.16
10:41
List local group members on a remote computer using WMI and PowerShell
https://gallery.technet.microsoft.com/scriptcenter/List-local-group-members-762b48c5
21 sitex
 
naïve
22.09.16
10:45
(18) не знаю поможет тебе это или нет,на локальной станции проверить так:

wmic NETLOGIN  Where (Caption="пользователь" AND Privileges=2) get Caption, Name, FullName, NumberOfLogons, PrimaryGroupId, Workstations,LogonServer
22 sitex
 
naïve
22.09.16
10:46
(18) на Домене проверяется через dsquery читать тут https://technet.microsoft.com/en-us/library/cc754232(v=ws.11).aspx
23 Jump
 
22.09.16
10:50
(17) Понять что такое права администратора очень просто.
Это базовое понятие.
Администратор, это тот кто может менять права, любые.
Если есть право на изменение прав - значит админские права.

При этом права доступа к определенным директориям или процессам у администратора могут быть ограничены.
24 sitex
 
naïve
22.09.16
11:01
(23) >>При этом права доступа к определенным директориям или процессам у администратора могут быть ограничены.<<

Это можно проверить запуском на запись, создать батник с выводом результата.
25 gitotuta
 
22.09.16
11:02
(24) по умолчанию не запишешь, нужно подтверждение UAC
26 sitex
 
naïve
22.09.16
11:10
(25) Запусти этот батник под UAC что у тебя выйдет:
echo off
setlocal enableextensions enabledelayedexpansion

call :IsAdminTest IsAdmin

echo IsAdmin=%IsAdmin%

endlocal
exit /b 0

:IsAdminTest
    setlocal enableextensions enabledelayedexpansion
    
    "%systemroot%\system32\reg.exe" query "HKU\S-1-5-19" 1>nul 2>nul && set IsAdmin=1 || set IsAdmin=0
  
   endlocal & set /a %~1=%IsAdmin%
    
exit /b 0
27 gitotuta
 
22.09.16
12:16
isadmin=0
28 gitotuta
 
22.09.16
12:16
даже не спросил ничего
29 sitex
 
naïve
22.09.16
12:19
(28) а UAC включен ?
30 Cyberhawk
 
22.09.16
12:24
"текущая учетная запись ОС" для кого? Для фонового задания, для веб-клиента, для тонкого/толстого клиента?
31 Torquader
 
22.09.16
12:25
В Windows API есть функция, позволяющая проверить, что пользователь находится в группе администраторов.
https://msdn.microsoft.com/en-us/library/aa376389(VS.85).aspx
(Не забываем, что локальные администраторы и доменные администраторы - это отдельные группы).
32 Torquader
 
22.09.16
12:27
33 MM
 
22.09.16
12:27
(0) Может помочь вывод whoami /all , но он зависит от региональных настроек системы.
(23) Т.е. привилегия SeTakeOwnershipPrivilege ?
34 MM
 
22.09.16
12:32
+(33) В https://support.microsoft.com/ru-ru/kb/243330 есть описание для SID: S-1-5-32-544 Администраторы. SID не зависит от того как называются пользователи и группы на компьютере и в домене.
35 gitotuta
 
22.09.16
12:34
(29) попробовал создать файл в програм файлс - спросил
36 TormozIT
 
гуру
22.09.16
12:42
(19)
> через WMI запросить группы текущего пользователя и посмотреть - нет ли среди них встроенной группы "Администраторы"
Подскажи как это сделать.
37 TormozIT
 
гуру
22.09.16
12:45
(30) Текущая учетная запись процесса, выполняющего код.
38 Torquader
 
22.09.16
13:47
Наверное, вот так:
isUserInDomainGroup(username, domain, group)
{
    counter := 0
    for result in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_GroupUser Where PartComponent=""Win32_UserAccount.Domain='" domain "',Name='" username "'"" And GroupComponent=""Win32_Group.Domain='" domain "',Name='" group "'""")
        counter := counter+1
    return counter
}
39 TormozIT
 
гуру
22.09.16
14:14
(38) Если учетная запись принадлежит доменной группе "ПОльзователи", которая включена в локальную группу "Администраторы", то такой способ не даст правильный результат.
40 TormozIT
 
гуру
22.09.16
14:20
Видимо все таки придется делать через внешнюю компоненту.
41 sitex
 
naïve
22.09.16
14:22
(40) А что мешает как описал (33),через whoami /all ?
42 TormozIT
 
гуру
22.09.16
14:49
(41) Да, наверное универсальный. Но в этом способе я придумал только искать строку "S-1-5-32-544". Если она есть, то учетка - член Встроенные\Администраторы. Но я не уверен в надежности такого способа поиска ответа в результате этой команды.
43 MM
 
22.09.16
14:53
(42) Не универсальный способ, думаю, не работает на XP, из-за отсутствия утилиты.
Там же есть данные о том была ли применена элевация к процессу.
44 TormozIT
 
гуру
22.09.16
14:55
(43) Да. Появилась она в Windows 7/2008.
45 sitex
 
naïve
22.09.16
15:13
(44) Тогда узнавать SID через wmic.exe
46 gitotuta
 
22.09.16
15:18
так все равно xp уже не поддерживается
47 gitotuta
 
22.09.16
15:18
и 8.3.8 ужу не запускается
48 TormozIT
 
гуру
22.09.16
15:27
У меня нижняя граница поддержки Windows 2000 и 1С 8.2.12
49 gitotuta
 
22.09.16
15:28
(39) Уже пора переходить на .net
50 sitex
 
naïve
22.09.16
15:46
51 Мыш
 
22.09.16
15:48
net localgroup
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший