9 Answers
If you just need to list the sudoers listed in the sudo
group, I think that the best way to do it would be to run this command (which should be computationally lighter than any of the other commands in this answer):
grep -Po '^sudo.+:\K.*$' /etc/group
Also as suggested in the comments by muru, the format of the entries in /etc/group
can be easily handled by cut
:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Also again as suggested in the comments by muru, one can use getent
in place of grep
:
getent group sudo | cut -d: -f4
Any of these commands will print all the users listed in the sudo
group in /etc/group
(if any).
Command #1 breakdown:
grep
: Prints all the lines matching a regex in a file-P
: makesgrep
match Perl-style regexeso
: makesgrep
print only the matched string'^sudo.+:\K.*$'
: makesgrep
match the regex between the quotes
Regex #1 breakdown:
- Any character or group of characters not listed matches the character or the group of characters itself
^
: start of line.+
: one or more characters\K
: discard the previous match.*
: zero or more characters$
: end of line
Command #2 breakdown:
grep
: Prints all the lines matching a regex in a file'^sudo.+:\K.*$'
: makesgrep
match the regex between the quotescut
: Prints only a specified section of each line in a file-d:
: makescut
interpret:
as a field delimiter-f4
: makescut
print only the fourth field
Regex #2 breakdown:
- Any character or group of characters not listed matches the character or the group of characters itself
^
: start of line.*
: zero or more characters$
: end of line
As it stated here I consider the simpliest way to discover with -l
& -U
options together, just type users
it will list e.g.: John
then:
If the user has sudo
access, it will print the level of sudo
access for that particular user:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
If the user don't have sudo access, it will print that a user is not allowed to run sudo
on localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
getent group sudo | cut -d: -f4
, or use awk, but either way remember that group and passwd have fixed formats, with delimiters.getent group
- you don't need the grep at all.getent group foo
is likegrep foo /etc/group
, but more capable.getent
at all, any tought on howgrep
andgetent
compare computationally? Would it be lighter to rungetent
?sudo
group. Some unixes have other groups such aswheel
. The answer by @muru will include all sudoers no matter what groups they are in.