¿Cómo evitar que un usuario de sudo vea los datos de otros usuarios de sudo?

¿Cómo evitar que un usuario de sudo vea los datos de otros usuarios de sudo?

Soy nuevo en Linux (Ubuntu si eso importa). Mi empresa tiene varios usuarios de sudo en una máquina. La situación es así:

  1. Todo el mundo quiere privilegios de usuario de sudo porque afirman que necesitan instalar paquetes de Python durante su trabajo (son ingenieros de inteligencia artificial)

  2. Cada usuario guarda claves rsa privadas en su carpeta de inicio para extraerlas o enviarlas rápidamente a github.

Entonces, en teoría, si un usuario de sudo se vuelve rojo, puede simplemente tomar la clave privada de todos, imponerla y extraer el código fuente al que no tiene derecho. ¿Cómo evito que eso suceda?

Gracias

Respuesta1

No te estoy dando una respuesta directa a tu pregunta, ya que estás describiendo unaproblema xy. Este es tu subyacente,actualproblema:

Todo el mundo quiere privilegios de usuario de sudo porque afirman que necesitan instalar paquetes de Python durante su trabajo.

El problema es este:nadie necesita usarlo sudopara instalar paquetes de Python.De hecho, eso es muy desaconsejable. Especialmente si hay varias personas usando el mismo sistema, no se puede evitar que alguien juegue con paquetes a nivel de sistema que otros puedan necesitar. ¿Qué pasa si hay conflictos de versiones, cambios importantes en algunos paquetes, etc.?

Solución 1: instalaciones a nivel de usuario

La verdadera solución es utilizar instalaciones de paquetes de Python a nivel de usuario. Es decir, en lugar de sudo pip install …hacer:

pip install --user pandas

Esto instalará el paquete en el directorio de inicio del usuario respectivo y dejará la biblioteca de paquetes del sistema en paz.

No puedo enfatizar esto lo suficiente: nada bueno resulta de sudousar pip.

Solución 2: Pipenv o poesía

Una solución aún mejor implicausandopipenvopoetry, que crean un entorno virtual para que vivan los paquetes.

Los paquetes y las versiones pueden incluso ser diferentes para diferentes proyectos; esto es particularmente importante si necesita que un paquete permanezca en una versión determinada por un tiempo (por ejemplo, pandases conocido por cambiar su API; scipyha tenido algunos cambios importantes hace un tiempo,...) .

Habría recomendado Pipenv, pero a partir de 2020, el mantenimiento ha sido bastante deficiente y no ha habido ningún lanzamiento en mucho tiempo.

Para usar Poetry, simplemente instálalo a nivel de usuario:

pip install --user poetry

Luego inicialice un nuevo entorno para el proyecto actual:

cd /path/to/project
poetry install pandas

Esto creará un nuevo archivo de configuración de Poetry que especifica los requisitos para el proyecto actual. Corre poetrypara saber más o leer la documentación.

Solución 3 -pyenv

La mejor manera de hacerlo sería hacer que los usuarios instalen su propia versión de Python. Puedes usarpyenvpara crear instalaciones a nivel de usuario de distribuciones completas de Python. De esta manera, los usuarios pueden usar cualquier versión de Python con la que se inicializó su proyecto Pipenv, por ejemplo, permanecer en 3.7 por un tiempo hasta que quieran actualizar a 3.8.

Esto es particularmente bueno si no desea dañar los paquetes de todos al realizar una actualización menor a nivel del sistema de Python, en caso de que alguna vez sea necesaria.


En pocas palabras: no dé acceso sudo a los usuarios habituales si no es necesario. Pídales que utilicen su propio espacio de usuario para instalar Python y/o paquetes de Python.

Advertencia: algunos paquetes de Python pueden necesitar bibliotecas específicas para poder compilarse correctamente. Realmente no se pueden evitar las instalaciones de estas bibliotecas a nivel de sistema, pero en casos tan raros, un administrador podría estar dispuesto a sudo apt install …cualquier biblioteca que sea necesaria.

Respuesta2

Presumiblemente, los desarrolladores de Python se están conectando a esta máquina de forma remota sshen lugar de iniciar sesión directamente en la consola.

En ese caso, entonces sus claves privadas.no debeestar en la máquina compartida, precisamente por esta razón. En su lugar, deben ejecutarse ssh-agenten sus máquinas locales y conectarse a la máquina compartida usando ssh -A(o configurar ForwardAgent yespara ese host en ~/.ssh/config) y mantener las claves privadas solo en sus máquinas locales. El uso ssh-agentde un reenvío de agentes hará que la máquina remota (compartida) reenvíe de forma segura las solicitudes de autenticación (como desde github) a la ssh-agentmáquina local del usuario, donde se realizará la autenticación RSA sin tener que revelar la clave privada del usuario a nadie. host que no sea su máquina local.

(Si la máquina local ejecuta Windows en lugar de una variante de Linux/Unix, entonces el cliente ssh de Windows aún debería proporcionar el reenvío del agente ssh de alguna manera, pero no sé cómo se accedería. Consulte su documentación para obtener más detalles).

Respuesta3

La solución sería dar permiso a los desarrolladores de Python para sudo solo los comandos que realmente necesitan. Los comandos permitidos están completamente especificados, incluidos los argumentos, y son posibles los comodines.

La siguiente es una respuesta de la publicación de Unix Stackexchange
Cómo ejecutar de forma remota el comando ssh un comando sudo sin contraseña.

puedes decirle a Sudo que omita la contraseña de algún comando.

por ejemplo en/etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

esto me permite usar

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

como archemar sin contraseña.

Tenga en cuenta que

sudo -u www-data rm -rf /var/www/log/upload.*

no funcionará (le pedirá una contraseña) a rmdiferencia de /bin/rm.

Asegúrese de editar /etc/sudoersusando visudoel comando.

Una vez que haya alcanzado el nivel avanzado, es posible que desee tener sus propios sudoarchivos en formato /etc/sudoers.d.

información relacionada