GNU/Linux >> Tutoriales Linux >  >> Linux

Bloquear comando particular en Linux para usuario específico

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 a través de un archivo INI. De forma predeterminada, contiene una lista blanca de comandos permitidos, pero se puede configurar fácilmente para prohibir que el usuario use un comando específico.

Esta configuración (predeterminada conf /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 ciertas rutas en el 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.

Actualizar 1# Resultado de la prueba agregada:

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 para usar su (aplicado a través de PAM).
  • El usuario recibe un rbash debidamente protegido con una RUTA de solo lectura que apunta a un ~/bin privado , este ~/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 dados derechos para ejecutar comandos como otro usuario según sea necesario a través de sudo .
  • el /home del usuario , /tmp y posiblemente /var/tmp están 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
    

    Además, /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 puedes 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 otros Unices.


Linux
  1. 20 comandos esenciales de Linux para cada usuario

  2. Cómo deshabilitar el inicio de sesión remoto para el usuario raíz en una máquina Linux

  3. Cómo deshabilitar un comando específico para un usuario específico en Linux

  4. Ejemplos de comandos de inicio de sesión en Linux

  5. Ejemplos de comandos adduser en Linux

Tutorial de comandos de Linux adduser/addgroup para principiantes (7 ejemplos)

Tutorial del comando id de Linux para principiantes (5 ejemplos)

Comando de cambio de Linux para establecer la caducidad de la contraseña para el usuario

Cómo ejecutar un comando durante un tiempo específico en Linux

Comando su en Linux

¿Cómo deshabilitar el inicio de sesión SSH para el usuario raíz en Linux?