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?
command-line
sudo
Maythux
fonte
fonte
sudo
permissão e quem não tem .... se um usuário estiver nosudo
grupo, mas osudoers
arquivo não tiver nada mencionado para osudo
grupo, então?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):Também conforme sugerido nos comentários de muru, o formato das entradas em
/etc/group
pode ser facilmente manipulado porcut
:Também de novo, como sugerido nos comentários de muru, pode-se usar
getent
no lugar degrep
: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
: fazgrep
corresponder às expressões regulares ao estilo Perlo
: fazgrep
imprimir apenas a sequência correspondente'^sudo.+:\K.*$'
: fazgrep
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.*$'
: fazgrep
corresponder o regex entre aspascut
: Imprime apenas uma seção especificada de cada linha em um arquivo-d:
: fazcut
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 linhafonte
getent 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
é comogrep foo /etc/group
, mas mais capaz.getent
, pensou em comogrep
egetent
comparar computacionalmente? Seria mais leve corrergetent
?sudo
grupo. Alguns unixes têm outros grupos, comowheel
. 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 digitarusers
; por exemploJohn
:Se o usuário tiver
sudo
acesso, ele imprimirá o nível desudo
acesso para esse usuário específico: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:fonte
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done
. rápida corte nada garantido :)"%domain [email protected]" 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 :
A única diferença é que o grupo no Ubuntu não é
wheel
, massudo
(ouadmin
em versões mais antigas do Ubuntu). Então o comando se torna:fonte
geten group
e vejo muitos números diferentes. Minha pergunta original é: como descobrir se um usuário é um usuário do sistema (criado comuseradd -r
)Expandindo no
sudo -l -U
teste, pode-se usargetent passwd
para determinar os usuários que podem usarsudo
. O usogetent
permite acessar usuários que podem não estar presentes nopasswd
arquivo, como usuários LDAP: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.fonte
sudo
.Na maioria dos sistemas Unix, que possuem o comando sudo e um arquivo de configuração sudo; executando visudo como root:
ou
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:
Uma saída de amostra, no Ubuntu (mas não nos sistemas Redhat, Oracle Solaris / Solaris ou BSD), produziria o seguinte:
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:
Saída de amostra
fonte
Este comando retorna uma lista de usuários com direitos sudo:
A saída é (por exemplo):
Se apenas o nome do usuário for exibido, este comando:
fonte
Comando:
Resultado:
Tom, Stacy são os usuários com privilégios de sudo.
fonte
cat
.Eu estava perplexo sobre como o
vagrant
usuário pode usarsudo
, mesmo sem ser mencionado em/etc/sudoers
nem em/etc/group
nem encontrado comgetent
.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êmsudo
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 umgetent
ou de outro/etc/group
.fonte