Contexto
Me gusta trabajar en público en mi computadora portátil, pero también me gusta usar sudo sin contraseña. Según lo que sé ahora, usaría la NOPASSWD
opción en mi sudoers
archivo, pero, por supuesto, cualquiera podría usar sudo como lo desee.
Un pensamiento importante que me viene a la mente es que existen programas de bloqueo. Sin embargo, preferiría usar una unidad flash (y usarla solo para sudo) porque (1) es más rápida, (2) más fácil que ingresar mi contraseña y (3) No me preocupa que las personas accedan a mi contenido ni hagan maldad cosas: la computadora portátil estaría en público cerca de otras personas, y la única propiedad intelectual de mi computadora portátil es un proyecto angular muy básico.
Además, es posible que yo y otros deseemos evitar el mal uso de sudo en una computadora que no ejecuta un entorno X o Wayland. Mi trabajo actual requiere un navegador web moderno, pero si alguna vez tengo la oportunidad de no usar X y solo usar un multiplexor, lo hago: mi computadora portátil es un poco vieja y lenta.
Pregunta
Lo que me gustaría hacer es colocar un archivo clave en una unidad flash, y simplemente enchufar la unidad flash cuando esté en la computadora portátil, y sacarla cuando me aleje de ella.
Así que aquí están mis tres preguntas derivadas de este problema:
- ¿Es esto posible con sudo tal cual?
- Si no, ¿podría escribir un programa que me permita hacer esto?
- Si es así, ¿qué idioma podría ser el mejor para escribir este programa?
(4. [Quizás una pregunta extraña] ¿Podría este paquete estar separado o necesitaría ser un tenedor de sudo?)
Nota
Si es relevante, mi configuración es Arch Linux con bspwm, sin entorno de escritorio. La mayor parte de mi trabajo es desarrollo web en urxvt / vim y verificarlo con Chrome.
rootpw
bandera en los/etc/sudoers
archivos y configurando elpam_usb
inicio de sesión raíz.Respuestas:
No estoy seguro de entender por qué la
NOPASSWD
opción no satisface sus requisitos por sí sola, pero si desea requerir la presencia de la unidad flash, puedo pensar en algo que casi podría hacer lo que está buscando.Esto es más una solución alternativa, pero podría crear un usuario administrativo local, por ejemplo
superuser
, y darle a ese usuariosudo
derechos sin contraseña , es decir, agregar la siguiente línea a su/etc/sudoers
archivo:Luego puede deshabilitar el inicio de sesión con contraseña y configurar la autenticación SSH de solo clave para ese usuario, es decir, ejecutar
passwd -l superuser
y agregar la siguiente estrofa a su/etc/ssh/sshd_config
:Luego cree un par de claves SSH para este usuario. Agregue la clave pública
/home/superuser/.ssh/authorized_keys
y coloque la clave privada en su unidad flash. Luego, cuando desee utilizar lasuperuser
cuenta, conecte su unidad flash y ssh en lasuperuser
cuenta con su clave privada. ¡Y voilá! Ahora tiene sin contraseñasudo
para su usuario. Por supuesto, aún necesitará salir de sus sesiones de shell cuando haya terminado; desenchufar la unidad flash no será suficiente. Aunque supongo que también podría configurar un enlace de precomando para verificar la clave privada y salir automáticamente si no está presente (o si no es válida).fuente