14 votos

¿Cómo obtener la lista de todos los usuarios que pueden acceder a un servidor vía ssh?

¿Cómo puedo obtener la lista de todos los usuarios que pueden hacer ssh a un servidor a través de ssh username@server.domain ?

Por favor, tenga en cuenta que soy consciente de este ¡pregunta y eso no es hacer lo que quiero!

Si sirve de ayuda el servidor tiene tantos usuarios en tantos grupos diferentes y bajo el directorio de inicio hay algunos directorios de grupo y muchos directorios de usuario en esos directorios de grupo.

Editado:

Tenga en cuenta que el resultado que obtengo de /etc/passwd no es lo que quiero y es lo siguiente:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
shelladmin:x:1000:1000:shelladmin,,,:/home/shelladmin:/bin/bash
messagebus:x:104:106::/var/run/dbus:/bin/false
festival:x:105:29::/home/festival:/bin/false
ntp:x:106:108::/home/ntp:/bin/false

Esta lista ni siquiera incluye mi propio nombre de usuario, por no hablar de los otros 1000 usuarios.

Editado 2:

Así que charlé un poco con Yaron y aquí hay más información sobre el sistema:

-bash-4.2$ ls -lsa /etc/init.d/nis
ls: cannot access /etc/init.d/nis: No such file or directory
-bash-4.2$ ls -lsa /var/yp
ls: cannot access /var/yp: No such file or directory
if it helps, this is the putput of ls -lsa /var
-bash-4.2$ ls -lsa /var
total 48
4 drwxr-xr-x 12 root root 4096 Oct 25 2016 .
4 drwxr-xr-x 22 root root 4096 Oct 25 2016 ..
4 drwxr-xr-x 2 root root 4096 Oct 26 2016 backups
4 drwxr-xr-x 10 root root 4096 Oct 25 2016 cache
4 drwxr-xr-x 34 root root 4096 Oct 25 2016 lib
4 drwxrwsr-x 2 root staff 4096 May 7 2012 local
0 lrwxrwxrwx 1 root root 9 Oct 25 2016 lock -> /run/lock
4 drwxr-xr-x 9 root root 4096 Dec 10 06:25 log
4 drwxrwsr-x 2 root mail 4096 Jul 30 00:51 mail
4 drwxr-xr-x 2 root root 4096 Nov 21 2012 opt
0 lrwxrwxrwx 1 root root 4 Oct 25 2016 run -> /run
4 drwxr-xr-x 5 root root 4096 Oct 25 2016 spool
4 drwxrwxrwt 12 root root 4096 Dec 10 08:18 tmp
4 drwxr-xr-x 2 root root 4096 Feb 16 2013 www
-bash-4.2$ getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
shelladmin:x:1000:1000:shelladmin,,,:/home/shelladmin:/bin/bash
messagebus:x:104:106::/var/run/dbus:/bin/false
festival:x:105:29::/home/festival:/bin/false
ntp:x:106:108::/home/ntp:/bin/false
-bash-4.2$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd: files ldap
group: files ldap
shadow: files ldap

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis
-bash-4.2$ cd /etc/sssd/
-bash: cd: /etc/sssd/: No such file or directory

0 votos

"Y mucho menos los otros 1000 usuarios". ¿Qué otros 1000 usuarios? ¿Quién hizo estos usuarios? Si esto está en un dominio activo no podrá obtener una lista.

0 votos

Es para mi universidad. Todos los estudiantes tienen una cuenta. Por supuesto los usuarios no se crean manualmente.@Rinzwind

0 votos

como he dicho: active directory. no obtendrás una lista de usuarios del sistema de Ubuntu.

12voto

kris Puntos 186

Mi respuesta se basa en las respuestas a este Pregunta de stackoverflow.

Listado de todos los "usuarios"

Esperaba que hubiera una forma de decir, muéstrame todos los usuarios que pueden hacer ssh en mi servidor.
De lo que no me di cuenta es de que no hay una distinción entre personas-usuarios y sistema-"usuarios", así que aunque puedes listar todos los usuarios con este comando, probablemente sea mucho más largo de lo que esperabas:

cat /etc/passwd

Mostrar todos los usuarios con un Shell válido

Si el usuario Shell está configurado como /etc/false entonces no pueden conectarse, así que esto recorta la lista de posibles usuarios de ssh :

cat /etc/passwd | grep -v /bin/false

Pero sigue siendo una lista bastante grande.


Los usuarios que realmente tienen acceso

Si un usuario no tiene una contraseña válida puede ser una indicación de que no puede conectarse.
El /etc/shadow contiene las contraseñas encriptadas, un "!" o un "*" en la segunda columna de este archivo significa que no se ha establecido ninguna contraseña . Podemos filtrarlos para obtener una nueva lista (probablemente más corta) de usuarios que tienen una contraseña válida:

cat /etc/shadow | grep '^[^:]*:[^\*!]'

Detalles sobre la regex :

  1. ^ - El patrón tiene que estar al principio de la línea
  2. [^:]* - Coincidir con cualquier carácter que no sea : entre 0 y tiempo ilimitado
  3. : - Emparejar el carácter : literalmente
  4. [^\*!] - Coincidir con cualquier carácter que no sea * , ! una vez.

Tenga en cuenta que el regex se envuelve con comillas simples, esto es importante porque muchos caracteres especiales para regex son especiales para bash también (Ver parte 2 de esta respuesta )

Las únicas otras cuentas que no están cubiertas por eso sería donde tienen una clave ssh en su cuenta de usuario, por lo que también hay que mirar a los usuarios que tienen una carpeta de inicio :

ls -l /home

Restringir el acceso

OK - así que ahora tengo una lista algo limitada - y quiero eliminar el acceso de un par de cuentas.
Respuesta de @Yaron lo describe con más detalle (al igual que este ), pero brevemente; el /etc/ssh/sshd_config dice qué cuentas pueden hacer ssh, y si se pone AllowUsers en él, los demás usuarios estarán restringidos, por lo que puedes editar ese archivo para ser explícito sobre a quién quieres permitir el acceso:

vi /etc/ssh/sshd_config

Y añadir una línea que diga

AllowUsers user1 user2

Finalmente reinicie el servicio ssh

service ssh restart

(dependiendo de su sistema - ver este para el reinicio del servicio en otros sistemas)

5voto

Yaron Puntos 435

Por defecto, todos los usuarios de una máquina específica pueden iniciar sesión en esta máquina usando ssh.

Puede configurar sshd para permitir el acceso sólo a una parte de los usuarios de la máquina.

Página de manual de Ubuntu ssh Especifique que puede permitir/denegar a usuarios/grupos específicos en sshd_config — OpenSSH SSH daemon configuration file - /etc/ssh/sshd_config

  • AllowUsers Esta palabra clave puede ir seguida de una lista de patrones de nombres de usuario, separados por espacios.

  • Si se especifica, sólo se permite el inicio de sesión para los nombres de usuario que coincidan con uno de los patrones.

  • Sólo son válidos los nombres de usuario; no se reconoce un ID de usuario numérico.

  • Por defecto, se permite el acceso a todos los usuarios.

  • Si el patrón tiene la forma USER@HOST entonces USER y HOST se comprueban por separado, restringiendo el acceso a determinados usuarios desde determinados hosts.

  • Las directivas de permitir/denegar se procesan en el siguiente orden: DenegarUsuarios, PermitirUsuarios, DenegarGrupos, y finalmente AllowGroups

La lista de todos los usuarios en la máquina del servidor se puede encontrar ejecutando el siguiente comando en la máquina del servidor:

cat /etc/passwd

Según la pregunta actualizada, el /etc/passwd no contiene varios nombres de usuario. Esto puede ser el resultado de que el servidor sea parte de Servicio de Información de la Red , LDAP o SAMBA.

Para revisar todos los usuarios y grupos conocidos por su servidor, cualquiera que sea la fuente de la que procedan, es preferible que utilice la función getent comando :

getent passwd

Resumen de la discusión:

Parece que tienes LDAP en el servidor, y se definió para deshabilitar el acceso al listado de usuarios LDAP.
De lo contrario, getent passwd le mostraría el passwd archivo

0 votos

Quiero obtener la lista de todos los usuarios que pueden hacer ssh al servidor. ¡No puedo encontrar una manera de hacer esto en su respuesta!

0 votos

@aran - como escribí en mi respuesta Por defecto, se permite el acceso a todos los usuarios. es decir, todos los usuarios que tienen cuenta en el servidor pueden entrar usando ssh al servidor.

0 votos

@aran - puede limitar la cantidad de usuarios, utilizando el sshd_config parámetros de configuración: DenyUsers, AllowUsers, DenyGroups y AllowGroups - para denegar el acceso a determinados usuarios, y/o permitir el acceso sólo a determinados usuarios

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X