Existem dois tipos de contas, sistema e usuário regular. As contas do sistema pertencem a serviços e daemons, como lightdm
, dnsmasq
, etc. Normalmente, você não pode fazer login nessas contas (embora haja maneiras).
Usuários comuns, como sua conta ou outras contas de pessoas, podem fazer login e interagir com o sistema operacional por meio do shell (pode ser bash
, ksh
, mksh
, csh
ou shell gráfico como Gnome
ou Unity
).
As contas do sistema variam de 100 a 999 por padrão. Existe um caso especial, nobody
, que possui ID de 65534 (esse é o número máximo de UID). No meu sistema, por exemplo dnsmasq
, ele executa dnsmasq
service.
As contas de usuário regulares têm intervalo de UID de 1.000 a 65533. Esses usuários podem efetuar login, a menos que sua senha esteja desativada ou sua entrada em /etc/passwd
tenha o shell configurado como /usr/sbin/nologin
ou seja impedida de alguma outra forma. Esses usuários podem ter privilégios de root se pertencerem a sudo
group.
Portanto, se você quiser encontrar usuários com sudo
privilege, será necessário analisar /etc/group
file. Aqui está o meu:
$ awk '/sudo/' /etc/group
sudo:x:27:xieerqi,testuser
Para obter apenas os usuários, use :
como separador e imprima o quarto campo.
$ awk -F':' '/sudo/{print $4}' /etc/group
xieerqi,testuser
Em python isso é feito assim:
>>> with open("/etc/group") as file:
... for lines in file:
... if lines.__contains__("sudo"):
... print lines.split(":")[3]
Aqui está uma abordagem ainda mais interessante. Que tal se quisermos pegar todos os sudo
usuários e ver se eles têm um shell configurado em /etc/passwd
?
$ awk -F':' '/sudo/{gsub(/\,/,"\n");print $4 }' /etc/group | xargs -I {} grep '^{}\:.*' /etc/passwd
xieerqi:x:1000:1000:xieerqi,,,:/home/xieerqi:/bin/mksh
testuser:x:1001:1001:,,,:/home/testuser:/bin/bash