Saltar al contenido

Bloquear un comando particular en Linux para un usuario específico

Solución:

No sé cómo hacerlo con bash, pero conozco otro shell que restringe el entorno del usuario: lshell (shell limitado).

Una descripción general rápida de la configuración

Lshell se configura mediante un archivo INI. De forma predeterminada, contiene una lista blanca de comandos permitidos, pero se puede configurar fácilmente para prohibir al usuario usar un comando específico.

Esta configuración (configuración predeterminada /etc/lshell.conf) prohíbe al usuario foo de usar mkdir:

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

Para configurar una cuenta de usuario para usar lshell de forma predeterminada, debe:

 chsh -s /usr/bin/lshell foo

Lshell puede hacer más, como:

  • 3 niveles de granularidad: usuario, grupo, todos.
  • Puede restringir el acceso a determinadas rutas del sistema.
  • Puede restringir el uso de ciertos caracteres (como |).
  • Puede restringir el uso de ciertos comandos solo a través de SSH.

Y más.

Actualización 1 # Resultado de prueba agregado:

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir

La forma en que suelo implementar este tipo de restricciones requiere que se cumplan varias condiciones, de lo contrario, la restricción se puede eludir fácilmente:

  • El usuario no pertenece al wheel grupo, el único autorizado a utilizar su (ejecutado a través de PAM).
  • El usuario recibe un seguro rbash con un PATH de solo lectura que apunta a un privado ~/bin, esta ~/bin/ El directorio contiene enlaces a utilidades simples:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • el usuario recibe un entorno restringido de solo lectura (piense en cosas como LESSSECURE, TMOUT, HISTFILE variables).

  • el usuario está asignado al usuario de SELinux staff_u y derechos otorgados para ejecutar comandos como otro usuario según sea necesario a través de sudo.
  • Los usuarios /home, /tmp y posiblemente /var/tmp son poliinstanciados a través de /etc/security/namespace.conf:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    También, /etc/security/namespace.init hace que todos los archivos esqueléticos sean de solo lectura para el usuario y sean propiedad de root.

De esta forma puede elegir si $USER puede ejecutar mkdir en su propio nombre (a través de un enlace en el privado ~/bin directorio, aprovisionado a través de /etc/skel, como se explicó anteriormente), en nombre de otro usuario (a través de sudo) o ninguno en absoluto.

Agregue un grupo ficticio, agregue el usuario a ese grupo, chown root:somegroup /bin/mkdir, chmod g-x /bin/mkdir. Tenga en cuenta que esto depende de que el usuario no pueda modificar sus grupos. IIRC esto es cierto en GNU / Linux pero no en algunos otros Unices.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *