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

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

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

87
задан 14 May 2015 в 08:24

9 ответов

Если просто необходимо перечислить 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
    ответ дан 14 May 2015 в 18:24

    Эта команда возвращает список пользователей с 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
    ответ дан 14 May 2015 в 18:24

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

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

    $ getent group wheel
    wheel:x:10:saml
    

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

    getent group sudo
    
    14
    ответ дан 14 May 2015 в 18:24

    Подробно останавливаясь эти 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 не возвращает ненулевое значение выхода, которое мы могли использовать в своих интересах, таким образом, мы уменьшаемся до захвата вывода.

    9
    ответ дан 14 May 2015 в 18:24

    Как это указало здесь , я рассматриваю 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
    ответ дан 14 May 2015 в 18:24

    В большинстве подобных 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
    ответ дан 14 May 2015 в 18:24

    Я был озадачен о том, как vagrant пользователь может использовать sudo даже, не будучи упомянутым в /etc/sudoers, ни в /etc/group, ни найденный с getent.

    Складывается sudo также записи чтений из всех файлов под /etc/sudoers.d/ . Таким образом, если Вы не просмотрели тот каталог, Вы не можете понять, сколько пользователи на самом деле имеют sudo доступ.

    Этот вид sudo доступ может быть обнаружен ответом JoKeR с помощью sudo -l -U vagrant, но не обнаруживается ни одним из других ответов здесь, на которые все полагаются или getent или /etc/group.

    0
    ответ дан 4 October 2019 в 19:17

    Команда:

    cat /etc/group | grep sudo
    

    Вывод:

    sudo:x:27:Tom,Stacy
    

    Tom, Stacy является пользователями с sudo полномочиями.

    1
    ответ дан 4 October 2019 в 19:17

    На основе ответов @muru и @kos, но с некоторыми оптимизациями.

    Команда getent group sudo выводит список только пользователей, у которых есть группа sudo. Остальные команды проверяют, действительно ли пользователь может работать как root. Есть также другие дополнения для улучшения форматирования вывода.

    КОМАНДА

    if [ -z $(getent group sudo) ]; then printf "\n >>>>>>>>>>> NO ENTRIES <<<<<<<<<<<\n\n"; 
    else getent group sudo | 
    sed 's/.*://' | 
    sed 's/,/\n/g' | 
    xargs -L1 sudo -l -U | 
    grep -v 'not allowed' | 
    sed 's/Matching Defaults entries/\n >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>\n\nMatching Defaults entries/g' | 
    sed '$a\\'; fi
    

    ВЫВОД

     >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>
    
    Matching Defaults entries for may_user_i on localhost:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User may_user_i may run the following commands on localhost:
        (ALL) ALL
        (ALL) ALL
    
     >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>
    
    Matching Defaults entries for may_user_ii on localhost:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User may_user_ii may run the following commands on localhost:
        (ALL) ALL
    

    Спасибо! = D

    [Ссылка: https://askubuntu.com/a/611607/134723 , https://askubuntu.com/a/611646/134723 , https://unix.stackexchange.com/a/136798/61742 , https://unix.stackexchange.com/a/26639/61742 ]

    0
    ответ дан 4 February 2020 в 13:38

    Другие вопросы по тегам:

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