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