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

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

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

7 ответов

Решение

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

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

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

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

Также снова, как предложено в комментариях Муру, можно использовать 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 печатать только четвертое поле

Распределение Regex #2:

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

Как указано здесь, я считаю, что самый простой способ обнаружить -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 на локальном хосте:

   sudo -l -U John
   User John is not allowed to run sudo on localhost.

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

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

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

$ getent group wheel
wheel:x:10:saml

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

getent group sudo

Команда -

cat group | grep sudo

Выход -

sudo:x:27:Tom,Stacy

Том, Стейси - пользователи с привилегиями sudo

В большинстве 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, Oracle 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

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

Многие системы Linux, такие как Fedora и Slackware, включают gid группы колес = 10. Что дает права администратора при применении команды sudo. В системах на основе BSD (например, FreeBSD) пользователь root является членом группы wheel, которая имеет значение 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)

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

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

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

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

На основе ответов @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

[Ссылки: /questions/4175/kak-ya-mogu-perechislit-vseh-super-polzovatelej/4187#4187, /questions/4175/kak-ya-mogu-perechislit-vseh-super-polzovatelej/4190#4190, https://unix.stackexchange.com/a/136798/61742, https://unix.stackexchange.com/a/26639/61742 ]

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