¿Cómo ejecutar un comando como un usuario cuyo inicio de sesión está deshabilitado?

20

Intento usar el comando su para ejecutar una aplicación como otro usuario

En este caso, estoy intentando ejecutar irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Ejecuto gksu y establezco los mismos parámetros y funciona, y no me pide la contraseña del usuario. ¿Cual es el problema? ¿Y cómo lo resuelvo?

Debo señalar que el usuario fue creado así

adduser --system --disabled-login [username]

si hace alguna diferencia ... suspiro.

    
pregunta user123361 15.01.2013 - 06:53

1 respuesta

27
  

Esta respuesta aún debería ayudarlo, incluso tomando las modificaciones al   pregunta en cuenta. En particular, una cuenta creada con    --disabled-login no tiene contraseña establecida y no hay otro medio de registro   en , pero igual debería ser posible usar sudo (explicado a continuación)   para ejecutar comandos o un shell como el usuario. Esto es, de hecho, cómo   La cuenta root está configurada en Ubuntu.

Hay varios problemas con el comando su - irssi .

Este comando intenta iniciar un shell propiedad de un usuario llamado irssi .

Fallará si:

  • No hay irssi usuario.
  • La cuenta del usuario irssi está deshabilitada.
  • La cuenta del usuario irssi está deshabilitada para el inicio de sesión interactivo. A veces, una cuenta puede usar servicios como FTP, pero se le prohíbe iniciar sesión normalmente estableciendo su shell en algo que se cierre inmediatamente, como /bin/false . Luego, un inicio de sesión termina inmediatamente, sin mensaje.
  • La contraseña que ingresa no es correcta para el usuario irssi .

El indicador - lo hace para que el shell simule un shell de inicio de sesión inicial, es decir, es muy parecido a iniciar sesión como irssi . Sin el indicador - , si el comando su tuviera éxito, aún obtendría un shell propiedad de irssi , pero las variables de entorno como HOME no se modificarían.

Si en su lugar desea ejecutar un programa llamado irssi , debe invocar su de manera diferente:

su username - -c irssi

Si omite -c username , es lo mismo que -c root - intenta ejecutar el comando como root.

Alternativamente, puede iniciar un shell y luego ejecutar el comando :

  1. Inicia el shell con su username - .
  2. En el shell, ejecute el comando ( irssi ).
  3. Si terminaste, abandona el shell ejecutando exit .

Ejecutando Comandos como root

Si quieres ejecutar irssi como root , su no es la forma de hacerlo. Los inicios de sesión de raíz están deshabilitados de forma predeterminada en Ubuntu, y rara vez hay alguna razón para volver a habilitarlos . Si ha habilitado root login, entonces debería poder usar su para convertirse en root . La razón por la que no es necesario habilitar la cuenta root es que, tanto si lo hace como si no, aún puede ejecutar comandos como root con sudo .

Cuando ejecuta comandos con sudo , ingresa su contraseña, no la contraseña del usuario bajo cuya identidad desea que se ejecute el comando . Solo los administradores pueden ejecutar comandos arbitrarios como root con sudo (a menos que reconfigure sudo para permitir que otros lo hagan, por supuesto). Por lo tanto, un usuario que no tiene permiso para administrar el sistema no puede ejecutar comandos como root con su propia contraseña.

Para ejecutar irssi como root con sudo :

sudo irssi

Y debe ingresar su contraseña cuando se le solicite, no root 's.

Excepto qué contraseña ingresa, hace lo mismo que:

su -c irssi

Excepto que la versión sudo puede tener éxito porque no requiere que se habilite la cuenta root .

Al igual que con su , puede usar sudo para ejecutar comandos como otro, no root usuario . Para ejecutar irssi como username con sudo :

sudo -u username irssi

Si desea que sudo se comporte como su - con respecto a HOME , es decir, si desea usar las variables de entorno HOME del usuario de destino, puede ejecutar sudo con el indicador -H :

sudo -H irssi
sudo -H -u username irssi

Puedes iniciar un shell completo con sudo , como puedes con su . Excepto por la contraseña que ingresó, este comando tiene el mismo efecto que su :

sudo -s

Y este comando tiene el mismo efecto que su - :

sudo -i

(El i significa shell de inicio de sesión inicial ).

También puede iniciar un shell como otro usuario:

sudo -u username -s
sudo -u username -i

Lectura adicional sobre sudo

Para obtener más información sobre sudo , consulte:

¿Por qué gksu funcionó cuando su no?

gksu probablemente funcionó ejecutando sudo .

gksu es una interfaz para ambos su y sudo .En Ubuntu, se usa de forma predeterminada sudo (ya que en Ubuntu, su normalmente no se usa para convertirse en root , y es solo una forma secundaria de convertirse en otro, no root usuarios).

Puedes hacer que gksu use su como frontend ejecutando gksu --su-mode .

Puede averiguar si gksu está en modo su o sudo y, si lo desea, cambie esta configuración ejecutando gksu-properties . Esta es una configuración por usuario.

Cuando gksu está en modo sudo , se comporta igual que gksudo .

Lectura adicional sobre gksu

Análisis posterior a la solución

Finalmente descubrió que podía ejecutar el comando necesario con:

sudo -u username irssi

(que es una de las técnicas mencionadas anteriormente)

En última instancia, informó dos datos, que son suficientes para explicar por qué fallaron otras técnicas, pero que tuvieron éxito:

  1. La cuenta username se creó con el indicador --disabled-login , lo que hace que tenga sin contraseña (y ningún otro medio de inicio de sesión). No tener contraseña no significa que sea posible iniciar sesión con una contraseña en blanco . Significa que sin contraseña es suficiente para autenticarse. En combinación con la eliminación de otros medios de autenticación, esto significa que username no puede autenticarse en absoluto.

    Así que todas las soluciones basadas en su están fuera. sudo puede funcionar, porque con sudo no se autenticará como el usuario que está a punto de suplantar. En su lugar, tiene que estar autorizado para suplantarlos, y se autentica como usted mismo. (es decir, ingrese su propia contraseña, no la de ellos).

    Es posible establecer una contraseña en la cuenta, lo que elimina esta barrera para iniciar sesión:

    sudo passwd username

    Sin embargo, podría haber una buena razón por la que el usuario no puede iniciar sesión. Por ejemplo, si este usuario tuviera permiso para iniciar sesión y registrase gráficamente, se generarían problemas graves debido a que el entorno del usuario o sus privilegios no son adecuados. ejecutando aplicaciones X11? Si este usuario puede iniciar sesión, ¿eso posibilitaría iniciar sesión remotamente como ese usuario (para las máquinas en las que ha expuesto los servicios de red)?

    Si alguna vez desea volver a desactivarlo:

    sudo passwd -dl username

    Relacionado: Volver a deshabilitar la cuenta root después de haberlo habilitado temporalmente.

  2. La cuenta username tiene /bin/false como shell de inicio de sesión.

    Cuando un intérprete de comandos como bash se ejecuta como su shell de inicio de sesión, configura su entorno y le proporciona un aviso interactivo para controlar la máquina.

    Cuando /bin/false se ejecuta, por otro lado, no hace nada , y informa falla . ( /bin/true no hace nada e informa de éxito).

    Los comandos false y true son útiles en la creación de scripts y para varios propósitos de prueba, pero también para deshabilitar una cuenta para que cuando alguien inicie sesión, su sesión de inicio de sesión termine inmediatamente. De esta forma, se puede habilitar una contraseña (u otro medio de autenticación) y las personas pueden iniciar sesión, pero no para el acceso al shell . Por ejemplo, si hay un servidor FTP, aún podrían acceder a su cuenta a través de FTP. Si hay un servidor SSH, no podrían obtener un shell a través de SSH, pero aún podrían usar sftp y scp para transferir archivos.

    Como el shell de inicio de sesión de username no funcionaba, los comandos como su username , su - username , sudo -u username -s y sudo -u username -i no funcionaron.

    Pero los comandos que no proporcionan un shell, como sudo -u username command o su username -c 'command' , aún podrían funcionar.

    Dado que se pueden ejecutar los comandos , puede cambiar el shell de inicio de sesión del usuario a algo funcional:

    sudo chsh -s /bin/bash username

    Sin embargo, esto también debe hacerse con precaución, ya que puede haber una buena razón para deshabilitar los inicios de sesión interactivos para el usuario.

Aquí, username ambos habían desactivado el shell y "disabled". La ausencia de una contraseña activa impidió que todas las soluciones basadas en su funcionaran, mientras que la ausencia de un shell de inicio de sesión interactivo activo impidió que todas las soluciones de desove de shell funcionaran (excepto invocar manualmente un shell, como sudo -u username bash ).

sudo -u username command es lo que quedó.

    
respondido por el Eliah Kagan 15.01.2013 - 07:57

Lea otras preguntas en las etiquetas