Как я могу перечислить всех супер пользователей?
Я хочу, чтобы команда перечисляла всех пользователей, которые имеют привилегии root, т.е. sudo?
Предположим, я пользователь sudoer. Как я мог знать всех других пользователей sudoer?
7 ответов
Если вам просто нужно перечислить 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
печатать только четвертое поле
Распределение Regex #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
не возвращает ненулевое значение выхода, которым мы могли бы воспользоваться, поэтому мы ограничены выводом.
Как уже было сказано, ответ можно найти на Unix & Linux Stack Exchange:
Это показывает, что пользователь "saml" является членом группы wheel.
$ getent group wheel wheel:x:10:saml
Разница лишь в том, что группа в Ubuntu не wheel
, но sudo
(или же admin
в более старых версиях Ubuntu). Таким образом, команда становится:
getent group sudo
Команда -
cat 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: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 также может получить права суперпользователя (суперпользователь).
Многие системы 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
Я был в тупик о том, как vagrant
пользователь может использовать sudo
даже не будучи упомянутым в /etc/sudoers
ни в /etc/group
не найдено с getent
,
Оказывается sudo
также читает записи из всех файлов в/etc/sudoers.d/
, Так что если вы не просматривали этот каталог, вы можете не понимать, сколько пользователей на самом деле sudo
доступ.
Этот вид sudo
доступ можно определить по ответу JoKeR, используя 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/bin
User 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/bin
User may_user_ii may run the following commands on localhost:
(ALL) ALL
Благодаря! =D
[Ссылки: /questions/4175/kak-ya-mogu-perechislit-vseh-super-polzovatelej/4187#4187, /questions/4175/kak-ya-mogu-perechislit-vseh-super-polzovatelej/4190#4190, https://unix.stackexchange.com/a/136798/61742, https://unix.stackexchange.com/a/26639/61742 ]