Capitolo successivo Capitolo precedente Indice

77. Linux nella didattica di massa

La gestione di un laboratorio di computer in una scuola media superiore è problematica a causa di diversi fattori: l'età degli studenti; il poco tempo a disposizione; la necessità di svolgere una gran mole di esercitazioni specifiche; ... la campanella che suona prima di aver finito.

Linux è un sistema operativo sofisticato e sotto questo aspetto non adatto a un ambiente del genere. In questo capitolo intendo raccogliere possibili soluzioni ai problemi tipici di un laboratorio del genere.

77.1 Utente speciale per uno scopo speciale

Quando si vuole permettere agli utenti normali di compiere attività altrimenti di esclusiva competenza dell'utente root, si può utilizzare sudo, oppure si può creare un utente apposito nell'elenco del file /etc/passwd a cui invece di associare una shell si associa il programma o lo script che si vuole fare eseguire.

CIAO::0:0:Esempio generico:/tmp:/var/script/.ciao

L'esempio mostra una riga del file /etc/passwd in cui viene definito l'utente CIAO, senza password, con lo stesso UID e GID dell'utente root, e di conseguenza con gli stessi privilegi, al quale viene però associata la directory /tmp/ e, al posto di una shell, lo script /var/script/.ciao.

In questo modo, eseguendo il login utilizzando questo nominativo, CIAO, si esegue lo script /var/script/.ciao. Al termine dell'esecuzione dello script, la sessione di lavoro come utente CIAO termina.

Il meccanismo rende il sistema poco sicuro, ma ha il vantaggio di essere un modo semplice per l'esecuzione di alcuni comandi che sono normalmente di competenza dell'utente root.

<!>   È importante che la dichiarazione del vero utente root, sia precedente a quella di questi finti utenti root.

Se si intende utilizzare questo tipo di utente attraverso rexec è necessario che il file /etc/securetty contenga l'indicazione dei terminali da cui questo pseudo utente root può accedere.

77.2 Spegnimento da parte di utenti normali

Normalmente, un utente normale, non è autorizzato ad utilizzare shutdown o equivalenti, per chiudere l'attività di Linux. Però, in certi casi, potrebbe essere utile che ciò sia possibile.

Utente specifico: SPEGNIMI

Con la tecnica vista nella sezione -Utente speciale-, si aggiunge l'utente SPEGNIMI.

SPEGNIMI::0:0:Spegnimento del computer:/tmp:/var/script/.spegnimi

Script per lo spegnimento

Lo script /var/script/.spegnimi potrebbe essere preparato in modo da poter abilitare o disabilitare la possibilità di eseguire lo shutdown.

#!/bin/bash
#======================================================================
# .spegnimi
#======================================================================

    #------------------------------------------------------------------
    # Verifica la presenza del file .spegnimi.ok
    #------------------------------------------------------------------
    if [ -f /var/script/.spegnimi.ok ]
    then
        #--------------------------------------------------------------
        # Il file esiste e si può spegnere.
        # Esegue lo shutdown con una attesa di 10 secondi.
        #--------------------------------------------------------------
        /sbin/shutdown -h -t 10 now
    else
        #--------------------------------------------------------------
        # L'operazione di spegnimento non è consentita.
        #--------------------------------------------------------------
        echo "L'operazione richiesta di spegnimento non è consentita!"
    fi

Lo script deve essere accessibile in tutti i modi solo all'utente root e in nessun modo agli altri utenti (700).

L'esecuzione di shutdown dipende quindi dalla presenza del file /var/script/.spegnimi.ok. In questo modo è possibile regolare semplicemente l'accessibilità a questa funzione di spegnimento.

Uso pratico

Per utilizzare in pratica questo sistema, si può agire in due modi possibili:

Attraverso un normale login è possibile spegnere il sistema, basta utilizzare l'utente SPEGNIMI, per il quale non è richiesta alcuna password.

Attraverso rexec è possibile attivare una connessione al proprio computer nel modo seguente.

rexec -l SPEGNIMI `hostname`

Nello stesso modo si può spegnere un computer attraverso la rete da un'altra posizione.

rexec -l SPEGNIMI <indirizzo-da-spegnere>

Facilitare le cose

Per rendere più facile il meccanismo, si può creare uno script ulteriore con lo stesso nome dell'utente fittizio SPEGNIMI.

