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

21

Estoy tratando de usar el comando su para ejecutar una aplicación como otro usuario

En este caso estoy tratando de 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 de 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.

user123361
fuente
¿No estás olvidando la bandera -c para lanzar irssi? (su -c irssi)
eephyne
intentó que también ... intentado mil cosas ... ¿Por qué tan difícil de runas wtf eso es exactamente como la página de hombre quiere ... pero no pasa nada grrrr
user123361
¿podría ser que irssitiene un problema y que el comando su funciona?
Nanne
¿Tiene el ´ [nombre de usuario] ´ los derechos adecuados para ejecutar irssi?
Doka

Respuestas:

28

Esta respuesta aún debería ayudarte, incluso teniendo en cuenta las ediciones de la pregunta. En particular, una cuenta creada con --disabled-loginno tiene una contraseña establecida y no hay otros medios para iniciar sesión , pero aún debería ser posible usar sudo(explicado a continuación) para ejecutar comandos o un shell como usuario. Así es, de hecho, cómo rootse configura la cuenta en Ubuntu.

Hay múltiples problemas con el comando su - irssi.

Este comando intenta iniciar un shell propiedad de un usuario llamadoirssi .

Fallará si:

  • No hay irssiusuario
  • La irssicuenta del usuario está deshabilitada.
  • La irssicuenta del usuario está deshabilitada para el inicio de sesión interactivo. A veces, una cuenta puede usar servicios como FTP, pero tiene prohibido iniciar sesión normalmente configurando su shell en algo que se cierra inmediatamente, como /bin/false. Luego, un inicio de sesión termina inmediatamente, sin mensaje.
  • La contraseña que está ingresando no es correcta para el irssiusuario.

El -indicador hace que el shell simule un shell de inicio de sesión inicial, es decir, realmente es muy parecido a iniciar sesión como irssi. Sin la -bandera, si el sucomando tuvo éxito, todavía obtendría un shell irssi, pero las variables de entorno no HOMEcambiarían.

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

su username - -c irssi

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

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

  1. Comience la cáscara con .su username -
  2. En el shell, ejecute el comando ( irssi).
  3. Si ya terminaste, deja el shell corriendo exit.

Ejecutando comandos como root

Si quieres correr irssicomo root, suno es la forma de hacerlo. Los inicios de sesión raíz están deshabilitados de manera predeterminada en Ubuntu, y rara vez hay alguna razón para volver a habilitarlos . Si ha habilitado el rootinicio de sesión, entonces debería poder usar supara convertirse root. La razón por la que no es necesario habilitar la rootcuenta es que, lo hagas o no, aún puedes ejecutar comandos como rootcon 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 rootcon sudo(a menos que reconfigure sudopara 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 rootcon su propia contraseña.

Para correr irssicomo rootcon sudo:

sudo irssi

Y usted ingresaría su contraseña cuando se le solicite, no rootla de.

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

su -c irssi

Excepto que la sudoversión puede tener éxito porque no requiere que la rootcuenta esté habilitada.

Al igual que con su, puede usar sudopara ejecutar comandos como otro, no rootusuario . Para correr irssicomo usernamecon sudo:

sudo -u username irssi

Si desea sudo comportarse como su -con respecto aHOME , es decir, desea utilizar las HOMEvariables de entorno del usuario objetivo , puede ejecutar sudocon el -Hindicador:

sudo -H irssi
sudo -H -u username irssi

Puede comenzar un shell completo con sudo, como puede hacerlo 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

( iSignifica el 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ónsudo , eche un vistazo a:

¿Por qué gksufuncionó cuando suno?

gksuProbablemente funcionó corriendosudo .

gksues una interfaz para ambos su y sudo. En Ubuntu, el uso predeterminado es sudo(ya que en Ubuntu, sugeneralmente no se usa para convertirse root, y es solo una forma secundaria de convertirse en otros, no rootusuarios).

Puede gksuutilizarlo sucomo interfaz de usuario ejecutando gksu --su-mode.

Puede averiguar si gksuestá en sumodo o sudomodo, y (si lo desea) cambiar esta configuración, ejecutando gksu-properties. Esta es una configuración por usuario.

Cuando gksuestá en sudomodo, 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

(Cuál es una de las técnicas mencionadas anteriormente).

Finalmente, usted reportó dos datos, que son suficientes para explicar por qué otras técnicas fallaron, pero tuvieron éxito:

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

    Entonces, todas las susoluciones basadas están fuera. sudoSin embargo, puede funcionar, porque con sudousted no se autentica como el usuario que está a punto de suplantar. En cambio, tiene que estar autorizado para hacerse pasar por ellos y autenticarse 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, puede haber una buena razón por la cual el usuario no tiene permiso para iniciar sesión. Por ejemplo, si a este usuario se le permitiera iniciar sesión e iniciar sesión gráficamente, surgirían problemas graves si el entorno del usuario o los privilegios no son adecuados para ejecutar aplicaciones X11 ? Si este usuario pudiera iniciar sesión, ¿eso permitiría iniciar sesión de forma remota como ese usuario (para máquinas donde haya expuesto servicios de red)?

    Si alguna vez quieres volver a desactivarlo:

    sudo passwd -dl username

    Relacionado: Rehabilitar la rootcuenta después de haberla habilitado temporalmente.

  2. La usernamecuenta tiene /bin/falsecomo shell de inicio de sesión.

    Cuando un shell como se bashejecuta como su shell de inicio de sesión, configura su entorno y le ofrece un mensaje interactivo con el que controlar la máquina.

    Cuando se /bin/falseejecuta, por otro lado, no hace nada y reporta fallas . ( /bin/trueno hace nada e informa el éxito)

    Los comandos falsey trueson útiles en las secuencias de comandos y para diversos fines 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 esa manera, se puede habilitar una contraseña (u otro medio de autenticación), y las personas pueden iniciar sesión, pero no para el acceso de 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 sftpy scptransferir archivos.

    Desde username's shell de entrada era no funcional, comandos como , , , y no podía trabajar.su usernamesu - usernamesudo -u username -ssudo -u username -i

    Pero los comandos que no dan un shell, como o podrían funcionar.sudo -u username commandsu username -c 'command'

    Como se pueden ejecutar 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í, usernameambos habían deshabilitado la contraseña y el shell "deshabilitado". La ausencia de una contraseña de trabajo impidió que todas las susoluciones basadas en el trabajo funcionen, mientras que la ausencia de un shell de inicio de sesión interactivo que funcionó impidió que todas las soluciones de generación de shell funcionen (excepto invocar manualmente un shell, como ).sudo -u username bash

sudo -u username command es lo que quedaba.

Eliah Kagan
fuente
Perdón por las muchas ediciones mientras trabajabas en tu respuesta. Guau. Gracias. Cuando hago cat / etc / passwd, el usuario que configuré tiene / bin / false al final, entonces, ¿es esto lo que está causando que falle? Alguna idea de como arreglarlo ?
user123361
Por alguna razón, usar sudo -u username irssi funciona bien. ¡Gracias por su larga y bien explicada respuesta!
user123361
@db ¡Me alegra que haya funcionado! (Por cierto, no es necesario disculparse por la edición, la edición es muy, muy buena, y su pregunta probablemente también sea útil para más personas como consecuencia de las modificaciones). En cuanto a sus otras preguntas, he editado mi respuesta a incluye una sección de análisis al final.
Eliah Kagan