|
Как узнать, что текущая учетная запись ОС имеет административные права? | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |