Quiero un comando para enumerar todos los usuarios que tienen privilegios de root, es decir, sudo?
Supongamos que soy un usuario sudoer. ¿Cómo podría conocer a todos los demás usuarios de sudoer?
Quiero un comando para enumerar todos los usuarios que tienen privilegios de root, es decir, sudo?
Supongamos que soy un usuario sudoer. ¿Cómo podría conocer a todos los demás usuarios de sudoer?
Respuestas:
Si solo necesita enumerar los sudoers enumerados en el sudogrupo, creo que la mejor manera de hacerlo sería ejecutar este comando (que debería ser computacionalmente más ligero que cualquiera de los otros comandos en esta respuesta):
grep -Po '^sudo.+:\K.*$' /etc/group
Además, como se sugiere en los comentarios de muru, el formato de las entradas /etc/grouppuede ser manejado fácilmente por cut:
grep '^sudo:.*$' /etc/group | cut -d: -f4
También de nuevo como se sugiere en los comentarios de muru, uno puede usar getenten lugar de grep:
getent group sudo | cut -d: -f4
Cualquiera de estos comandos imprimirá a todos los usuarios enumerados en el sudogrupo /etc/group(si corresponde).
Desglose del comando n. ° 1:
grep: Imprime todas las líneas que coinciden con una expresión regular en un archivo-P: hace grepcoincidir las expresiones regulares de estilo Perlo: hace grepimprimir solo la cadena coincidente'^sudo.+:\K.*$': hace grepcoincidir la expresión regular entre las comillasDesglose de la expresión regular n. ° 1:
^: inicio de línea.+: uno o más personajes\K: descartar el partido anterior.*: cero o más caracteres$: fin de la líneaDesglose del comando n. ° 2:
grep: Imprime todas las líneas que coinciden con una expresión regular en un archivo'^sudo.+:\K.*$': hace grepcoincidir la expresión regular entre las comillascut: Imprime solo una sección específica de cada línea en un archivo-d:: hace cutinterpretar :como un delimitador de campo-f4: hace que la cutimpresión sea solo el cuarto campoDesglose de Regex # 2:
^: inicio de línea.*: cero o más caracteres$: fin de la líneagetent group sudo | cut -d: -f4, o use awk, pero recuerde que group y passwd tienen formatos fijos, con delimitadores.
getent group: no necesita el grep en absoluto. getent group fooes como grep foo /etc/group, pero más capaz.
getentnada, ¿alguna idea sobre cómo grepy cómo getentcomparar computacionalmente? ¿Sería más ligero correr getent?
sudogrupo. Algunos unixes tienen otros grupos como wheel. La respuesta de @muru incluirá a todos los sudoers sin importar en qué grupos se encuentren.
Como se indica aquí , considero la forma más sencilla de descubrir con -l& -Uopciones juntas, solo tipee una userslista, por ejemplo: Johnluego:
Si el usuario tiene sudoacceso, imprimirá el nivel de sudoacceso para ese usuario en particular:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Si el usuario no tiene acceso a sudo, se imprimirá que un usuario no puede ejecutar sudoen localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
"%domain admins@mycompany.intra" ALL=(ALL) ALLfunciona. Me ahorró mucho tiempo, porque no sabía que esto también funciona para usuarios no locales.
Como ya se ha dicho, la respuesta se puede encontrar en Unix & Linux Stack Exchange :
Esto muestra que el usuario "saml" es un miembro del grupo de ruedas.
$ getent group wheel wheel:x:10:saml
La única diferencia es que el grupo en Ubuntu no es wheel, pero sudo(o adminen versiones anteriores de Ubuntu). Entonces el comando se convierte en:
getent group sudo
geten groupy veo muchos números diferentes. Mi pregunta original es cómo averiguar si un usuario es un usuario del sistema (creado con useradd -r)
Ampliando la sudo -l -Uprueba, se puede usar getent passwdpara determinar los usuarios que pueden usar sudo. El uso getentnos permite acceder a usuarios que pueden no estar presentes en el passwdarchivo, como los usuarios LDAP:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U no devuelve un valor de salida distinto de cero que podríamos aprovechar, por lo que estamos reducidos a grep la salida.
sudo.
En la mayoría de los sistemas tipo Unix, que tienen el comando sudo y tienen un archivo de configuración sudo; ejecutando visudo como root:
:~$ sudo bash
o
:~$ su
:~# visudo
permitirá que un administrador inspeccione y modifique los privilegios de los grupos que pueden usar el comando sudo.
En los sistemas tipo Unix basados en Debian, como Ubuntu, los grupos 4 y 27 generalmente tienen derechos de acceso a los privilegios de sudo.
El grupo 4 es el grupo administrador (adm) y el grupo 27 es el sudo gid.
Para ver qué usuarios están asignados actualmente a estos grupos, busque el archivo / etc / group como se muestra a continuación:
:~$ cat /etc/group
Una salida de muestra, en Ubuntu (pero no en sistemas basados en Redhat, Oracle Solaris / Solaris o BSD) produciría esto:
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, su usuario es el administrador del sistema y miembro del grupo 4 (adm). Pero su usuario y mi hermano son miembros del grupo 27, que es el número gid (identificación del grupo) del sudo del grupo. Entonces mybrother también puede obtener privilegios de root (superusuario).
Muchos sistemas Linux como Fedora y Slackware incorporan el grupo de ruedas gid = 10. Lo que permite privilegios de administrador cuando se aplica el comando sudo. En sistemas basados en BSD (por ejemplo, FreeBSD), el usuario raíz es un miembro del grupo de rueda que es gid 0.
Además, mediante el comando id, cualquier usuario puede encontrar la información del grupo de otro usuario conocido en el sistema.
Por ejemplo:
:~$ id mybrother
Salida de muestra
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Este comando devuelve una lista de usuarios con derechos de sudo:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
La salida es (por ejemplo):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
Si solo se muestra el nombre de usuario, este comando:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
Mando:
cat /etc/group | grep sudo
Salida:
sudo:x:27:Tom,Stacy
Tom, Stacy son los usuarios con privilegios de sudo.
cat .
Yo estaba confundido acerca de cómo el vagrantusuario puede utilizar sudoincluso sin ser mencionado en /etc/sudoersni en /etc/groupni encontrado con getent.
Resulta que sudotambién lee entradas de todos los archivos en/etc/sudoers.d/ . Entonces, si no ha examinado ese directorio, es posible que no se dé cuenta de cuántos usuarios realmente tienen sudoacceso.
Este tipo de sudoacceso puede ser detectado por la respuesta de JoKeR usando, sudo -l -U vagrantpero no es detectado por ninguna de las otras respuestas aquí, en las que todos se basan getento /etc/group.