¿Cómo evitar que un usuario inicie sesión, pero permitir "su - user" en Linux?

93

¿Cómo permite que un usuario inicie sesión con " su - usuario " pero evita que el usuario inicie sesión con SSH?

Traté de configurar el shell, /bin/falsepero cuando lo intento suno funciona.

¿Hay varias formas de permitir solo inicios de sesión su?

¿Es SSH AllowUserel camino a seguir? (¿Cómo haría esto si es el camino a seguir?)

NoozNooz42
fuente

Respuestas:

113

Puede usar AllowUsers / AllowGroups si solo tiene unos pocos usuarios / grupos que pueden iniciar sesión a través de ssh o DenyUsers / DenyGroups si solo tiene unos pocos usuarios / grupos que no pueden iniciar sesión. Tenga en cuenta que esto solo restringe el inicio de sesión a través de ssh, aún son posibles otras formas de inicio de sesión (consola, ftp, ...). Debe agregar estas opciones a su archivo / etc / ssh / sshd_config para la mayoría de las instalaciones ssh.

Si ha configurado el shell de inicio de sesión en / bin / false , puede usarlo su -s /bin/bash user(reemplace / bin / bash con el shell de su elección)

Florian Diesch
fuente
Muchas gracias a todos. No esperaba obtener más de 2 votos a favor en mi pregunta :) Me gusta mucho la construcción "su -s ..." y la consola / ftp es un buen punto. Realmente buscaba algo como "su -s".
NoozNooz42
3
El truco su -s es el oro. Lo uso todo el tiempo para las cuentas del sistema para las que necesito probar permisos, por ejemplo, apache, nobody, etc. Usualmente hago su - user -s / bin / bash. El argumento opcional: puede usarse para proporcionar un entorno similar al que el usuario esperaría si el usuario hubiera iniciado sesión directamente.
dmourati
2
Si necesita cargar variables de entorno (por ejemplo, desde / etc / profile), pasar un guión adicional lo hará:su - -s /bin/bash user
Leons
13

Si aún desea que su funcione, puede usar sudo -u [username]o pasar -s /bin/basha su como un shell temporal. Ambos hacen lo mismo en ausencia de un caparazón /etc/passwd.

Loke
fuente
7

Si una cuenta no tiene contraseña ( passwd -d nombre de usuario ), no pueden iniciar sesión de forma interactiva (consola, SSH, etc.). Si tienen un shell válido, su seguirá funcionando. Tenga en cuenta el "interactivamente", sin embargo; Si alguien decide configurar un par de claves SSH para la cuenta, ¡funcionará!

astrostl
fuente
¿necesita el usuario tener un shell válido para su? Estoy bastante seguro de que todavía está en el mismo shell original después de enviarle su correo a otro usuario ... en realidad, NO INICIAR SESIÓN como el otro usuario ... Entonces, simplemente configurar el shell en / dev / null podría funcionar también.
Brian Postow
Sí, todavía necesita un shell válido: [root @ localhost ~] # su daemon Esta cuenta no está disponible actualmente. [root @ localhost ~] # su - daemon Esta cuenta no está disponible actualmente. (Sistema RHEL, el caparazón del demonio es / sbin / nologin)
astrostl
3

En sshd_config agregue una línea DenyUser [username]

Tenga en cuenta que esto no impedirá que ese usuario inicie sesión a través de la consola.

Chris S
fuente
1
Eso debería ser DenyUsers, con una 's'.
David G
2

Además de lo que se mencionó anteriormente (deshabilitar y / o no configurar la contraseña del usuario), se puede usar el módulo pam_access (buscar la página man en pam_access y access.conf) para controlar el acceso de inicio de sesión.

abz
fuente
1

como otros han dicho;

DenyUser usernameo DenyGroup groupnameen sshd_configevitaría el inicio de sesión de par de claves / contraseña mediante ssh

aunque generalmente hago algo como AllowGroup ssheso, y agrego explícitamente a las personas que necesitan acceso ssh a ese grupo.

luego, puede hacer lo que otros han dicho: passwd -d usernameborrar la contraseña de los usuarios, para que no puedan iniciar sesión en la consola, o de alguna otra manera. o mejor aún passwd -l usernamepara 'bloquear' la cuenta. es posible que ssh denegue el acceso a una cuenta bloqueada, incluso con claves, pero no soy positivo.

cpbills
fuente
1
En realidad, ssh le permitirá iniciar sesión utilizando la autenticación de clave incluso cuando la contraseña de la cuenta esté bloqueada.
Richard Holloway
1

Como mencioné en un comentario, creo que aún puede ingresar a una cuenta con un shell no válido. Entonces, si configura el shell del usuario en / dev / null o lo que sea que sea el shell de bin, aún debería poder sumar a ese usuario ... pero cualquier intento de iniciar sesión de alguna manera lo cerrará de nuevo ...

Brian Postow
fuente
1

edite / etc / shadow agregando! al comienzo del hash de contraseña.

username:!<hash>:#####:#:#####:#:::

Al asegurar una nueva instalación, esto es lo primero que hago después de instalar sudo, por lo que nadie puede usar el usuario root para iniciar sesión o ssh en el sistema, los usuarios de sudo aún pueden ejecutar como usuario root.

snic.io
fuente
0

No especifique una contraseña para el usuario que no puede iniciar sesión o eliminarla.

# passwd -d myuser
François Feugeas
fuente
0

Suponiendo que solo desea su usuario de la cuenta de root y deshabilitar todos los demás accesos:

Use esto (ejecutar como root):

usermod -e 1 -L user

Esto desactiva el inicio de sesión con contraseña (como han aconsejado muchas otras respuestas), pero también caduca la cuenta . No puede iniciar sesión en una cuenta caducada, por ejemplo, con claves SSH. Aún puede su user, aunque mostrará un aviso de que la cuenta ha caducado.

artfulrobot
fuente
0

Saber qué mecanismo es mejor depende de los requisitos. Si conoce los requisitos, puede elegir el mecanismo apropiado. Todas las respuestas anteriores son válidas para algún conjunto de requisitos.

¿Solo desea restringir el acceso SSH? ¿Necesita acceso para correo o métodos ssh? ¿El acceso es solo desde la raíz?

su - userrequerirá una contraseña para el usuario si se ejecuta sea un usuario que no sea root. Sin embargo, sudo -u user -ino requiere una contraseña para el usuario.

BillThor
fuente