GNU/Linux >> Linux Esercitazione >  >> Linux

Blocca comando particolare in Linux per utente specifico

Non so come farlo con bash, ma conosco un'altra shell che limita l'ambiente utente:lshell (shell limitata).

Una rapida panoramica della configurazione

Lshell è configurato tramite un file INI. Per impostazione predefinita, contiene una lista bianca di comandi consentiti, ma può essere facilmente configurata per impedire all'utente di utilizzare un comando specifico.

Questa configurazione (default conf /etc/lshell.conf ) vieta l'utente foo dall'utilizzo di mkdir :

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

Per configurare un account utente in modo che utilizzi lshell per impostazione predefinita, devi:

 chsh -s /usr/bin/lshell foo

Lshell può fare di più, come:

  • 3 livelli di granularità:utente, gruppo, tutto.
  • Può limitare l'accesso a determinati percorsi nel sistema.
  • Può limitare l'uso di determinati caratteri (come | ).
  • Può limitare l'uso di determinati comandi solo tramite SSH.

E altro ancora.

Aggiornamento 1# Aggiunto il risultato del test :

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

Il modo in cui di solito implemento questo tipo di restrizioni richiede il rispetto di diverse condizioni, altrimenti la restrizione può essere facilmente aggirata:

  • L'utente non appartiene al wheel gruppo, l'unico autorizzato ad usare su (applicato tramite PAM).
  • All'utente viene assegnato un rbash correttamente protetto con un PATH di sola lettura che punta a un ~/bin privato , questo ~/bin/ directory contiene collegamenti a semplici utilità:

    $ 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*
    
  • all'utente viene fornito un ambiente limitato e di sola lettura (si pensi a cose come LESSSECURE , TMOUT , HISTFILE variabili).

  • l'utente è associato all'utente SELinux staff_u e dato i diritti per eseguire i comandi come altro utente come richiesto tramite sudo .
  • il /home dell'utente , /tmp e possibilmente /var/tmp sono poliistanziati tramite /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
    

    Inoltre, /etc/security/namespace.init rende tutti i file scheletrici di sola lettura per l'utente e di proprietà di root .

In questo modo puoi scegliere se $USER può eseguire mkdir per proprio conto (tramite un link nel privato ~/bin directory, fornita tramite /etc/skel , come spiegato sopra), per conto di un altro utente (tramite sudo ) o nessuno.


Aggiungi un gruppo fittizio, aggiungi l'utente a quel gruppo, chown root:somegroup /bin/mkdir , chmod g-x /bin/mkdir . Si noti che ciò si basa sull'impossibilità per l'utente di modificare i propri gruppi. IIRC questo è vero in GNU/Linux ma non in qualche altro Unix.


Linux
  1. 20 comandi Linux essenziali per ogni utente

  2. Come impostare i privilegi di Sudo per l'utente in Linux

  3. Come disabilitare un comando specifico per un utente specifico in Linux

  4. Esempi di comandi adduser in Linux

  5. Esempi di comandi sudo in Linux

Linux adduser/addgroup Command Tutorial per principianti (7 esempi)

Esercitazione sul comando di Linux id per principianti (5 esempi)

Comando Linux Change per impostare la durata della password per l'utente

Come eseguire un comando per un tempo specifico in Linux

su Comando in Linux

Come disabilitare l'accesso SSH per l'utente root in Linux?