#!/bin/sh
#======================================================================
# SPEGNIMI
#======================================================================

    rexec -l SPEGNIMI `hostname`

In tal modo, sarà lo stesso ``comando'', sia trovandosi in presenza di una richiesta di login che durante una normale sessione di lavoro.

Spegnere tutta la rete

Per eseguire lo shutdown su un gruppo di computer in un colpo solo, si può creare uno script che esegue una serie di rexec su tutti i computer interessati.

#!/bin/sh
#======================================================================
# SPEGNITUTTI
#======================================================================

    rexec -l SPEGNIMI pippo01.zigozago.dg &
    rexec -l SPEGNIMI pippo02.zigozago.dg &
    rexec -l SPEGNIMI pippo03.zigozago.dg &
    rexec -l SPEGNIMI pippo04.zigozago.dg &
    rexec -l SPEGNIMI pippo05.zigozago.dg &
    #...

77.3 Autorizzare chiunque ad aggiungersi come nuovo utente

Normalmente, non è sensato concedere a chiunque di registrarsi da solo all'interno di un sistema, ma su un computer destinato alla didattica questo sarebbe più che giustificato.

Utente specifico: AGGIUNGI

Con la tecnica vista nella sezione -Utente speciale-, si aggiunge l'utente AGGIUNGI.

AGGIUNGI::0:0:Aggiunta nuovo utente:/tmp:/var/script/.aggiungi

Script per l'aggiunta di un nuovo utente

Lo script /var/script/.aggiungi potrebbe essere preparato in modo da poter abilitare o disabilitare la possibilità di eseguire il programma adduser.

<!>   Il programma adduser non è necessariamente presente con questo nome e con lo stesso comportamento in tutte le distribuzioni Linux. In questi esempi si suppone che questo accetti un solo argomento: il nome dell'utente da aggiungere.

#!/bin/sh
#======================================================================
# .aggiungi
#======================================================================

    #------------------------------------------------------------------
    # Verifica la presenza del file .aggiungi.ok
    #------------------------------------------------------------------
    if [ -f /var/script/.aggiungi.ok ]
    then
        #--------------------------------------------------------------
        # Il file esiste e si può aggiungere l'utente.
        # Si inizia ottenendo il nome da utilizzare.
        #--------------------------------------------------------------
        RISPOSTA="/tmp/risposta"
        
        while [ 0 ]                                           # FOREVER
        do
            dialog --inputbox \
"Inserisci il nome dell'utente.\
\n\
\n\
Si possono utilizzare al massimo 8 caratteri. \
\n\
\n\
\n\
<Ok> prosegue,\
\n\
<Cancel> ripete la richiesta." \
14 70 2> $RISPOSTA
            #----------------------------------------------------------
            # Controlla la risposta data dall'utente.
            #----------------------------------------------------------
            if [ $? = 0 ]
            then
                #------------------------------------------------------
                # La risposta è stata un OK e quindi prosegue.
                #------------------------------------------------------
                NUOVO_UTENTE=`cat $RISPOSTA`
            else
                #------------------------------------------------------
                # La risposta è stata un CANCEL e quindi ripete il
                # loop.
                #------------------------------------------------------
                continue
            fi
            break
        done
        #--------------------------------------------------------------
        # Finalmente viene creato l'utente.
        #--------------------------------------------------------------
        /usr/sbin/adduser $NUOVO_UTENTE
        #--------------------------------------------------------------
        # Viene definita la password.
        #--------------------------------------------------------------
        while [ 0 ]                                           # FOREVER
        do
            if /usr/bin/passwd $NUOVO_UTENTE
            then
                #------------------------------------------------------
                # La password è stata inserita correttamente.
                #------------------------------------------------------
                break
            else
                #------------------------------------------------------
                # Meglio ripetere l'operazione.
                #------------------------------------------------------
                continue
            fi
        done
    else
        #--------------------------------------------------------------
        # L'operazione non è consentita.
        #--------------------------------------------------------------
        echo "L'operazione richiesta non è consentita!"
    fi

Lo script deve essere accessibile in tutti i modi solo all'utente root e in nessun modo agli altri utenti (700).

L'esecuzione di adduser dipende quindi dalla presenza del file /var/script/.aggiungi.ok. In questo modo è possibile regolare semplicemente l'accessibilità a questa funzione.

Uso pratico

Per utilizzare in pratica questo sistema, basta utilizzare l'utente AGGIUNGI in fase di login.

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice