Pregunta Sudo como usuario diferente y pantalla en ejecución.


¡Descubrí hoy que la pantalla de funcionamiento como un usuario diferente al que me sudo no funcionará!

es decir

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails

Tengo un script que se ejecuta como el usuario "monitor". Lo ejecutamos en una sesión de pantalla para ver la salida en la pantalla. El problema es que tenemos varios usuarios que inician sesión con su propia cuenta (es decir, bob, james, susie, etc.) y luego ingresan al usuario "monitor". Darles acceso al usuario "monitor" está fuera de discusión.


150
2018-02-25 15:07


origen


¿Es este el error que está recibiendo? "No se puede abrir su terminal '/ dev / pts / 0' - por favor verifique". - Jim
Sí, esa es la una. Entiendo por qué está sucediendo, pero ¿hay alguna solución? - luckytaxi
Un comentario sobre tus comandos - Sigo viendo gente corriendo sudo su "user" -. ¿Por qué no usar sudo -u user -s? - Andrew Aylett
@Jim: +1 para proporcionar el mensaje de error que falta. - Dennis Williamson
@Andrew La mayoría de los chicos que conozco hacen sudo su - Creo que es justo a lo que la gente se acostumbra (en mi caso es porque no es necesario que conozcas ningún indicador de sudo para sudo su - No creo haber leído la página del manual de sudo :) - voretaq7


Respuestas:


Intenta correr script /dev/null como el usuario tu su Antes de lanzar la pantalla, es un pequeño truco del ghetto, pero debería hacer que la pantalla sea feliz.


220
2018-02-25 16:46



Re: implicaciones de seguridad, ninguna que yo sepa (pero eso no significa que no haya ninguna :) - IIRC se basa en un efecto secundario de "script" al abrir un nuevo dispositivo terminal (ya que el usuario lo invoca) y como está enviando la salida del script a / dev / null, no hay nada que capturar. También es definitivamente más seguro que agregar usuarios al grupo tty (IMHO) - voretaq7
@nalply Francamente, no debería encontrar múltiples shells confusos si usted es un administrador del sistema Unix - dicho esto, script se puede utilizar para lanzar screen. Entonces solo tienes que salir dos veces (una vez para screenuna vez por su). (Esto es algo script La página de manual puede aclararle si se toma el tiempo de leerlo ...) - voretaq7
O simplemente correr sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. Entonces solo tienes un terminal para salir / separar de. - Andy Shulman
Gracias, esto me salvó. Pero ¿por qué esto lo arregla? Por lo que entiendo, imprime todo, desde stdout hasta ... en ninguna parte. Y que de alguna manera arregla la pantalla. - sudo
@sudo para hacer su cosa. script abre su propio dispositivo tty, propiedad del usuario que lo ejecutó (mire en /dev y lo verás aparecer después de correr script). screen luego toma ese dispositivo tty (que es propiedad del usuario que ejecuta screen por lo que no tiene problemas para acceder a ella). Es un trabajo de hackeo total, pero funciona. Al mirar algunas de mis máquinas, parece que las nuevas versiones de la pantalla parecen instalar setuid-root, que también funciona, pero significa que tienes otro binario de setuid-root flotando alrededor, lo que hace que algunas personas se sientan incómodas con razón. - voretaq7


Estoy usando una función de envoltura alrededor screen para el usuario (s) que yo sudo su a. Esta es la función de contenedor que he agregado al usuario (s) ~/.bashrc:

pantalla de función () {
  / usr / bin / script -q -c "/ usr / bin / screen $ {*}" / dev / null
}

Esto me permite usar todas las opciones y parámetros para screen que tal vez quiera usar. Estoy contemplando poner esta función en todo el sistema.


32
2017-08-13 13:45



Funciona perfectamente. Para aquellos que desean esto en todo el sistema, recomiendo agregar esto a /etc/bash.bashrc - funciona en todos los usuarios. - Someguy123
Esto no citará los argumentos para filtrar correctamente, de lo contrario es una buena solución. - augurar


Suponiendo que sean SSHing en el host de todos modos, puede agregar las claves ssh públicas para cada usuario que necesite acceso a la cuenta de monitor en el archivo ~ monitor / .ssh / authorized_keys. Luego en la máquina remota de cada usuario pueden ejecutar

ssh -t monitor@remote.machine screen -RD


7
2018-02-25 16:52



Este es otro buen enfoque: tendría que especificar los comandos forzados en el archivo de claves autorizadas (según la nota anterior de Luckytaxi "darles acceso al usuario 'monitor' está fuera de cuestión", los comandos forzados podrían limitarlos a solo adjuntando la sesión de pantalla) - voretaq7
No estaba seguro de cómo abordar eso en mi respuesta, porque él dijo "darles acceso ... está fuera de discusión", pero también dijo "... se incorporaron al usuario 'monitor'". Pero estoy de acuerdo, forzar la restricción de comandos en el authorized_keys debería hacerse cargo de eso. - Alex


Suponiendo que estamos hablando de este error:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

Aquí hay una sola línea (podría usarse como "alias gobob", por ejemplo):

sudo su - bob -c "script -c bash /dev/null"'

Explicación:

Esto iniciará un shell (como login shell) como usuario bob. El usuario bob comienza script, que se le indica que invoque un bash (podría ser dash o ksh ...) y se tira una copia de la sesión.


6
2018-02-22 08:36





Probablemente tendría que cambiar los permisos en el dispositivo en cuestión o agregar un monitor a un grupo que tenga permiso para leer ese dispositivo, esa sería mi primera inclinación. Pero tendrías que sopesar las implicaciones de seguridad de hacerlo.


0
2018-02-25 15:51





Usted dice que lo hace:

sudo su "monitor" -

Me pregunto sobre el guión final. Por lo general hago

sudo su - username

El guión (según la página del manual) le dice a su "hacer que el shell sea un shell de inicio de sesión". Esto significa que generará todos los scripts de inicio de shell habituales y establecerá las cosas como PATH y HOME correctamente.


0
2018-02-25 18:44



No sudo su - username y sudo su username - hacer la misma cosa. - Tim Ludwinski


Acabo de golpear este problema. Resuelto con chmod +rw $(tty) antes de ejecutar sudo. El problema con esta solución es que cualquiera puede conectarse y fisgonear en su terminal después de eso.


-2
2018-06-22 02:09



Suena como una gran solución. - Evan Carroll
@EvanCarroll es una gran solución, excepto la parte donde da El mundo entero Acceso de lectura y escritura a su terminal. Solo un problema menor de seguridad: a ningún programa le importaría eso, excepto, por supuesto, cualquier cosa que compruebe la seguridad del terminal antes de aceptar contraseñas (gpg por ejemplo). Y seguramente nunca estará en un sistema con usuarios malintencionados que verían el tty y oler contraseñas ... - voretaq7
Ser advertido: nunca intentes esto en casa! ¡¡¡Esto es peligroso!!! - ruizpauker