La gestione di un laboratorio munito di elaboratori 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 avere finito.
GNU/Linux è un sistema operativo sofisticato e sotto questo aspetto non adatto a un ambiente del genere. In questo capitolo si raccolgono possibili soluzioni ai problemi tipici di un tale laboratorio.
Quando si vuole permettere agli utenti comuni di compiere attività che altrimenti sarebbero esclusivamente di 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:/etc/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 si abbina lo script /etc/script/.CIAO
.
In questo modo, eseguendo il login con questo nominativo, CIAO
, si esegue lo script /etc/script/.CIAO
. Al termine dell'esecuzione dello script, la sessione di lavoro come utente CIAO
termina.
Il meccanismo rende il sistema molto 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 |
Per fare in modo che gli eventuali sistemi di sicurezza abbandonino ogni resistenza, è probabile che si debba includere l'ipotetico programma /etc/script/.CIAO
nel file /etc/shells
. Inoltre, dovrebbe essere evidente che in una situazione del genere non sia sensata l'attivazione delle shadow password.
Se si intende utilizzare questo tipo di utente attraverso un programma di login remoto (rlogin
, rsh
, telnet
o rexec
) è necessario che il file /etc/securetty
contenga l'indicazione dei terminali da cui questo pseudo utente root
può accedere.
Generalmente, un utente comune non è autorizzato a utilizzare shutdown
o equivalenti, per chiudere l'attività di GNU/Linux. Però, in certi casi, potrebbe essere utile che ciò sia possibile. Il modo più semplice di permettere agli utenti comuni di avviarlo, è attribuirgli il permesso SUID, come nell'esempio seguente:
#
chmod u+s /sbin/shutdown
Eventualmente si può completare la cosa creando un collegamento nella directory /bin/
in modo che sia accessibile facilmente agli utenti comuni, senza bisogno di indicarne il percorso.
#
ln
-
s /sbin/shutdown /bin/shutdown
Nelle sezioni seguenti viene mostrata una tecnica diversa che si basa sul trucco dell'utente speciale descritta sopra. Questo modo può sembrare più laborioso e inutile; in realtà ci sono dei vantaggi, in particolare la possibilità di controllo sull'operazione stessa.
Con la tecnica vista nella sezione
181.1, si aggiunge l'utente SPEGNIMI
.
SPEGNIMI::0:0:Spegnimento dell'elaboratore:/tmp:/etc/script/.SPEGNIMI |
Lo script /etc/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 /etc/script/data/SPEGNIMI.OK ] then #-------------------------------------------------------------- # Il file esiste e si può spegnere. # Esegue lo shutdown con un'attesa di 10 secondi. #-------------------------------------------------------------- sleep 10s /sbin/shutdown -h 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 /etc/script/data/SPEGNIMI.OK
. In questo modo è possibile regolare semplicemente l'accessibilità a questa funzione di spegnimento.
Per utilizzare in pratica questo sistema, si può agire attraverso un login locale o remoto. Attraverso un login normale è possibile spegnere il sistema: basta utilizzare l'utente SPEGNIMI
, per il quale non è richiesta alcuna password.
Attraverso rlogin
è possibile attivare una connessione con lo stesso elaboratore su cui si sta operando, ottenendone lo spegnimento. L'esempio seguente utilizza localhost
per determinare il nome dell'elaboratore: è importante che questo restituisca un nome corretto.
rlogin
|
Nello stesso modo si può spegnere un elaboratore attraverso la rete da un'altra posizione.
rlogin
|
Per rendere più facile il meccanismo, si può creare uno script ulteriore con lo stesso nome dell'utente fittizio SPEGNIMI
.
#!/bin/sh #====================================================================== # SPEGNIMI #====================================================================== rlogin -l SPEGNIMI `hostname` |
In tal modo, sarà lo stesso termine da utilizzare, sia trovandosi in presenza di una richiesta di login che durante una normale sessione di lavoro.
Per eseguire lo shutdown
su un gruppo di elaboratori in un colpo solo, si può creare uno script che esegue una serie di rlogin
su tutti gli elaboratori interessati.
#!/bin/sh #====================================================================== # SPEGNITUTTI #====================================================================== rlogin -l SPEGNIMI host01.brot.dg & rlogin -l SPEGNIMI host02.brot.dg & rlogin -l SPEGNIMI host03.brot.dg & rlogin -l SPEGNIMI host04.brot.dg & rlogin -l SPEGNIMI host05.brot.dg & #... |
In alternativa, se per qualunque motivo si ha difficoltà a utilizzare rlogin
o rsh
come si vorrebbe, si può utilizzare Secure Shell (capitolo
167), configurandola in modo che utilizzi una forma di autenticazione che non richieda l'inserimento di una password. Lo script potrebbe essere modificato nel modo seguente:
#!/bin/sh #====================================================================== # SPEGNITUTTI #====================================================================== ssh -l SPEGNIMI host01.brot.dg & ssh -l SPEGNIMI host02.brot.dg & ssh -l SPEGNIMI host03.brot.dg & ssh -l SPEGNIMI host04.brot.dg & ssh -l SPEGNIMI host05.brot.dg & #... |
Normalmente, non è sensato concedere a chiunque di registrarsi da solo all'interno di un sistema, ma su un elaboratore destinato alla didattica, in un ambiente in cui non si vuole utilizzare il NIS, questo sarebbe più che giustificato.
Con la tecnica vista nella sezione
181.1, si aggiunge l'utente AGGIUNGI
.
AGGIUNGI::0:0:Aggiunta nuovo utente:/tmp:/etc/script/.AGGIUNGI |
Lo script /etc/script/.AGGIUNGI
potrebbe essere preparato in modo da poter abilitare o disabilitare la possibilità di eseguire il programma adduser
.
Il programma |
#! /bin/bash #====================================================================== # .AGGIUNGI #====================================================================== #====================================================================== # Inizio. #====================================================================== #------------------------------------------------------------------ # Verifica la presenza del file AGGIUNGI.OK #------------------------------------------------------------------ if [ -f /etc/script/data/AGGIUNGI.OK ] then #-------------------------------------------------------------- # Il file esiste e si può aggiungere l'utente. # Si inizia ottenendo il nome da utilizzare. #-------------------------------------------------------------- echo "Inserisci il nome dell'utente." echo "Si possono utilizzare al massimo 8 caratteri." read #-------------------------------------------------------------- # Controlla la risposta data dall'utente. #-------------------------------------------------------------- if [ ${#REPLY} = 0 ] then #---------------------------------------------------------- # La risposta è nulla, così si interrompe l'inserimento. #---------------------------------------------------------- exit fi #-------------------------------------------------------------- # Finalmente viene creato l'utente. #-------------------------------------------------------------- NUOVO_UTENTE=$REPLY /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 /etc/script/data/AGGIUNGI.OK
. In questo modo è possibile regolare semplicemente l'accessibilità a questa funzione.
Per utilizzare in pratica questo sistema, basta identificarsi come l'utente AGGIUNGI
in fase di login.
---------------------------
Appunti Linux 1999.07.12 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ evo.it
[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]