Как мне перечислить всех пользователей с правами root?
35
На linux box, как мне перечислить всех пользователей, имеющих права суперпользователя (и, что еще лучше, всех пользователей в целом вместе с тем, есть ли у них root или нет)?
Можете ли вы быть более точным относительно того, что вы подразумеваете под «привилегиями суперпользователя»? Вы имеете в виду пользователей с UID = 0?
Крис С
Пользователи, имеющие возможность делать что угодно. В основном - мне нужно перечислить пользователей вместе с группами, членами которых они являются, если это возможно.
Эрик
2
Если бы я знал, где находится ваш компьютер, я мог бы подойти и выдернуть шнур питания. Это квалифицируется как «делай что угодно», что означает, что я в твоем списке. Рафик перечислил три наиболее распространенные вещи, но их может быть больше, и мы знаем, что происходит с вашей системой или как она настроена.
Крис С
Ответы:
42
Не забудьте сменить пароль root. Если любой пользователь имеет UID 0, кроме root, он не должен. Плохая идея. Проверять:
grep 'x:0:' /etc/passwd
Опять же, вы не должны делать это, но чтобы проверить, является ли пользователь членом корневой группы:
grep root /etc/group
Чтобы узнать, может ли кто-либо выполнять команды от имени пользователя root, проверьте sudoers:
cat /etc/sudoers
Чтобы проверить бит SUID, который позволяет программам выполняться с правами root:
Строго говоря, первый работает только в том случае, если файл теневого пароля находится у пользователя. Я согласен, что в наши дни это почти всегда так, но на всякий случай я выполнил быструю работу над Perl, которая явно проверяет поле 3.
MadHatter поддерживает Monica
4
Это лучший шаблон, чем первый grep '[^:]*:[^:]*:0:' /etc/passwd. +1 в частности для проверки на SUID.
Приостановлено до дальнейшего уведомления.
33
Чтобы увидеть, кто является UID 0:
getent passwd 0
Чтобы увидеть, кто в группах root, wheeladmи admin:
getent group root wheel adm admin
Чтобы перечислить всех пользователей и группы, членами которых они являются:
getent passwd | cut -d : -f 1 | xargs groups
Приостановлено до дальнейшего уведомления. источник
9
В отличие от всех других ответов, которые ошибочно полагаются на файл / etc / passwd, этот, используемый getent passwdвместо этого, на самом деле правильный. Только не забудьте проверить / etc / sudoers.
Mivk
Спасибо за это. Намного понятнее Для меня это принятый ответ.
Fiddy Bux
6
Чистый корень - это идентификатор пользователя "0".
Все пользователи в системе находятся в файле / etc / passwd:
less /etc/passwd
Те, кто является root, имеют "0" в качестве идентификатора пользователя, который является 3-м столбцом. Те, у кого "0" в качестве группы (4-й столбец) также могут иметь некоторые привилегии root.
Далее вы захотите взглянуть на группы и посмотреть, кто является дополнительным членом групп «root», «wheel» или «admin»:
less /etc/group
Пользователи, перечисленные в этих группах, могут иметь некоторые привилегии root, особенно с помощью команды "sudo".
Последняя вещь, которую вы захотите проверить, - это конфигурация "sudo" и посмотреть, кто указан как имеющий полномочия на выполнение этой команды. Этот файл хорошо документирован, поэтому я не буду воспроизводить его здесь:
less /etc/sudoers
Это охватывает основные области, которые могут иметь root-доступ.
См. Также serverfault.com/questions/205598/…, чтобы узнать о нескольких других местах, где могут быть предоставлены права на повышение привилегий. (А именно, consolehelperи PackageKit.)
mattdm
2
Всем пользователям определенно НЕ гарантировано быть в / etc / passwd. Они могут быть в LDAP, например. Но getent passwdследует перечислить всех пользователей системы (включая root) в формате passwd, независимо от базы данных, в которой они определены.
Это хороший вариант, но помните об ограничениях (я уверен, что MadHatter уже знает об этом) - он не будет проверять группы и не будет проверять sudoers. Он будет только проверять, как он говорит, неявный root.
Рафик Маниар
2
Не разбирайте / etc / passwd. Пользователи могут быть определены в другом месте. Используйте getent passwdвместо этого. Для вашего первого примера «напечатать всех пользователей» попробуйте следующее:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk
2
Чтобы получить быстрый список всех пользователей, попробуйте дважды нажать вкладку (для автозаполнения) после ввода passwdкоманды с пробелом. Это работает и с suкомандой.
Должно быть сделано как привилегированный пользователь.
Ответы:
Не забудьте сменить пароль root. Если любой пользователь имеет UID 0, кроме root, он не должен. Плохая идея. Проверять:
grep 'x:0:' /etc/passwd
Опять же, вы не должны делать это, но чтобы проверить, является ли пользователь членом корневой группы:
grep root /etc/group
Чтобы узнать, может ли кто-либо выполнять команды от имени пользователя root, проверьте sudoers:
cat /etc/sudoers
Чтобы проверить бит SUID, который позволяет программам выполняться с правами root:
find / -perm -04000
источник
grep '[^:]*:[^:]*:0:' /etc/passwd
. +1 в частности для проверки на SUID.Чтобы увидеть, кто является UID 0:
Чтобы увидеть, кто в группах
root
,wheel
adm
иadmin
:Чтобы перечислить всех пользователей и группы, членами которых они являются:
источник
getent passwd
вместо этого, на самом деле правильный. Только не забудьте проверить / etc / sudoers.Чистый корень - это идентификатор пользователя "0".
Все пользователи в системе находятся в файле / etc / passwd:
Те, кто является root, имеют "0" в качестве идентификатора пользователя, который является 3-м столбцом. Те, у кого "0" в качестве группы (4-й столбец) также могут иметь некоторые привилегии root.
Далее вы захотите взглянуть на группы и посмотреть, кто является дополнительным членом групп «root», «wheel» или «admin»:
Пользователи, перечисленные в этих группах, могут иметь некоторые привилегии root, особенно с помощью команды "sudo".
Последняя вещь, которую вы захотите проверить, - это конфигурация "sudo" и посмотреть, кто указан как имеющий полномочия на выполнение этой команды. Этот файл хорошо документирован, поэтому я не буду воспроизводить его здесь:
Это охватывает основные области, которые могут иметь root-доступ.
источник
consolehelper
иPackageKit
.)getent passwd
следует перечислить всех пользователей системы (включая root) в формате passwd, независимо от базы данных, в которой они определены.Для печати всех пользователей
Чтобы напечатать только тех пользователей с UID 0, которые, как говорили другие, пользователи с неявными привилегиями root:
источник
getent passwd
вместо этого. Для вашего первого примера «напечатать всех пользователей» попробуйте следующее:getent passwd | perl -naF: -e 'print "$F[0]\n"'
Чтобы получить быстрый список всех пользователей, попробуйте дважды нажать вкладку (для автозаполнения) после ввода
passwd
команды с пробелом. Это работает и сsu
командой.Должно быть сделано как привилегированный пользователь.
источник
Меня раздражало, что не было однострочного ответа ... Если вы хотите перечислить все учетные записи UID 0 (root), используйте следующее:
Лучший,
источник