Linux: ni chsh ni ypchsh están funcionando, ¿puedo cambiar mi shell?

8

Soy un tipo de Unix de la vieja escuela, por lo que mis habilidades con Linux probablemente estén un poco desactualizadas. Pero esto parece que debería ser lo suficientemente simple.

En un sistema Red Hat Linux donde no tengo root (lo administra el departamento de TI de la compañía), quiero poder cambiar mi shell de inicio de sesión. Ejecutar chsh me da:

$ chsh -s /bin/bash
chsh: can only change local entries; use ypchsh instead.

Entonces, ejecuté ypchsh en su lugar:

$ ypchsh userid
ypchsh: can't find the master ypserver: Internal NIS error

¿Lo que da? ¿Alguien tiene alguna otra idea?

Salmo de ogro33
fuente
3
¿Estás realmente usando NIS? ¿O es algo así como LDAP?
Ignacio Vazquez-Abrams
Estoy bastante seguro de que nuestra red está utilizando LDAP, ya que NIS es bastante anticuado en este momento.
Ogre Psalm33

Respuestas:

8
  • NIS: ypchsh

  • LDAP:

    $ ldapmodify <<EOF
    dn: YOUR_DN
    changetype: modify
    replace: loginShell
    loginShell: /bin/bash
    -
    EOF
    

    ( YOUR_DN puede estar en el formulario uid=$USER,ou=people,dc=example,dc=org; intente ldapwhoamiver)

  • Hesiod: Pregunte al administrador del sistema.

  • Active Directory : pregunte al administrador del sistema.

usuario1686
fuente
Un compañero de trabajo me dijo que pensaba que era LDAP, pero ldapwhoami proporciona "ldap_sasl_interactive_bind_s: Método de autenticación desconocido (-6) información adicional: SASL (-4): sin mecanismo disponible:", así que supongo que Active Directory en este momento. Tendré que preguntarlo.
Ogre Psalm33
@Ogre: Marque /etc/nsswitch.conf (línea 'passwd') para asegurarse.
user1686
5

He usado una solución alternativa para cambiar mi shell al iniciar sesión. Acabo de poner bashcuál se usa para cambiar el shell en mi .profilearchivo.

Puede encontrarlo .profileen el directorio de inicio del usuario; use ls -lapara verlo.

Su .profilearchivo puede tener algo como esto:

PATH=/usr/bin
export PATH
#Add this to go bash at login
bash
#end
Kishor Raskar
fuente
77
Esta es una solución justa. Sin embargo, sería más fácil tener solo / usr / bin / bash en una sola línea. Además, probablemente sea mejor 'ejecutar' el nuevo shell, reemplazando así el proceso actual.
Peter Jenkins el
Hago lo mismo con .shellrc(cambiado al nombre de archivo correcto), pero también declaro una variable de entorno antes, y exec bashsolo si no está configurada, para permitir la ejecución manual del shell y evitar bucles desafortunados. Tenga en cuenta que no tiene que usar un dialecto de shell particular, ya que solo puede ejecutar un script con el shebang correcto para realizar estas operaciones.
MayeulC
4

Entonces, la respuesta real en mi caso es que los administradores del sistema (IT) desean bloquear la configuración estándar, por lo que debe preguntarles. Pero en el proceso descubrí algunos comandos más útiles para averiguar su configuración LDAP (si así es como está configurado), en caso de que su sistema informe el mismo error SASL "ldap_sasl_interactive_bind_s: Método de autenticación desconocido (-6) información adicional : SASL (-4): sin mecanismo disponible: "

Enumere los métodos de autenticación SASL que admite su sistema:

 ldapsearch -x -LLL -s "base" -b "" supportedSASLMechanisms

Los resultados pueden ser algo como:

dn:
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: DIGEST-MD5

Luego puede pasar el método de autenticación a los comandos LDAP utilizando la opción -Y de esta manera:

ldappasswd -Y DIGEST-MD5
ldapmodify -Y DIGEST-MD5
Salmo de ogro33
fuente
4

Otra solución es simplemente anular su shell YP:

Agregue esta línea a su /etc/passwd:

+<USERNAME>::::::/bin/bash

Ejemplo:

+psalm33::::::/bin/bash

Y agregue lo siguiente a su /etc/nsswitch.conf:

passwd: compat

passwd_compat: nis
Hooman
fuente
Como dije, no tengo root en mi sistema (por lo que los archivos en / etc están fuera de los límites de edición). Pero, esta respuesta podría ayudar a alguien más con un problema similar.
Ogre Psalm33
0

Otra forma de ver las credenciales para la respuesta principal es ldapsearch -x

ldapsearch -x uid=$(whoami)
serv-inc
fuente