Я хочу проанализировать /etc/passwd
файл, чтобы узнать, имеет ли пользователь полномочие пользователя root и может выполнить интерактивную оболочку.
согласно
UID 100-999 резервируется системой для системных учетных записей/групп и административного
то, что я понял, - то, если UID между 100 и 999, у пользователя есть полномочие пользователя root.Я прав?
затем Как сказать пользователь, может выполнить интерактивную оболочку путем чтения /etc/passwd
?
PS. Я анализирую это файлы в Python, я могу реализовать логику, я просто не знаю, как узнать пользователя root и что такое Интерактивная оболочка и как найти тот.
Существует два типа учетных записей, пользователя системы и обычного пользователя. Системные учетные записи принадлежат сервисам и демонам, такой как 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
В 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
также.