Я хочу, чтобы команда перечислила всех пользователей, имеющих права root, т.е. sudo?
Предположим, я пользователь sudoer. Как я мог знать всех других пользователей sudoer?
Если просто необходимо перечислить sudoers, перечисленный в sudo
группа, я думаю, что лучший способ сделать это состоял бы в том, чтобы выполнить эту команду (который должен быть в вычислительном отношении легче, чем любая из других команд в этом ответе):
grep -Po '^sudo.+:\K.*
: делаетТакже, как предложено в комментариях muru, формат записей в
/etc/group
может быть легко обработанcut
:grep '^sudo:.*
: делаетТакже снова, как предложено в комментариях muru, можно использовать
getent
вместоgrep
:getent group sudo | cut -d: -f4
Любая из этих команд распечатает всех пользователей, перечисленных в
sudo
группа в/etc/group
(если таковые имеются).разбивка Команда № 1:
grep
: Печать все строки, соответствующие regex в файле-P
: делаетgrep
стиль Perl regexeso
соответствия: делаетgrep
печать только совпавшая строка'^sudo.+:\K.*: делает
grep
, соответствуют regex между кавычкамиразбивка Regex № 1:
- Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
^
: запустите строки.+
: один или несколько символов\K
: отбросьте предыдущее соответствие.*
: нуль или больше символов$
: конец строкиразбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле'^sudo.+:\K.*: делает
grep
, соответствуют regex между кавычкамиcut
: Печать только указанный раздел каждой строки в файле-d:
: делаетcut
, интерпретируют:
как разделитель полей-f4
: делаетcut
печать только четвертое полеразбивка Regex № 2:
- Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
^
: запустите строки.*
: нуль или больше символов$
: конец строкиgrep
, соответствуют regex между кавычкамиcut
: Печать только указанный раздел каждой строки в файле-d:
: делаетcut
, интерпретируют:
как разделитель полей-f4
: делаетcut
печать только четвертое полеразбивка Regex № 2:
- Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
^
: запустите строки.*
: нуль или больше символов$
: конец строкиgrep
, соответствуют regex между кавычкамиразбивка Regex № 1:
^
: запустите строки .+
: один или несколько символов \K
: отбросьте предыдущее соответствие .*
: нуль или больше символов $
: конец строки разбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки Также снова, как предложено в комментариях muru, можно использовать getent
вместо grep
:
getent group sudo | cut -d: -f4
Любая из этих команд распечатает всех пользователей, перечисленных в sudo
группа в /etc/group
(если таковые имеются).
разбивка Команда № 1:
grep
: Печать все строки, соответствующие regex в файле -P
: делает grep
стиль Perl regexes o
соответствия: делает grep
печать только совпавшая строка '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
разбивка Regex № 1:
^
: запустите строки .+
: один или несколько символов \K
: отбросьте предыдущее соответствие .*
: нуль или больше символов $
: конец строки разбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками разбивка Regex № 1:
^
: запустите строки .+
: один или несколько символов \K
: отбросьте предыдущее соответствие .*
: нуль или больше символов $
: конец строки разбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки Также, как предложено в комментариях muru, формат записей в /etc/group
может быть легко обработан cut
:
grep '^sudo:.*
: делаетТакже снова, как предложено в комментариях muru, можно использовать
getent
вместоgrep
:getent group sudo | cut -d: -f4
Любая из этих команд распечатает всех пользователей, перечисленных в
sudo
группа в/etc/group
(если таковые имеются).разбивка Команда № 1:
grep
: Печать все строки, соответствующие regex в файле-P
: делаетgrep
стиль Perl regexeso
соответствия: делаетgrep
печать только совпавшая строка'^sudo.+:\K.*: делает
grep
, соответствуют regex между кавычкамиразбивка Regex № 1:
- Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
^
: запустите строки.+
: один или несколько символов\K
: отбросьте предыдущее соответствие.*
: нуль или больше символов$
: конец строкиразбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле'^sudo.+:\K.*: делает
grep
, соответствуют regex между кавычкамиcut
: Печать только указанный раздел каждой строки в файле-d:
: делаетcut
, интерпретируют:
как разделитель полей-f4
: делаетcut
печать только четвертое полеразбивка Regex № 2:
- Любой символ или группа символов не перечисленные соответствия символ или группа символов сама
^
: запустите строки.*
: нуль или больше символов$
: конец строкиgrep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками разбивка Regex № 1:
^
: запустите строки .+
: один или несколько символов \K
: отбросьте предыдущее соответствие .*
: нуль или больше символов $
: конец строки разбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки Также снова, как предложено в комментариях muru, можно использовать getent
вместо grep
:
getent group sudo | cut -d: -f4
Любая из этих команд распечатает всех пользователей, перечисленных в sudo
группа в /etc/group
(если таковые имеются).
разбивка Команда № 1:
grep
: Печать все строки, соответствующие regex в файле -P
: делает grep
стиль Perl regexes o
соответствия: делает grep
печать только совпавшая строка '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
разбивка Regex № 1:
^
: запустите строки .+
: один или несколько символов \K
: отбросьте предыдущее соответствие .*
: нуль или больше символов $
: конец строки разбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками разбивка Regex № 1:
^
: запустите строки .+
: один или несколько символов \K
: отбросьте предыдущее соответствие .*
: нуль или больше символов $
: конец строки разбивка Команда № 2:
grep
: Печать все строки, соответствующие regex в файле '^sudo.+:\K.*: делает grep
, соответствуют regex между кавычками
cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки grep
, соответствуют regex между кавычками cut
: Печать только указанный раздел каждой строки в файле -d:
: делает cut
, интерпретируют :
как разделитель полей -f4
: делает cut
печать только четвертое поле разбивка Regex № 2:
^
: запустите строки .*
: нуль или больше символов $
: конец строки Эта команда возвращает список пользователей с 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
Как это было уже указано, ответ может быть найден на Unix & Exchange Стопки Linux:
Это показывает, что пользователь "saml" является членом группы колеса.
$ getent group wheel wheel:x:10:saml
единственная разница - то, что группа в Ubuntu не wheel
, но sudo
(или admin
в более старых версиях Ubuntu). Таким образом, команда становится:
getent group sudo
Подробно останавливаясь эти 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
не возвращает ненулевое значение выхода, которое мы могли использовать в своих интересах, таким образом, мы уменьшаемся до захвата вывода.
Как это указало здесь , я рассматриваю simpliest способ обнаружить с -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
на localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
В большинстве подобных Unix систем, которые имеют команду sudo и имеют sudo конфигурационный файл; выполнение visudo как корень:
:~$ sudo bash
или
:~$ su
:~# visudo
позволит администратору осматривать и исправлять полномочия групп, которые могут использовать команду sudo.
На Debian основывал подобные Unix системы, как Ubuntu, у групп 4 и 27 обычно есть права доступа к sudo полномочиям.
Группа 4 является группой администраторов (adm), и группа 27 является sudo ценурозом.
Для наблюдения, какие пользователи в настоящее время присваиваются этим группам кошка/etc/group файл как показано ниже:
:~$ cat /etc/group
демонстрационный вывод А, на Ubuntu (но не базирующийся Redhat, Oracle Солярис/Солярис, базирующийся, или 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, которая является ценурозом (идентификация группы) количество группы sudo. Таким образом, mybrother может также достигнуть полномочий пользователя root (суперпользователь).
Много систем Linux как Fedora и Slackware, включите группу gid=10 колеса. Который позволяет права администратора, когда команда sudo применяется. В базирующихся системах BSD (например, FreeBSD), пользователь root является членом группы колеса, которая является ценурозом 0.
Также при помощи идентификатора управляют, чтобы любой пользователь мог найти информацию о группе другого известного пользователя к системе.
, Например:
:~$ id mybrother
Образец произвел
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Я был озадачен о том, как vagrant
пользователь может использовать sudo
даже, не будучи упомянутым в /etc/sudoers
, ни в /etc/group
, ни найденный с getent
.
Складывается sudo
также записи чтений из всех файлов под /etc/sudoers.d/
. Таким образом, если Вы не просмотрели тот каталог, Вы не можете понять, сколько пользователи на самом деле имеют sudo
доступ.
Этот вид sudo
доступ может быть обнаружен ответом JoKeR с помощью sudo -l -U vagrant
, но не обнаруживается ни одним из других ответов здесь, на которые все полагаются или getent
или /etc/group
.
Команда:
cat /etc/group | grep sudo
Вывод:
sudo:x:27:Tom,Stacy
Tom, Stacy является пользователями с sudo полномочиями.
На основе ответов @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
[Ссылка: 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 ]