Як перерахувати всіх користувачів з root?


35

Як у списку linux я перерахувати всіх користувачів, які мають кореневі привілеї (а ще краще, всіх користувачів загалом разом із тим, чи мають вони root або ні)?


1
Чи можете ви бути більш конкретними щодо того, що ви маєте на увазі під "кореневими привілеями"? Ви маєте на увазі користувачів з UID = 0?
Кріс S

Користувачі, які мають можливість робити що завгодно. В основному - мені потрібно перераховувати користувачів разом із групами, до яких вони входять.
Ерік

2
Якби я знав, де твій комп’ютер, я міг би підійти і витягнути шнур живлення. Це може кваліфікуватися як "робити що-небудь", що означає, що я у вашому списку. Рафік перерахував три найпоширеніші речі, але їх може бути більше, і ми знаємо, зауваживши про вашу систему чи про її налаштування.
Кріс S

Відповіді:


42

Не забудьте змінити кореневий пароль. Якщо у будь-якого користувача є UID 0, крім root, він не повинен. Погана ідея. Перевіряти:

grep 'x:0:' /etc/passwd

Знову ж таки, ви не повинні робити цього, а перевірити, чи є користувач кореневою групою:

grep root /etc/group

Щоб побачити, чи може хтось виконувати команди як root, перевірте sudoers:

cat /etc/sudoers

Щоб перевірити наявність біта SUID, який дозволяє виконувати програми з правами root:

find / -perm -04000


Суворо, що перший працює лише тоді, коли тіньовий файл пароля є у користувача. Я погоджуюся, що це майже завжди є в ці дні, але про всяк випадок я зробив швидку задачу, яка чітко перевіряє поле 3.
MadHatter підтримує Моніку

4
Це кращий зразок , ніж перший: grep '[^:]*:[^:]*:0:' /etc/passwd. +1, зокрема для перевірки SUID.
Призупинено до подальшого повідомлення.

33

Щоб дізнатись, хто є UID 0:

getent passwd 0

Щоб побачити, хто в групах root, wheel admі 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" або "wheel" або "admin":

less /etc/group

Користувачі, перелічені в цих групах, можуть мати деякі кореневі привілеї, особливо за допомогою команди "sudo".

Заключна річ, яку ви хочете перевірити - це конфігурація "sudo" і побачити, хто в списку має право на виконання цієї команди. Цей файл сам добре задокументований, тому я його не відтворюю тут:

less /etc/sudoers

Це охоплює основні області того, хто може мати кореневий доступ.


Також дивіться також сервер defaultfault.com/questions/205598/… для ще декількох місць, де можуть бути надані права на ескалацію привілеїв. (А саме consolehelperі PackageKit.)
mattdm

2
Усі користувачі, безумовно, НЕ гарантовані в / etc / passwd. Наприклад, вони можуть бути в LDAP. Але getent passwdслід перераховувати всіх користувачів системи (включаючи root) у форматі passwd, незалежно від бази даних, де вони визначені.
mivk

3

Щоб надрукувати всіх користувачів

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

Щоб друкувати лише тих користувачів з UID 0, як це було сказано іншими, користувачі з неявними кореневими привілеями:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd

Це хороший лайнер, але будьте в курсі обмежень (я впевнений, що MadHatter це вже знає) - він не перевірятиме групи і не перевірятиме судорів. Він лише перевірить, як він каже, неявний корінь.
Рафік Маньяр

2
Не розбирайте / etc / passwd. Користувачі можуть бути визначені в іншому місці. Використовуйте getent passwdзамість цього. Для вашого першого прикладу "надрукувати всіх користувачів" скоріше спробуйте:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk

2

Щоб отримати швидкий список усіх користувачів, спробуйте натиснути вкладку двічі (для автоматичного завершення) після введення passwdкоманди, після якої пробіл. Це працює і з suкомандою.

Потрібно робити як користувач, що користується привілеєм.


Це особливість zsh? Bash пропонує просто файли на openSUSE.
jgillich

Тестували на Debian (стискають) в bash. Я не вірю, що хтось офіційно підтримає це, але це ярлик.
Смарагдо

Оновлення: це більше не працює в El Capitan. Ймовірно, це було виправлено з міркувань безпеки.
Смарагдо

0

Мене дратувало, що не було відповіді з однією лінією ... Якщо ви хочете перерахувати всі облікові записи UID 0 (root), використовуйте наступне:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

Найкраще,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.