Я хочу, чтобы команда перечислила всех пользователей, имеющих права суперпользователя, т.е. sudo?
Предположим, я пользователь sudoer. Как я могу знать всех других пользователей sudoer?
Я хочу, чтобы команда перечислила всех пользователей, имеющих права суперпользователя, т.е. sudo?
Предположим, я пользователь sudoer. Как я могу знать всех других пользователей sudoer?
Если вам просто нужно перечислить sudoers, перечисленные в sudo
группы, я думаю, что лучшим способом сделать это было бы запустить эту команду (которая должен быть вычислительно легче, чем любая из других команд в этом ответе):
grep -Po '^sudo.+:\K.*$' /etc/group
Также, как было предложено в комментариях муру, формат записей в /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
сопоставьте регулярное выражение между кавычкамиРазбивка регулярного выражения #1:
^
: начало строки.+
: один или несколько символов\K
: отбросить предыдущее совпадение.*
: ноль или более символов$
: конец строкиРазбивка команды №2:
grep
: Выводит все строки, соответствующие регулярному выражению в файле'^sudo.+:\K.*$'
: делает grep
сопоставьте регулярное выражение между кавычкамиcut
: Печатает только указанный раздел каждой строки в файле-d:
: делает cut
интерпретировать :
в качестве разделителя полей-f4
: делает cut
выведите только четвертое полеРазбивка регулярного выражения #2:
^
: начало строки.*
: ноль или более символов$
: конец строкиКак в нем говорилось здесь Я считаю, что самый простой способ открыть для себя с -l
& -U
варианты вместе, просто введите users
в нем будет перечислен, например: John
затем:
Если у пользователя есть 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.
Расширяя информацию о 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
не возвращает ненулевое значение выхода, которым мы могли бы воспользоваться, поэтому мы сводимся к grepping выходных данных.
Как уже было сказано, ответ можно найти на Обмен стеками Unix и Linux:
Это показывает, что пользователь "saml" является членом группы wheel.
$ getent group wheelwheel:x:10:saml
Единственное отличие заключается в том, что группа в Ubuntu не wheel
, но sudo
(или admin
в более старых версиях Ubuntu). Таким образом, команда становится:
getent group sudo
Команда:
cat /etc/group | grep sudo
Выход:
sudo:x:27:Tom,Stacy
Том, Стейси - это пользователи с привилегиями 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:yourusertty: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,mybrotherfloppy:x:25:tape:x:26:sudo:x:27:youruser,mybrother
Как мы можем судить, ваш пользователь является администратором системы и членом группы 4 (adm). Но youruser и mybrother оба являются членами группы 27, которая является идентификатором gid (групповой идентификационный номер) группы sudo. Таким образом, мой брат также может получить права суперпользователя (суперпользователя).
Многие системы Linux, такие как Fedora и Slackware, включают в себя группу колес gid=10. Который предоставляет права администратора при применении команды sudo. В системах, основанных на BSD (например, FreeBSD), пользователь root является членом группы wheel, которая имеет gid 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
Я был озадачен тем, как vagrant
пользователь может использовать sudo
даже не будучи упомянутым в /etc/sudoers
ни в /etc/group
ни найдено с getent
.
Оказывается sudo
также считывает записи из всех файлов в разделе /etc/sudoers.d/
. Так что, если вы не просматривали этот каталог, вы можете не осознавать, сколько пользователей на самом деле есть sudo
доступ.
Такого рода sudo
доступ может быть обнаружен по ответу Джокера с помощью sudo -l -U vagrant
но не обнаруживается ни одним из других ответов здесь, которые все полагаются на либо getent
или /etc/group
.
Основано на ответах от @muru и @kos, но с некоторой оптимизацией.
То getent group sudo
команда перечисляет только пользователей, у которых есть группа sudo. Остальные команды проверяют, действительно ли пользователь может работать от имени root. Существуют также другие дополнения для улучшения форматирования выходных данных.
команда
if [ -z $(getent group sudo) ]; then printf "\n >>>>>>>>>>> NO ENTRIES <<<<<<<<<<<\n\n"; else getent group sudo | sed 's/.*://' | sed 's/,/\n/g' | xargs -L1 sudo -l -U | grep -v 'not allowed' | sed 's/Matching Defaults entries/\n >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>\n\nMatching Defaults entries/g' | sed '$a\\'; fi
выход
>>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>Matching Defaults entries for may_user_i on localhost: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/binUser may_user_i may run the following commands on localhost: (ALL) ALL (ALL) ALL >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>Matching Defaults entries for may_user_ii on localhost: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/binUser may_user_ii may run the following commands on localhost: (ALL) ALL
Спасибо! =D
[Ссылки.: https://askubuntu.com/a/611607/134723 , https://askubuntu.com/a/611646/134723 , https://unix.stackexchange.com/a/136798/61742 , https://unix.stackexchange.com/a/26639/61742 ]
Обратите внимание, что только Джокер и муру ответы правильные, только синтаксический анализ файлов user /group conf не дает вам, у кого есть разрешение sudo
, а у кого нет … если пользователь находится в группе sudo
, но `значит, в файле sudoers ничего не упоминается о группе “sudo”?
@Джокер милый и хитрый