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

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

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

85
задан 14.05.2015, 18:24

5 ответов

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

grep -Po '^sudo.+:\K.* 

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

grep '^sudo:.* 

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

getent group sudo | cut -d: -f4

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

разбивка Команда № 1:

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

разбивка Regex № 1:

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

разбивка Команда № 2:

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

разбивка Regex № 2:

  • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
  • ^: запустите строки
  • .*: нуль или больше символов
  • $: конец строки
: делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    /etc/group | cut -d: -f4

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

    getent group sudo | cut -d: -f4
    

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

    разбивка Команда № 1:

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

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    /etc/group

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

    grep '^sudo:.* 

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

    getent group sudo | cut -d: -f4
    

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

    разбивка Команда № 1:

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

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    /etc/group | cut -d: -f4

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

    getent group sudo | cut -d: -f4
    

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

    разбивка Команда № 1:

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

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками

    разбивка Regex № 1:

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

    разбивка Команда № 2:

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

    разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    : делает grep, соответствуют regex между кавычками
  • cut: Печать только указанный раздел каждой строки в файле
  • -d:: делает cut, интерпретируют : как разделитель полей
  • -f4: делает cut печать только четвертое поле
  • разбивка Regex № 2:

    • Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
    • ^: запустите строки
    • .*: нуль или больше символов
    • $: конец строки
    81
    ответ дан 04.10.2019, 19:17
    • 1
      - 1: этот won' t ловят других пользователей или группы, которые, возможно, были добавлены к sudoers или внешним источникам как LDAP, и мальчик - он ужасный способ сделать это. getent group sudo | cut -d: -f4, или использование awk, но так или иначе помнят, что у группы и passwd есть фиксированные форматы с разделителями. – Brian Klug 21.04.2015, 02:06
    • 2
      @muru You' право ре, я обновил свой ответ – scipilot 21.04.2015, 02:47
    • 3
      @kos Также отмечают, что Вы действительно должны использовать getent group - Вы don' t нужен grep вообще. getent group foo похож grep foo /etc/group, но более способный. – robinmitra 21.04.2015, 02:51
    • 4
      @muru I didn' t знают getent вообще, кто-либо жесткий о том, как grep и getent выдерживают сравнение в вычислительном отношении? Это было бы легче для выполнения getent? – scipilot 21.04.2015, 03:02
    • 5
      Этот ответ предполагает, что все sudoers являются членами sudo группа. Некоторые unixes имеют другие группы такой как wheel. Ответ @muru будет включать весь sudoers, неважно, в каких группах они находятся. – Chris Prince 14.03.2017, 18:17

    Как это указало здесь , я рассматриваю simpliest способ обнаружить с -l & -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.
    
    30
    ответ дан 04.10.2019, 19:17
    • 1
      Вы могли циклично выполниться через всех обычных пользователей и возвратить детали о них использующий что-то как : for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done. быстрый взлом ничто гарантируемое:) – El Yobo 09.06.2015, 09:09
    • 2
      Это также работает в активной установке каталога. Например, можно выбрать пользователя от некоторой специальной группы и проверить пользователя. Если Вы добавили AD группу правильно что-то как "%domain admins@mycompany.intra" ALL=(ALL) ALL тогда, она работает. Вы сохранили меня много времени, потому что я не знал, что это работает на нелокальных пользователей также. – Marcin 26.05.2017, 23:11

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

    :~$ sudo bash
    

    или

    :~$ su
    
    :~# visudo
    

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

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

    Группа 4 является группой администраторов (adm), и группа 27 является sudo ценурозом.

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

    :~$ cat /etc/group
    

    демонстрационный вывод А, на Ubuntu (но не базирующийся Redhat, Oracle Солярис/Солярис, базирующийся, или 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
    

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

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

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

    , Например:

    :~$ id mybrother
    

    Образец произвел

    uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
    
    3
    ответ дан 04.10.2019, 19:17
    • 1
      Я особенно вошел в систему upvote Вы. Идеальное объяснение:) – spinkus 03.07.2019, 18:42

    Как это было уже указано, ответ может быть найден на Unix & Exchange Стопки Linux:

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

    $ getent group wheel
    wheel:x:10:saml
    

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

    getent group sudo
    
    14
    ответ дан 04.10.2019, 19:17
    • 1
      Что означают эти числа? Я сделал geten group, и я вижу много различных чисел. Мой исходный вопрос, как узнать, является ли пользователь пользователем системы (созданный с useradd -r) – laurent 22.09.2019, 06:29

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

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

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

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

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

    awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
    
    1
    ответ дан 04.10.2019, 19:17
    • 1
      это показывает большему количеству пользователей, чем sudoers. Требуются некоторые модификации – Community 21.04.2015, 00:12
    • 2
      @NewUSer - это лучше? – Ja͢ck 21.04.2015, 00:24
    • 3
      Намного лучше. Работа Gd – Rob 21.04.2015, 00:26

    Теги

    Похожие вопросы