Я хочу, чтобы команда перечисляла всех пользователей, которые имеют привилегии root, т.е. sudo?
Предположим, я пользователь sudoer. Как я мог знать всех других пользователей sudoer?
Я хочу, чтобы команда перечисляла всех пользователей, которые имеют привилегии root, т.е. sudo?
Предположим, я пользователь sudoer. Как я мог знать всех других пользователей sudoer?
Ответы:
Если вам просто нужно перечислить sudoers, перечисленных в sudoгруппе, я думаю, что лучший способ сделать это - запустить эту команду (которая должна быть вычислительно легче, чем любая из других команд в этом ответе):
grep -Po '^sudo.+:\K.*$' /etc/group
Также, как предлагается в комментариях Muru, формат записей в /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сопоставляет регулярные выражения в стиле Perlo: grepпечатает только совпадающую строку'^sudo.+:\K.*$': делает grepсоответствие регулярному выражению между кавычкамиRegex # 1 разбивка:
^: начало строки.+: один или несколько символов\K: отменить предыдущий матч.*: ноль или более символов$: конец линииКоманда № 2 разбивка:
grep: Печатает все строки, соответствующие регулярному выражению в файле'^sudo.+:\K.*$': делает grepсоответствие регулярному выражению между кавычкамиcut: Печатает только указанный раздел каждой строки в файле-d:: cutинтерпретировать :как разделитель полей-f4: cutпечатает только четвертое полеРаспределение Regex # 2:
^: начало строки.*: ноль или более символов$: конец линииgetent group sudo | cut -d: -f4или используйте awk, но в любом случае помните, что group и passwd имеют фиксированные форматы с разделителями.
getent group- вам вообще не нужен grep. getent group fooэто как grep foo /etc/group, но более способный.
getent, хоть как-то размышляли о том, как grepи getentсравнивать в вычислительном отношении? Будет ли легче бежать getent?
sudoгруппы. У некоторых юниксов есть другие группы, такие как wheel. Ответ @muru будет включать всех sudoers независимо от того, в каких группах они находятся.
Как указано здесь, я рассматриваю самый простой способ поиска с -l& -Uпараметрами вместе, просто напечатайте usersего, например: Johnthen:
Если у пользователя есть 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.
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done. быстрый взлом ничего не гарантировал :)
"%domain admins@mycompany.intra" ALL=(ALL) ALLэто работает. Вы сэкономили мне много времени, потому что я не знал, что это работает и для не локальных пользователей.
Как уже было сказано, ответ можно найти на Unix & Linux Stack Exchange :
Это показывает, что пользователь "saml" является членом группы wheel.
$ getent group wheel wheel:x:10:saml
Разница лишь в том, что группы в Ubuntu нет wheel, но sudo(или adminв более старых версиях Ubuntu). Таким образом, команда становится:
getent group sudo
geten groupи я вижу много разных чисел. Мой оригинальный вопрос, как узнать, является ли пользователь системным пользователем (создан с помощью useradd -r)
Развернув 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 не возвращает ненулевое значение выхода, которым мы могли бы воспользоваться, поэтому мы ограничены выводом.
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 также может получить права root (суперпользователь).
Многие системы 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
Команда:
cat /etc/group | grep sudo
Выход:
sudo:x:27:Tom,Stacy
Том, Стейси - пользователи с привилегиями sudo.
cat .
Я был поставлен в тупик о том, как vagrantпользователь может использовать, sudoдаже если он не упомянут /etc/sudoersни в, /etc/groupни в с getent.
Оказывается sudoтакже читает записи из всех файлов в/etc/sudoers.d/ . Поэтому, если вы не просматривали этот каталог, вы можете не понимать, сколько пользователей на самом деле имеют sudoдоступ.
Такой sudoдоступ может быть обнаружен ответ Joker, используя , sudo -l -U vagrantно не обнаруживается какой - либо из других ответов здесь , которые все связаны либо getentили /etc/group.