ajout de setup_server_debian.sh

This commit is contained in:
2025-03-03 08:47:52 +01:00
parent 2ceb4be24f
commit 2629dd832c
13 changed files with 699 additions and 0 deletions

149
local/bin/setup_server_debian.sh Executable file
View File

@@ -0,0 +1,149 @@
#!/bin/bash
# Vérifier si le script est exécuté en root
if [[ $EUID -ne 0 ]]; then
echo "Ce script doit être exécuté en tant que root."
exit 1
fi
### Fonction pour mettre à jour le système
update_system() {
echo "Mise à jour du système..."
apt update && apt upgrade -y
}
### Fonction pour installer sudo s'il n'est pas déjà présent
install_sudo() {
if command -v sudo &>/dev/null; then
echo "Sudo est déjà installé."
else
echo "Installation de sudo..."
apt install -y sudo
fi
}
### Fonction pour ajouter un utilisateur administrateur
add_admin_user() {
# Vérifier s'il existe déjà un utilisateur autre que root
EXISTING_USER=$(awk -F: '$3 >= 1000 && $3 < 60000 {print $1; exit}' /etc/passwd)
if [[ -n "$EXISTING_USER" ]]; then
echo "Un utilisateur ($EXISTING_USER) existe déjà sur le système."
read -p "Voulez-vous ajouter un autre utilisateur administrateur ? (o/N) " ADD_NEW_USER
if [[ ! "$ADD_NEW_USER" =~ ^[Oo]$ ]]; then
echo "Aucun nouvel utilisateur ajouté."
return
fi
fi
read -p "Entrez le nom du nouvel utilisateur : " NEW_USER
# Vérifier si l'utilisateur existe déjà
if id "$NEW_USER" &>/dev/null; then
echo "L'utilisateur $NEW_USER existe déjà."
else
adduser "$NEW_USER"
echo "Utilisateur $NEW_USER créé."
fi
# Vérifier si l'utilisateur est dans le groupe sudo
if groups "$NEW_USER" | grep -q "\bsudo\b"; then
echo "$NEW_USER est déjà dans le groupe sudo."
else
usermod -aG sudo "$NEW_USER"
echo "$NEW_USER ajouté au groupe sudo."
fi
# Vérifier si les permissions sudo sont déjà définies
if [ -f "/etc/sudoers.d/$NEW_USER" ]; then
echo "Les permissions sudo sont déjà configurées pour $NEW_USER."
else
echo "$NEW_USER ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/$NEW_USER"
chmod 0440 "/etc/sudoers.d/$NEW_USER"
echo "Configuration sudo appliquée pour $NEW_USER."
fi
# Demander si on veut ajouter une clé SSH
read -p "Voulez-vous ajouter une clé SSH pour $NEW_USER ? (o/N) " ADD_SSH
if [[ "$ADD_SSH" =~ ^[Oo]$ ]]; then
SSH_DIR="/home/$NEW_USER/.ssh"
AUTH_KEYS="$SSH_DIR/authorized_keys"
# Créer le dossier .ssh s'il n'existe pas
if [ ! -d "$SSH_DIR" ]; then
mkdir -p "$SSH_DIR"
chown "$NEW_USER:$NEW_USER" "$SSH_DIR"
chmod 700 "$SSH_DIR"
echo "Dossier .ssh créé pour $NEW_USER."
fi
read -p "Collez la clé publique SSH : " SSH_KEY
# Vérifier si la clé est déjà présente
if grep -qxF "$SSH_KEY" "$AUTH_KEYS" 2>/dev/null; then
echo "Cette clé SSH est déjà ajoutée."
else
echo "$SSH_KEY" >> "$AUTH_KEYS"
chown "$NEW_USER:$NEW_USER" "$AUTH_KEYS"
chmod 600 "$AUTH_KEYS"
echo "Clé SSH ajoutée pour $NEW_USER."
fi
else
echo "Aucune clé SSH ajoutée."
fi
}
### Fonction pour configurer SSH de manière sécurisée
configure_ssh() {
if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config; then
echo "La connexion root SSH est déjà désactivée."
else
echo "Désactivation de la connexion root via SSH..."
sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart ssh
echo "Sécurisation SSH appliquée."
fi
}
### Fonction pour installer et configurer Fail2Ban
install_fail2ban() {
if dpkg -l | grep -q "^ii fail2ban"; then
echo "Fail2Ban est déjà installé."
else
echo "Installation de Fail2Ban..."
apt install -y fail2ban
fi
}
### Fonction pour configurer les locales en français UTF-8
configure_locales() {
echo "Configuration des locales en français UTF-8..."
apt install -y locales
# Vérifier si fr_FR.UTF-8 est déjà activé
if locale -a | grep -q "fr_FR.utf8"; then
echo "Les locales en fr_FR.UTF-8 sont déjà activées."
else
sed -i 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
fi
# Appliquer les variables locales si nécessaire
if grep -q "LANG=fr_FR.UTF-8" /etc/default/locale; then
echo "Les variables locales sont déjà configurées."
else
update-locale LANG=fr_FR.UTF-8 LANGUAGE=fr_FR.UTF-8 LC_ALL=fr_FR.UTF-8
echo "Variables locales mises à jour."
fi
}
### SECTION PRINCIPALE : Activer/Désactiver les options ici
update_system
install_sudo
add_admin_user
configure_ssh
install_fail2ban
configure_locales
echo "Installation et configuration de base terminées."
echo "Vous pouvez maintenant vous connecter avec l'utilisateur : $NEW_USER"

