Autori: Diego Marigo, Nicola Miotto
Versione: 1.0
Versione Sistema Operativo: Linux
Il programma è progettato per assistere gli amministratori di sistema nella gestione di sistemi Linux. Fornisce strumenti e script utili per semplificare attività comuni di amministrazione, come la gestione dei file di log, la gestione dei servizi e il monitoraggio del sistema. L'obiettivo è migliorare l'efficienza e ridurre gli errori nelle operazioni quotidiane.
Il codice del progetto è scritto in Bash e utilizza le funzionalità di scripting per gestire le operazioni di amministrazione del sistema. Le funzioni sono modulari e possono essere facilmente estese o modificate per aggiungere nuove funzionalità. Il codice è organizzato in moduli per facilitare la manutenzione e la comprensione.
⚠️ Requisiti di sistema: Questo programma è stato sviluppato per ambienti Ubuntu/Debian e si appoggia:
- alla gestione dei pacchetti tramite apt;
- al controllo dei servizi tramite systemd (comando systemctl).
- al logging centralizzato di systemd-journald (comando journalctl);
sysAdmin-project/
├── eseguibile.bash # Entry point del programma
├── installDependency.bash # Script per l'installazione delle dipendenze
├── LICENSE # Licenza del progetto
├── README.md # Documentazione del progetto
├── schermate/
│ ├── gestione_disco.bash # Schermata per la gestione delle partizioni del disco
│ ├── gestione_pacchetti.bash # Schermata per la gestione dei pacchetti
│ ├── gestione_rete.bash # Schermata per la gestione della rete
│ ├── gestione_servizi.bash # Schermata per la gestione dei servizi
│ ├── gestione_utenti.bash # Schermata per la gestione degli utenti
│ ├── manuale.bash # Schermata per il manuale utente
│ ├── monitoraggio.bash # Schermata per il monitoraggio del sistema
│ ├── operazioni_di_sistema.bash # Schermata per le operazioni di sistema
│ ├── principale.bash # Schermata principale
│ └── schermate.bash # Schermata per la gestione delle schermate
└── scripts/
├── main.bash # Centro logico del programma
├── codice_base.bash # Strumenti di supporto
├── registrazioni.bash # Funzioni di log
├── stilizzazione.bash # Funzioni per lo stile
└── log.txt # File di log predefinito
Questo è lo script principale del programma. Funziona come entry point e gestisce l'esecuzione del programma. Contiene la logica per analizzare gli argomenti passati al programma e avviare le schermate appropriate.
Script contenente il loop principale del programma Gestisce l'input dell'utente,
interpreta gli argomenti passati e chiama le funzioni appropriate dai moduli
codice_base.bash, stilizzazione.bash e registrazioni.bash. Le funzioni
principali includono:
main: Funzione principale contenente il loop del programma, analizza gli argomenti e chiama le funzioni necessarie.
Questo modulo contiene le funzioni di base condivise tra gli altri script. Fornisce utilità generali come la gestione degli errori, la stampa di messaggi e altre funzioni comuni che possono essere utilizzate in tutto il progetto.
Questo modulo fornisce funzioni per la stilizzazione dell'output del programma. Include codici per colori e formattazione del testo, permettendo di rendere l'output più leggibile e visivamente accattivante. Le funzioni principali includono:
-
_stilizza: Funzione generale per applicare stili specifici all'output. -
con_grassetto: Applica lo stile grassetto al testo. -
con_sottolineatura: Applica lo stile di sottolineatura al testo. -
con_sbarramento: Applica lo stile di sbarramento al testo. -
come_info: Applica lo stile informativo al testo. -
come_successo: Applica lo stile di successo al testo. -
come_errore: Applica lo stile di errore al testo. -
come_avviso: Applica lo stile di avviso al testo. -
print: Funzione per stampare l'output stilizzato, accettando un numero variabile di argomenti e applicando gli stili appropriati. -
println: Funzione per stampare l'output stilizzato con un ritorno a capo, accettando un numero variabile di argomenti e applicando gli stili appropriati. -
printlines: Funzione per stampare più linee di output stilizzato, accettando un numero variabile di argomenti e applicando gli stili appropriati.
⚠️ Le funzioni di stilizzazione sono progettate per essere utilizzate in contesti di terminale che supportano i codici ANSI. In ambienti che non supportano i codici ANSI, l'output potrebbe non essere visualizzato correttamente.
Questo modulo gestisce le registrazioni e i log del programma. Fornisce funzioni per registrare informazioni, errori e avvisi in un file di log. Le funzioni principali includono:
registra_info: Registra un messaggio informativo nel log.registra_successo: Registra un messaggio di successo nel log.registra_errore: Registra un messaggio di errore nel log.registra_avviso: Registra un messaggio di avviso nel log.apri_registro: Apre il file di log per la lettura, permettendo di visualizzare le registrazioni effettuate.
❗️ Il file di log predefinito è
ROOT/scripts/log.txt, ma può essere modificato passando l'argomento -r/--registro al programma.
Questo modulo contiene le schermate e i menu del programma. Fornisce funzioni per visualizzare le schermate principali, i menu di navigazione e altre interfacce utente.
💡 Tutte le schermate richiedono l'input dell'utente per la selezione dell'operazione desiderata. Il range di valori accettati è specificato in ogni schermata. Per tornare al menu principale, è possibile premere il tasto
qin qualsiasi schermata.
⚠️ Tutte le operazioni vengono svolte con privilegi di amministratore.
Le schermate principali includono:
-
schermate.bash: Raccoglie tutte le schermate e i menu del programma, permettendo di visualizzare le opzioni disponibili e guidare l'utente attraverso le funzionalità del sistema. -
principale.bash: Schermata principale del programma, che fornisce un menu di navigazione per accedere alle diverse funzionalità. -
manuale.bash: Schermata per il manuale del programma, che fornisce informazioni dettagliate su come utilizzare le diverse funzionalità del sistema. -
gestione_disco.bash: Schermata per la gestione delle partizioni del disco, che consente di creare, eliminare e modificare le partizioni.- Aggiungi disco: consente di aggiungere un nuovo disco al sistema
(
fdisk -l $nomeDisco). - Rimuovi disco: consente di rimuovere un disco dal sistema
(
fdisk -l $nomeDisco). - Visualizza partizioni: consente di visualizzare le partizioni esistenti
(
fdisk -l). - Formatta partizione: consente di formattare una partizione specifica
(
mkfs.ext4 $nomeDisco). - Controlla filesystem: consente di controllare lo stato di un filesystem
(
fsck -f $nomeDisco). - Backup file: consente di creare un backup di un file specifico
(
rsync -av --delete --progress "$file" "$file.bak"). - Ripristina file: consente di ripristinare un file da un backup specifico
(
rsync -av --delete --progress "$file.bak" "$file").
- Aggiungi disco: consente di aggiungere un nuovo disco al sistema
(
-
gestione_pacchetti.bash: Schermata per la gestione dei pacchetti, che consente di installare, rimuovere e aggiornare i pacchetti software del sistema.- Installa pacchetto: consente di installare un pacchetto specifico
(
apt install $nomePacchetto). - Rimuovi pacchetto: consente di rimuovere un pacchetto specifico:
- con dipendenze:
apt remove --purge "$pacchetto" && apt autoremove -y - senza dipendenze:
apt remove "$pacchetto"
- con dipendenze:
- Aggiorna pacchetti: consente di aggiornare un pacchetto
(
apt update && apt upgrade -y). - Elenco pacchetti installati: consente di visualizzare l'elenco dei
pacchetti installati (
apt list --installed)
- Installa pacchetto: consente di installare un pacchetto specifico
(
-
gestione_rete.bash: Schermata per la gestione della rete, che consente di configurare le interfacce di rete, visualizzare le connessioni attive e monitorare il traffico di rete.- Visualizza configurazione rete: consente di visualizzare la
configurazione delle interfacce di rete (
ip addr show). - Modifica configurazione rete: consente di modificare la configurazione
delle interfacce di rete (
ip addr add "$ip" dev "$interfaccia"). - Visualizza stato rete: consente di visualizzare lo stato delle interfacce
di rete (
systemctl status NetworkManager). - Modifica stato rete: consente di modificare lo stato delle interfacce di
rete (
ip link set "$interfaccia" "$stato"). - Visualizza statistiche rete: consente di visualizzare le statistiche
delle interfacce di rete (
ifconfig "$interfaccia" "$valore"). - Gestione firewall: consente di gestire le regole del firewall:
- Avviare/Arrestare/Visualizzare lo stato del firewall:
ufw "comando" - Consentire/Negare un indirizzo IP o un dominio:
ufw "$stato" "$indirizzo"
- Avviare/Arrestare/Visualizzare lo stato del firewall:
- Test di rete: consente di eseguire un test di rete
(
ping -c 4 "$indirizzo").
- Visualizza configurazione rete: consente di visualizzare la
configurazione delle interfacce di rete (
-
gestione_servizi.bash: Schermata per la gestione dei servizi di sistema, che consente di avviare, fermare e monitorare i servizi in esecuzione.- Avvia servizio: consente di avviare un servizio specifico
(
systemctl start "$servizio"). - Arresta servizio: consente di arrestare un servizio specifico
(
systemctl stop "$servizio"). - Riavvia servizio: consente di riavviare un servizio specifico
(
systemctl restart "$servizio"). - Visualizza elenco servizi: consente di visualizzare l'elenco dei servizi
attivi (
systemctl list-units --type=service --state=running --no-pager). - Abilita/Disabilita servizio all'avvio: consente di abilitare o
disabilitare un servizio all'avvio del sistema
(
systemctl $stato" "$servizio").
- Avvia servizio: consente di avviare un servizio specifico
(
-
gestione_utenti.bash: Schermata per la gestione degli utenti, che consente di aggiungere, rimuovere e modificare gli utenti del sistema.- Aggiungi utente: consente di aggiungere un nuovo utente al sistema e
impostare la sua password
(
useradd "$nome_utente" && passwd "$nome_utente"). - Modifica nome utente: consente di modificare le informazioni di un utente
esistente (
usermod -l "$nome_utente" "$nuovo_nome_utente"). - Modifica password utente: consente di modificare la password di un utente
esistente (
chpasswd <<< "$nome_utente:$password_utente"). - Modifica gruppo utente: consente di modificare il gruppo di appartenenza
di un utente (
usermod -g "$nuovo_gruppo" "$nome_utente"). - Modifica permessi utente: consente di modificare i permessi di un utente
(
usermod -aG "$gruppo_permessi" "$nome_utente"). - Modifica scadenza password utente: consente di modificare la scadenza
della password di un utente (
chage -M "$data_scadenza" "$nome_utente"). - Modifica scadenza account utente: consente di modificare la scadenza
dell'account di un utente (
chage -E "$data_scadenza" "$nome_utente"). - Modifica stato account utente: consente di modificare lo stato
dell'account di un utente:
- Abilitare account:
usermod -U "$nome_utente" - Disabilitare account:
usermod -L "$nome_utente"
- Abilitare account:
- Elimina utente: consente di rimuovere un utente dal sistema
(
userdel "$nome_utente"). - Visualizza elenco utenti: consente di visualizzare l'elenco degli utenti
del sistema (
cut -d: -f1 /etc/passwd).
- Aggiungi utente: consente di aggiungere un nuovo utente al sistema e
impostare la sua password
(
-
monitoraggio.bash: Schermata per il monitoraggio delle risorse di sistema, che consente di visualizzare l'utilizzo della CPU, della memoria e del disco.- Visualizza utilizzo CPU: consente di visualizzare l'utilizzo della CPU in
tempo reale (
top --batch-mode --iterations=1 | head -n 20). - Visualizza utilizzo memoria: consente di visualizzare l'utilizzo della
memoria in tempo reale (
free -h). - Visualizza utilizzo disco: consente di visualizzare l'utilizzo del disco
in tempo reale (
df -h). - Visualizza stato rete: consente di visualizzare lo stato delle interfacce
di rete (
netstat). - Visualizza servizi attivi: consente di visualizzare i servizi attivi e il
loro stato
(
systemctl list-units --type=service --state=running --no-pager). - Visualizza utenti connessi: consente di visualizzare gli utenti connessi
al sistema (
who).
- Visualizza utilizzo CPU: consente di visualizzare l'utilizzo della CPU in
tempo reale (
-
operazioni_di_sistema.bash: Schermata per le operazioni di sistema, che consente di eseguire operazioni come il riavvio, lo spegnimento e la gestione dei file di log. Si suddivide in due sezioni:-
operazioni di log: consente di visualizzare i log di sistema e degli accessi, con la possibilità di filtrare per tipo di log.
- Visualizza log sistema: consente di visualizzare i log di sistema
(
journalctl -n 50 --no-pager). - Visualizza log accesso: consente di visualizzare i log degli accessi al
sistema
(
journalctl _COMM=sudo _SYSTEMD_UNIT=sshd.service -n 100 --no-pager). - Visualizza log kernel: consente di visualizzare i log degli errori del
sistema (
journalctl -k -n 50 --no-pager). - Visualizza log rete: consente di visualizzare i log della rete
(
journalctl -u NetworkManager -n 50 --no-pager). - Visualizza log pacchetti: consente di visualizzare i log dei pacchetti
(
tail -n50 /var/log/apt/history.log). - Visualizza log applicazioni: consente di visualizzare i log delle
applicazioni (
journalctl -p info -n 50 --no-pager).
- Visualizza log sistema: consente di visualizzare i log di sistema
(
-
operazioni di sistema: consente di eseguire operazioni di spegnimento e riavvio del sistema.
- Spegni sistema: consente di spegnere il sistema (
shutdown now). - Riavvia sistema: consente di riavviare il sistema (
reboot). - Sospendi sistema: consente di sospendere il sistema
(
systemctl suspend). - Iberna sistema: consente di ibernare il sistema
(
systemctl hibernate). - Sospendi e iberna sistema: consente di sospendere e ibernare il sistema
(
systemctl hybrid-sleep). - Blocca sessione: consente di bloccare il sistema
(
loginctl lock-session). - Disconnetti utente corrente: consente di disconnettere l'utente
corrente (
loginctl --terminate-user).
- Spegni sistema: consente di spegnere il sistema (
-
Pacchetti utilizzati all'interno del programma:
apt: Per la gestione dei pacchetti.bash: Per l'esecuzione degli script.cut: Per elaborare i file di testo.chage: Per modificare le informazioni sulle password degli utenti.chmod: Per modificare i permessi dei file.chpasswd: Per cambiare le password degli utenti.df: Per visualizzare lo spazio su disco disponibile.fdisk: Per la gestione delle partizioni del disco.free: Per visualizzare la memoria disponibile.fsck: Per controllare e riparare i file system.ifconfig: Per visualizzare e configurare le interfacce di rete.iftop: Per monitorare il traffico di rete in tempo reale.ip: Per visualizzare e configurare le interfacce di rete.journalctl: Per visualizzare i log di sistema.loginctl: Per gestire le sessioni degli utenti e le operazioni di sistema.mkfs.ext4: Per formattare le partizioni in ext4.netstat: Per visualizzare le connessioni di rete.ping: Per testare la connettività di rete.reboot: Per riavviare il sistema.rsync: Per sincronizzare file e directory.systemctl: Per gestire i servizi di sistema.shutdown: Per spegnere o riavviare il sistema.tail: Per visualizzare le ultime righe di un file.top: Per monitorare le risorse di sistema in tempo reale.ufw: Per gestire il firewall.useradd: Per aggiungere nuovi utenti al sistema.userdel: Per rimuovere utenti dal sistema.usermod: Per modificare le informazioni degli utenti.who: Per visualizzare gli utenti connessi al sistema.
Per verificare che il sistema soddisfi i requisiti necessari per l'esecuzione del
programma, è possibile utilizzare lo script eseguibile.bash con l'argomento
--check o -c. Questo script controllerà la presenza dei pacchetti
necessari e fornirà un messaggio di errore se uno o più pacchetti non sono
presenti sul sistema.
sudo ./eseguibile.bash --checkAssicurarsi di avere installato i seguenti pacchetti sul sistema:
sudo apt update
sudo apt upgrade -y
sudo apt install -y \
bash \
coreutils \
fdisk \
iftop \
iputils-ping \
net-tools \
rsync \
systemctl \
ufw
⚠️ Questi pacchetti sono generalmente preinstallati su molte distribuzioni Linux, ma è sempre meglio verificarne la presenza.
❗️ All’interno della cartella del progetto è disponibile un installer che scarica le dipendenze in maniera automatica:
installDependecy.bash
-
Clonare il repository GitHub:
git clone https://github.com/Diego-Marigo/sysAdmin-project.git
-
Spostarsi nella directory del progetto:
cd sysAdmin-project -
Rendere eseguibile lo script principale:
chmod +x eseguibile.bash
-
Avviare lo script con permessi di superutente:
sudo ./eseguibile.bash
Lo script principale eseguibile.bash accetta diversi argomenti per eseguire
operazioni specifiche. Gli argomenti disponibili sono:
--check|-c: Controlla i requisiti di sistema e verifica che il sistema sia pronto per l'esecuzione del programma. Se i requisiti non sono soddisfatti, il programma fornisce un messaggio di errore e termina l'esecuzione.--help|-h: Mostra l'elenco dei comandi disponibili e una breve descrizione.--no-color: Disabilita l'uso dei colori nell'output del programma, utile per ambienti che non supportano la colorazione del testo o per una visualizzazione più semplice.--register|-r: Imposta il file di log da utilizzare per le registrazioni. Se non specificato, il file predefinito è./log.txt.--version|-v: Mostra la versione corrente del programma.