Как я могу перечислить всех суперпользователей?

49

Я хочу, чтобы команда отображала всех пользователей, у которых есть права root, т. е. sudo?

Предположим, что я пользователь sudoer. Как я могу узнать всех других пользователей sudoer?

    
задан Maythux 20.04.2015 в 12:57
источник

6 ответов

49

Если вам просто нужно перечислить sudoers, перечисленные в группе sudo , я думаю, что лучший способ сделать это - запустить эту команду (которая должна быть более легкой, чем любая из другие команды в этом ответе):

grep -Po '^sudo.+:\K.*$' /etc/group

Также, как было предложено в комментариях muru, формат записей в /etc/group может быть легко обработан cut :

grep '^sudo:.*$' /etc/group | cut -d: -f4

Также, как было предложено в комментариях muru, вместо getent можно использовать grep :

getent group sudo | cut -d: -f4

Любая из этих команд будет печатать всех пользователей, перечисленных в группе sudo , в /etc/group (если есть).

Командная строка 1:

  • grep : печатает все строки, соответствующие регулярному выражению в файле
  • -P : делает grep соответствует регулярным выражениям в стиле Perl
  • o : делает grep печатает только согласованную строку
  • '^sudo.+:\K.*$' : делает grep соответствует регулярному выражению между кавычками

Распределение регулярных выражений # 1:

  • Любой символ или группа символов, не указанных в списке, соответствует символу или самой группе символов
  • ^ : начало строки
  • .+ : один или несколько символов
  • \K : отменить предыдущий матч
  • .* : ноль или более символов
  • $ : конец строки

Командная строка №2:

  • grep : печатает все строки, соответствующие регулярному выражению в файле
  • '^sudo.+:\K.*$' : делает grep соответствует регулярному выражению между кавычками
  • cut : печатает только указанный раздел каждой строки в файле
  • -d: : делает cut интерпретирует : как разделитель полей
  • -f4 : делает cut печатает только четвертое поле

Распределение регулярных выражений # 2:

  • Любой символ или группа символов, не указанных в списке, соответствует символу или самой группе символов
  • ^ : начало строки
  • .* : ноль или более символов
  • $ : конец строки
ответ дан kos 20.04.2015 в 13:57
источник
23

Как указано здесь I рассмотрите самый простой способ обнаружить с помощью -l & amp; -U вместе, просто введите users , который будет отображаться, например, John , а затем:

Если у пользователя есть sudo доступ, он будет печатать уровень доступа sudo для этого конкретного пользователя:

  sudo -l -U John
  User John may run the following commands on this host:
     (ALL : ALL) ALL

Если у пользователя нет доступа sudo, он будет печатать, что пользователь не разрешен для запуска sudo на localhost:

   sudo -l -U John
   User John is not allowed to run sudo on localhost.
    
ответ дан JoKeR 20.04.2015 в 13:40
10

Как уже было сказано, ответ можно найти на Unix & amp; Linux Stack Exchange :

  

Это показывает, что пользователь «saml» является членом группы колес.

$ getent group wheel
wheel:x:10:saml

Единственное отличие состоит в том, что группа в Ubuntu не wheel , а sudo (или admin в более старых версиях Ubuntu). Таким образом, команда становится:

getent group sudo
    
ответ дан Andrea Corbellini 20.04.2015 в 13:02
6

Расширяясь в sudo -l -U , можно использовать getent passwd , чтобы определить пользователей, которые могут использовать sudo . Использование getent позволяет получить доступ к пользователям, которые не могут присутствовать в файле passwd , например, для пользователей LDAP:

getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'

sudo -U не возвращает ненулевое значение выхода, которое мы могли бы использовать, поэтому мы сводимся к grepping вывода.

    
ответ дан muru 20.04.2015 в 15:26
1

Эта команда возвращает список пользователей с правами sudo:

awk -F ":" '{ system("groups "  " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd

Выход (например):

<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker

Если отображается только имя пользователя, то эта команда:

awk -F ":" '{ system("groups "  " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print  }' /etc/passwd
    
ответ дан A.B. 20.04.2015 в 13:12
0

В большинстве Unix-подобных систем, которые имеют команду sudo и имеют файл конфигурации sudo; запуск visudo как root:

:~$ sudo bash

или

:~$ su

:~# visudo

позволит администратору проверять и изменять привилегии групп, которые могут использовать команду sudo.

В Unix-подобных системах на базе Debian, таких как Ubuntu, группы 4 и 27 обычно имеют права доступа к привилегиям sudo.

Группа 4 - это группа администраторов (adm), а группа 27 - sudo gid.

Чтобы узнать, какие пользователи в настоящее время назначены этим группам, загрузите файл / etc / group, как показано ниже:

:~$ cat /etc/group

Пример вывода на Ubuntu (но не на основе Redhat, на базе ОС Solaris / Solaris или на базе BSD) приведет к следующему:

adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9: 
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
sudo:x:27:youruser,mybrother

Как мы можем сказать, ваш пользователь является администратором системы и членом группа 4 (админ). Но youruser и mybrother являются членами группы 27, которая является gid (групповой идентификацией) номером группы sudo. Таким образом, mybrother также может получить привилегии root (суперпользователь).

Многие системы Linux, такие как Fedora и Slackware, включают группу колес gid = 10. Это разрешает административные привилегии при применении команды sudo. В системах на базе BSD (например, FreeBSD) пользователь root является членом группы колес, которая является gid 0.

Также с помощью команды id любой пользователь может найти информацию о группе другого известного пользователя в системе.

Пример:

:~$ id mybrother

Пример вывода

uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
    
ответ дан oOpSgEo 08.06.2015 в 22:13