164
local/bin/ytdll Executable file
View File

@@ -0,0 +1,164 @@
#!/usr/bin/env php
<?php
// Auteur : Cédrix pour a5l.fr
// Projet : scripts-bash/ytdll
// Télécharger les pistes audios ajoutées récemment
// depuis des chaines Youtubes
// Version 2024.07.07-14.31
// Version initiale
/*
Création de la base de données
Linux Debian 12 / PostGres 16
Suivez les instructions suivantes pour créer
votre base de données et tous les éléments
associés.
-- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants
-- depuis le compte root
sudo su - postgres
-- Modification du fichier pg_hba
nano /etc/postgresql/16/main/ph_hba.conf
-- modifier la ligne
local all all peer
-- avec la valeur suivante
local all all trust
-- avec le compte root redémarrez postgres
systemctl restart postgresql
-- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants
-- depuis le compte root
sudo su - postgres
-- Connection au requeteur
psql
-- Créer un nouveau role
CREATE ROLE r_ytdll WITH LOGIN PASSWORD 'changeme';
-- Créer la base de données
CREATE DATABASE b_ytdll OWNER r_ytdll;
-- Connectez-vous à la base de données b_ytdll :
\c b_ytdll
-- Créez un nouveau schéma
CREATE SCHEMA s_ytdll AUTHORIZATION r_ytdll;
-- Accorder tous les privilèges sur le schéma à l'utilisateur
GRANT ALL PRIVILEGES ON SCHEMA s_ytdll TO r_ytdll;
-- Accorder des privilèges sur les tables et séquences existantes et futures
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA s_ytdll TO r_ytdll;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA s_ytdll TO r_ytdll;
ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON TABLES TO r_ytdll;
ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON SEQUENCES TO r_ytdll;
-- Schéma s_ytdll par défaut
SET search_path TO s_ytdll;
\d
ALTER ROLE r_ytdll SET search_path TO s_ytdll;
ALTER DATABASE b_ytdll SET search_path TO s_ytdll;
*/
// -- GESTION DES PRE REQUIS --
// Vérifier si l'extension pgsql est chargée
if (!extension_loaded('pgsql')) {
die("L'extension PHP 'pgsql' n'est pas installée. Veuillez l'installer avant de continuer.\n");
}
// Chemin du HOME
$homeDir = getenv('HOME');
// Configuration de l'autoloader
spl_autoload_register(function ($class) use ($homeDir) {
$baseDir = $homeDir . '/.local/share/ytdll/lib/';
$file = $baseDir . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require $file;
}
});
// -- GESTION DE LA CONFIGURATION PRIMAIRE --
function getUserInput($prompt) {
echo $prompt;
return trim(fgets(STDIN));
}
function createConfigFile($configPath, $templatePath) {
// Vérifie si le fichier de configuration existe
if (!file_exists($configPath)) {
// Copie le fichier de modèle
if (!copy($templatePath, $configPath)) {
die("Échec de la copie du fichier de configuration modèle.\n");
}
// Demande à l'utilisateur de saisir les valeurs nécessaires
$databaseHost = getUserInput("Veuillez saisir le host de la base de données : ");
$databaseName = getUserInput("Veuillez saisir le nom de la base de données : ");
$databaseUser = getUserInput("Veuillez saisir l'utilisateur de la base de données : ");
$databasePassword = getUserInput("Veuillez saisir le mot de passe de la base de données : ");
// Lit le fichier de modèle
$configContent = file_get_contents($configPath);
// Remplace les valeurs par défaut par les valeurs saisies par l'utilisateur
$configArray = [
'database' => [
'host' => $databaseHost,
'dbname' => $databaseName,
'user' => $databaseUser,
'password' => $databasePassword
]
];
// Encode en JSON
$jsonConfig = json_encode($configArray, JSON_PRETTY_PRINT);
// Écrit le fichier de configuration JSON
file_put_contents($configPath, $jsonConfig);
echo "Le fichier de configuration a été créé avec succès.\n";
}
}
// Appel de la fonction pour créer le fichier de configuration
$configPath = $homeDir . '/.config/fr.a5l.ytdll.json';
$templatePath = $homeDir . '/.local/share/ytdll/config.php';
createConfigFile($configPath, $templatePath);
// -- DEBUT --
// Lit le fichier de configuration primaire
$configContent = file_get_contents($configPath);
// Décode le JSON en tableau associatif
$config = json_decode($configContent, true);
// Initialiser la connexion à la base de données
$database = new Database($config['database']);
unset($config);
// Initialiser au gestionnaire de configuration
$configManager = new Config($database);
// -- GESTION DES VERSIONS de TABLE --
$updateManager = new UpdateManager($configManager, $pdo);
$updateManager->manageVersionTables();