GNU/Linux >> Tutoriels Linux >  >> Linux

Bloquer une commande particulière sous Linux pour un utilisateur spécifique

Je ne sais pas comment le faire avec bash, mais je connais un autre shell qui limite l'environnement de l'utilisateur :lshell (shell limité).

Un aperçu rapide de la configuration

Lshell est configuré via un fichier INI. Par défaut, il contient une liste blanche de commandes autorisées, mais il peut être facilement configuré pour interdire à l'utilisateur d'utiliser une commande spécifique.

Cette configuration (config par défaut /etc/lshell.conf ) interdit l'utilisateur foo d'utiliser mkdir :

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

Afin de configurer un compte utilisateur pour utiliser lshell par défaut, vous devez :

 chsh -s /usr/bin/lshell foo

Lshell peut faire plus, comme :

  • 3 niveaux de précision :utilisateur, groupe, tous.
  • Peut restreindre l'accès à certains chemins du système.
  • Peut restreindre l'utilisation de certains caractères (comme | ).
  • Peut restreindre l'utilisation de certaines commandes uniquement via SSH.

Et plus encore.

Mise à jour 1# Résultat du test ajouté :

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 façon dont j'implémente habituellement ce type de restrictions nécessite que plusieurs conditions soient remplies, sinon la restriction peut être facilement contournée :

  • L'utilisateur n'appartient pas au wheel groupe, le seul autorisé à utiliser su (appliqué via PAM).
  • L'utilisateur reçoit un rbash correctement sécurisé avec un PATH en lecture seule pointant vers un ~/bin privé , ce ~/bin/ répertoire contient des liens vers des utilitaires 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*
    
  • l'utilisateur reçoit un environnement restreint en lecture seule (pensez à des choses comme LESSSECURE , TMOUT , HISTFILE variable).

  • l'utilisateur est mappé sur l'utilisateur SELinux staff_u et a reçu le droit d'exécuter des commandes en tant qu'autre utilisateur selon les besoins via sudo .
  • le /home de l'utilisateur , /tmp et éventuellement /var/tmp sont polyinstanciés via /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
    

    Aussi, /etc/security/namespace.init rend tous les fichiers squelettes en lecture seule pour l'utilisateur et détenus par root .

De cette façon, vous pouvez choisir si $USER peut exécuter mkdir en son nom propre (via un lien dans le domaine privé ~/bin répertoire, provisionné via /etc/skel , comme expliqué ci-dessus), au nom d'un autre utilisateur (via sudo ) ou rien du tout.


Ajoutez un groupe factice, ajoutez l'utilisateur à ce groupe, chown root:somegroup /bin/mkdir , chmod g-x /bin/mkdir . Notez que cela repose sur l'impossibilité pour l'utilisateur de modifier ses groupes. IIRC c'est vrai dans GNU/Linux mais pas dans certains autres Unices.


Linux
  1. 20 commandes Linux essentielles pour chaque utilisateur

  2. Comment configurer les privilèges Sudo pour l'utilisateur sous Linux

  3. Comment désactiver la connexion à distance pour l'utilisateur root sur une machine Linux

  4. Commande Linux su

  5. login Exemples de commandes sous Linux

Tutoriel de commande Linux adduser/addgroup pour débutants (7 exemples)

Tutoriel de commande Linux id pour les débutants (5 exemples)

Commande Linux Changement pour définir le vieillissement du mot de passe pour l'utilisateur

Comment exécuter une commande pendant une durée spécifique sous Linux

Commande su sous Linux

Comment désactiver la connexion SSH pour l'utilisateur root sous Linux ?