парсинг '/etc/passwd' для нахождения пользователя root, и может ли пользователь выполнить интерактивную оболочку

Я хочу проанализировать /etc/passwd файл, чтобы узнать, имеет ли пользователь полномочие пользователя root и может выполнить интерактивную оболочку.

согласно

UID 100-999 резервируется системой для системных учетных записей/групп и административного

то, что я понял, - то, если UID между 100 и 999, у пользователя есть полномочие пользователя root.Я прав?

затем Как сказать пользователь, может выполнить интерактивную оболочку путем чтения /etc/passwd?

PS. Я анализирую это файлы в Python, я могу реализовать логику, я просто не знаю, как узнать пользователя root и что такое Интерактивная оболочка и как найти тот.

0
задан 1 February 2016 в 08:01

2 ответа

Существует два типа учетных записей, пользователя системы и обычного пользователя. Системные учетные записи принадлежат сервисам и демонам, такой как lightdm, dnsmasq, и т.д. Обычно Вы не можете войти в систему в те учетные записи (хотя существуют пути).

Обычные пользователи, такие как Ваша учетная запись или другие люди учетные записи, могут войти в систему и взаимодействовать с ОС через оболочку (мог быть bash, ksh, mksh, csh, или графическая оболочка такой как Gnome или Unity).

Система считает диапазон от 100 до 999 по умолчанию. Там существует один особый случай, nobody , у кого есть идентификатор 65534 (Это - макс. число UID). В моей системе, например, dnsmasq это работает dnsmasq сервис.

Учетные записи обычного пользователя имеют диапазон UID от 1 000 до 65 533. Те пользователи могут войти в систему, если их пароль не отключен или их запись в /etc/passwd имеет набор оболочки к /usr/sbin/nologin, или предотвращенный некоторым другим способом. У этих пользователей может быть полномочие пользователя root, если они принадлежат sudo группа.

Таким образом, если Вы хотите найти пользователей, которые имеют sudo полномочие необходимо проанализировать /etc/group файл. Здесь является моим:

$ awk '/sudo/' /etc/group                                      
sudo:x:27:xieerqi,testuser

Для получения просто пользователей использовать : как разделитель и печатают 4-е поле.

$ awk -F':' '/sudo/{print $4}' /etc/group                      
xieerqi,testuser

В Python это сделано как так:

>>> with open("/etc/group") as file:
...    for lines in file:
...       if lines.__contains__("sudo"):
...          print lines.split(":")[3]

Вот еще более интересный подход. Что было бы, если мы хотим взять весь sudo пользователи и видят, настраивали ли им оболочку в /etc/passwd ?

$ awk -F':' '/sudo/{gsub(/\,/,"\n");print $4 }' /etc/group | xargs -I {} grep '^{}\:.*' /etc/passwd               
xieerqi:x:1000:1000:xieerqi,,,:/home/xieerqi:/bin/mksh
testuser:x:1001:1001:,,,:/home/testuser:/bin/bash
2
ответ дан 29 September 2019 в 13:09

В Python это было бы сделано как

import grp
import pwd
print([x for x in grp.getgrnam('sudo').gr_mem if pwd.getpwnam(x).pw_shell not in ('/bin/false', '/bin/nologin')])

, Куда grp.getgrnam('sudo').gr_mem возвратится, все элементы группы группы sudo и pwd.getpwnam(USER).pw_shell возвращается, пользователи окружают от /etc/passwd.

<час>

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

0
ответ дан 29 September 2019 в 13:09

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

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