Eu quero um comando para listar todos os usuários que têm privilégios de root, ou seja, sudo?
Suponha que eu seja um usuário sudoer. Como eu pude conhecer todos os outros usuários de sudoer?
Eu quero um comando para listar todos os usuários que têm privilégios de root, ou seja, sudo?
Suponha que eu seja um usuário sudoer. Como eu pude conhecer todos os outros usuários de sudoer?
Respostas:
Se você apenas precisar listar os sudoers listados no sudo
grupo, acho que a melhor maneira de fazer isso seria executar este comando (que deve ser computacionalmente mais leve do que qualquer outro comando nesta resposta):
grep -Po '^sudo.+:\K.*$' /etc/group
Também conforme sugerido nos comentários de muru, o formato das entradas em /etc/group
pode ser facilmente manipulado por cut
:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Também de novo, como sugerido nos comentários de muru, pode-se usar getent
no lugar de grep
:
getent group sudo | cut -d: -f4
Qualquer um desses comandos imprimirá todos os usuários listados no sudo
grupo em /etc/group
(se houver).
Repartição do comando nº 1:
grep
: Imprime todas as linhas correspondentes a uma regex em um arquivo-P
: faz grep
corresponder às expressões regulares ao estilo Perlo
: faz grep
imprimir apenas a sequência correspondente'^sudo.+:\K.*$'
: faz grep
corresponder o regex entre aspasRepartição Regex # 1:
^
: início da linha.+
: um ou mais caracteres\K
: descartar a partida anterior.*
: zero ou mais caracteres$
: fim da linhaRepartição do comando nº 2:
grep
: Imprime todas as linhas correspondentes a uma regex em um arquivo'^sudo.+:\K.*$'
: faz grep
corresponder o regex entre aspascut
: Imprime apenas uma seção especificada de cada linha em um arquivo-d:
: faz cut
interpretar :
como um delimitador de campo-f4
: cut
imprime apenas o quarto campoRepartição da Regex # 2:
^
: início da linha.*
: zero ou mais caracteres$
: fim da linhagetent group sudo | cut -d: -f4
, ou use awk, mas lembre-se de que o grupo e a senha têm formatos fixos, com delimitadores.
getent group
- você não precisa do grep. getent group foo
é como grep foo /etc/group
, mas mais capaz.
getent
, pensou em como grep
e getent
comparar computacionalmente? Seria mais leve correr getent
?
sudo
grupo. Alguns unixes têm outros grupos, como wheel
. A resposta por @muru incluirá todos sudoers não importa o que os grupos em que estão.
Como foi declarado aqui , considero a maneira mais simples de descobrir juntos com o -l
& -U
options, basta digitar users
; por exemplo John
:
Se o usuário tiver sudo
acesso, ele imprimirá o nível de sudo
acesso para esse usuário específico:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Se o usuário não tiver acesso ao sudo, será impresso que o usuário não tem permissão para executar sudo
no localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
"%domain admins@mycompany.intra" ALL=(ALL) ALL
isso funciona. Você me salvou muito tempo, porque eu não sabia que isso também funciona para usuários não locais.
Como já foi afirmado, a resposta pode ser encontrada no Unix e Linux Stack Exchange :
Isso mostra que o usuário "saml" é um membro do grupo de roda.
$ getent group wheel wheel:x:10:saml
A única diferença é que o grupo no Ubuntu não é wheel
, mas sudo
(ou admin
em versões mais antigas do Ubuntu). Então o comando se torna:
getent group sudo
geten group
e vejo muitos números diferentes. Minha pergunta original é: como descobrir se um usuário é um usuário do sistema (criado com useradd -r
)
Expandindo no sudo -l -U
teste, pode-se usar getent passwd
para determinar os usuários que podem usar sudo
. O uso getent
permite acessar usuários que podem não estar presentes no passwd
arquivo, como usuários LDAP:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U
não retorna um valor de saída diferente de zero do qual poderíamos tirar proveito; portanto, somos reduzidos a receber a saída.
sudo
.
Na maioria dos sistemas Unix, que possuem o comando sudo e um arquivo de configuração sudo; executando visudo como root:
:~$ sudo bash
ou
:~$ su
:~# visudo
permitirá que um administrador inspecione e altere os privilégios de grupos que podem usar o comando sudo.
Nos sistemas Unix, como o Ubuntu, como o Ubuntu, os grupos 4 e 27 geralmente têm direitos de acesso aos privilégios sudo.
O grupo 4 é o grupo de administradores (adm) e o grupo 27 é o sudo gid.
Para ver quais usuários estão atualmente atribuídos a esses grupos, clique no arquivo / etc / group, como mostrado abaixo:
:~$ cat /etc/group
Uma saída de amostra, no Ubuntu (mas não nos sistemas Redhat, Oracle Solaris / Solaris ou BSD), produziria o seguinte:
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
Como podemos ver, o seu usuário é o administrador do sistema e membro do grupo 4 (adm). Mas youruser e mybrother são membros do grupo 27, que é o número gid (identificação do grupo) do sudo do grupo. Portanto, meu irmão também pode obter privilégios de root (superusuário).
Muitos sistemas linux como o Fedora e o Slackware incorporam o grupo de roda gid = 10. O que permite privilégios de administrador quando o comando sudo é aplicado. Em sistemas baseados em BSD (por exemplo, FreeBSD), o usuário root é um membro do grupo wheel que é gid 0.
Além disso, usando o comando id, qualquer usuário pode encontrar as informações do grupo de outro usuário conhecido no sistema.
Por exemplo:
:~$ id mybrother
Saída de amostra
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Este comando retorna uma lista de usuários com direitos sudo:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
A saída é (por exemplo):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
Se apenas o nome do usuário for exibido, este comando:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
Comando:
cat /etc/group | grep sudo
Resultado:
sudo:x:27:Tom,Stacy
Tom, Stacy são os usuários com privilégios de sudo.
cat
.
Eu estava perplexo sobre como o vagrant
usuário pode usar sudo
, mesmo sem ser mencionado em /etc/sudoers
nem em /etc/group
nem encontrado com getent
.
Acontece que sudo
também lê entradas de todos os arquivos em/etc/sudoers.d/
. Portanto, se você não consultou esse diretório, pode não perceber quantos usuários realmente têm sudo
acesso.
Esse tipo de sudo
acesso pode ser detectado pela resposta do JoKeR usando, sudo -l -U vagrant
mas não é detectado por nenhuma das outras respostas aqui, nas quais todos dependem de um getent
ou de outro /etc/group
.