- Ajout de la gestion install et déploiement Clé RSA
- ajout de nouveau alias git
This commit is contained in:
parent
e7340e65c0
commit
9d746b4443
18
TODO.md
18
TODO.md
|
|
@ -1,21 +1,5 @@
|
|||
# SCRIPT INSTALL
|
||||
- LOCALE
|
||||
- HEURE
|
||||
- faire la connexion git sans faire pass a chaque fois en script
|
||||
- pour la conf du firewall recharger les ancien et proposer les nouveau et supprimer les anciens possible
|
||||
+ des services
|
||||
|
||||
# SCRIPT
|
||||
- AJOUTER PLUS D ALIAS
|
||||
- AJOUTER PLUS DE CMD
|
||||
- AJOUTER PLUS DE PATH
|
||||
# INFOS
|
||||
> /etc/hosts (changer le nom de la machine)
|
||||
> /etc/hostname (changer le nom de la machine)
|
||||
> /etc/msmtprc (conf des mails)
|
||||
|
||||
|
||||
|
||||
- faire le redirect port 80
|
||||
|
||||
# GITEA
|
||||
- faire le redirect port 80
|
||||
|
|
|
|||
|
|
@ -12,6 +12,20 @@ CONF_LIST_CONFIG_JSON=$(cat <<EOF
|
|||
]
|
||||
},
|
||||
{
|
||||
"section": "NETWORK",
|
||||
"items": [
|
||||
{"label": "Nom de la machine", "cmd": "/etc/hosts"},
|
||||
{"label": "Nom de la machine", "cmd": "/etc/hostname"}
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "MAIL",
|
||||
"items": [
|
||||
{"label": "msmtp config", "cmd": "/etc/msmtprc", "bin": "msmtp"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "APACHE",
|
||||
"items": [
|
||||
{"label": "Websites folder", "cmd": "/var/www/", "bin": "apache2"},
|
||||
|
|
|
|||
|
|
@ -12,12 +12,16 @@ CONFIG_DEB_INSTALL_JSON='[
|
|||
{"id": "apparmor_pkg", "label": "Installer AppArmor (Paquets)", "type": "pkg", "params": "apparmor"},
|
||||
{"id": "fail2ban_pkg", "label": "Installer Fail2Ban", "type": "pkg", "params": "fail2ban"},
|
||||
{"id": "ufw_pkg", "label": "Installer Firewall (UFW)", "type": "pkg", "params": "ufw"},
|
||||
{"id": "gen_ssh_key", "label": "Creer une clé RSA pour SSH", "type": "sys", "params": "gen_ssh_key"},
|
||||
{"id": "ipv6", "label": "Désactiver IPv6", "type": "sys", "params": "ipv6"},
|
||||
{"id": "mail", "label": "Configurer ADMIN_MAIL", "type": "sys", "params": "mail"},
|
||||
{"id": "hostname", "label": "Changer le Hostname", "type": "sys", "params": "hostname"},
|
||||
{"id": "static_ip", "label": "Configurer IP Statique (eth0)", "type": "sys", "params": "static_ip"},
|
||||
{"id": "deploy_ssh_key", "label": "Autoriser la clé RSA sur un hôte distant", "type": "sys", "params": "deploy_ssh_key"},
|
||||
{"id": "clone_ssh_key", "label": "Cloner la clé RSA sur un hôte distant", "type": "sys", "params": "clone_ssh_key"},
|
||||
{"id": "msmtp", "label": "Configurer MSMTP (Relais Mail)", "type": "sys", "params": "msmtp"},
|
||||
{"id": "apparmor", "label": "Configurer AppArmor (Kernel)", "type": "sys", "params": "apparmor"},
|
||||
{"id": "fail2ban", "label": "Configurer Fail2Ban", "type": "sys", "params": "fail2ban"},
|
||||
{"id": "ufw", "label": "Configurer Firewall (UFW)", "type": "sys", "params": "ufw"}
|
||||
{"id": "ufw", "label": "Configurer Firewall (UFW)", "type": "sys", "params": "ufw"},
|
||||
{"id": "ntp", "label": "Configurer Heure Française", "type": "sys", "params": "ntp"}
|
||||
]'
|
||||
|
|
|
|||
213
func/deb_sys.sh
213
func/deb_sys.sh
|
|
@ -55,6 +55,10 @@ check_deb_sys_msmtp(){
|
|||
return 1
|
||||
}
|
||||
|
||||
check_deb_sys_ntp_setup() {
|
||||
return 1
|
||||
}
|
||||
|
||||
check_deb_sys_mail(){
|
||||
if grep -q "ADMIN_MAIL=" /etc/environment 2>/dev/null; then
|
||||
return 0
|
||||
|
|
@ -93,61 +97,210 @@ check_deb_sys_ufw() {
|
|||
fi
|
||||
}
|
||||
|
||||
check_deb_sys_gen_ssh_key(){
|
||||
if [[ -f "$RSA_KEY_FILE" ]]; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
check_deb_sys_deploy_ssh_key(){
|
||||
if [[ -f "$RSA_KEY_FILE" ]]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
check_deb_sys_clone_ssh_key(){
|
||||
if [[ -f "$RSA_KEY_FILE" ]]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
do_deb_sys_gen_ssh_key() {
|
||||
if [[ -f "$RSA_KEY_FILE" ]]; then
|
||||
msg_success "Une clé SSH existe déjà : $RSA_KEY_FILE"
|
||||
# On affiche l'empreinte pour info
|
||||
ssh-keygen -l -f "$RSA_KEY_FILE"
|
||||
else
|
||||
msg_info "Génération d'une nouvelle clé RSA (4096 bits)..."
|
||||
mkdir -p "$HOME/.ssh"
|
||||
chmod 700 "$HOME/.ssh"
|
||||
|
||||
# -t rsa : type RSA
|
||||
# -b 4096 : taille robuste
|
||||
# -N "" : pas de mot de passe (passphrase vide pour l'auto)
|
||||
# -f : chemin du fichier
|
||||
ssh-keygen -t rsa -b 4096 -N "" -f "$RSA_KEY_FILE"
|
||||
|
||||
msg_success "Clé générée avec succès."
|
||||
fi
|
||||
}
|
||||
|
||||
do_deb_sys_deploy_ssh_key() {
|
||||
local remote_user remote_host remote_port
|
||||
|
||||
msg_info "Déploiement de la clé sur un serveur distant"
|
||||
|
||||
# 1. Vérification locale
|
||||
if [[ ! -f "$HOME/.ssh/id_rsa.pub" ]]; then
|
||||
msg_error "Erreur : Aucune clé publique trouvée. Générez-en une d'abord."
|
||||
return
|
||||
fi
|
||||
|
||||
# 2. Saisie des infos distantes
|
||||
read -rp "Utilisateur distant (ex: root) : " remote_user
|
||||
read -rp "IP ou Hostname distant : " remote_host
|
||||
read -rp "Port SSH (par défaut 22) : " remote_port
|
||||
remote_port=${remote_port:-22}
|
||||
|
||||
msg_info "Tentative de déploiement sur ${remote_user}@${remote_host}..."
|
||||
|
||||
# 3. Déploiement intelligent
|
||||
# ssh-copy-id vérifie tout seul si la clé existe déjà sur le serveur !
|
||||
if ssh-copy-id -p "$remote_port" "${remote_user}@${remote_host}"; then
|
||||
msg_success "La clé a été installée (ou était déjà présente)."
|
||||
msg_info "Test de connexion : ssh -p $remote_port ${remote_user}@${remote_host}"
|
||||
else
|
||||
msg_error "Le déploiement a échoué. Vérifiez vos accès ou le mot de passe."
|
||||
fi
|
||||
}
|
||||
|
||||
do_deb_sys_clone_ssh_key() {
|
||||
local remote_user remote_host remote_port
|
||||
local ssh_dir="$HOME/.ssh"
|
||||
local key_file="$ssh_dir/id_rsa"
|
||||
|
||||
msg_info "Clonage de l'identité SSH vers un hôte distant"
|
||||
|
||||
# 1. Vérification locale
|
||||
if [[ ! -f "$key_file" ]]; then
|
||||
msg_error "Erreur : Aucune clé locale ($key_file) à copier."
|
||||
return
|
||||
fi
|
||||
|
||||
# 2. Saisie des infos
|
||||
read -p "Utilisateur distant : " remote_user
|
||||
read -p "IP/Hostname distant : " remote_host
|
||||
read -p "Port SSH (22) : " remote_port
|
||||
remote_port=${remote_port:-22}
|
||||
|
||||
# 3. Confirmation (car c'est sensible)
|
||||
msg_warning "Ceci va copier votre clé PRIVÉE sur $remote_host."
|
||||
read -p "Êtes-vous sûr ? (o/N) : " confirm
|
||||
[[ "$confirm" != "o" && "$confirm" != "O" ]] && return
|
||||
|
||||
# 4. Envoi et configuration des droits en une seule commande
|
||||
# On utilise tar pour conserver les droits et créer le dossier si besoin
|
||||
msg_info "Transfert en cours..."
|
||||
|
||||
tar -C "$ssh_dir" -cf - id_rsa id_rsa.pub | ssh -p "$remote_port" "${remote_user}@${remote_host}" "
|
||||
mkdir -p ~/.ssh && \
|
||||
tar -C ~/.ssh -xf - && \
|
||||
chmod 700 ~/.ssh && \
|
||||
chmod 600 ~/.ssh/id_rsa && \
|
||||
chmod 644 ~/.ssh/id_rsa.pub && \
|
||||
echo 'Clés copiées et permissions réglées.'
|
||||
"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
msg_success "Identité clonée avec succès sur ${remote_host}."
|
||||
else
|
||||
msg_error "Le transfert a échoué."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
do_deb_sys_ntp() {
|
||||
msg_info "Configuration de l'heure (Paris) et du NTP..."
|
||||
|
||||
# 1. On règle sur Paris au lieu de UTC
|
||||
$SUDO timedatectl set-timezone Europe/Paris
|
||||
msg_info "Fuseau horaire réglé sur Europe/Paris."
|
||||
|
||||
# 2. Configuration NTP (On ajoute des serveurs français pour la précision)
|
||||
$SUDO tee /etc/systemd/timesyncd.conf <<EOF >/dev/null
|
||||
[Time]
|
||||
NTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org pool.ntp.org
|
||||
FallbackNTP=8.8.8.8 1.1.1.1
|
||||
EOF
|
||||
|
||||
$SUDO timedatectl set-ntp true
|
||||
$SUDO systemctl restart systemd-timesyncd
|
||||
|
||||
msg_success "Heure locale réglée : $(date)"
|
||||
}
|
||||
|
||||
do_deb_sys_ufw() {
|
||||
local ports_to_allow=() input_port="" current_ssh_port
|
||||
local ports_to_allow=() input_port="" current_ssh_port current_rules
|
||||
|
||||
msg_info "Configuration interactive du Firewall UFW"
|
||||
|
||||
# 1. On commence par les bases
|
||||
$SUDO ufw default deny incoming
|
||||
$SUDO ufw default allow outgoing
|
||||
# 1. On montre l'existant SANS y toucher
|
||||
current_rules=$($SUDO ufw status | grep -v "(v6)" | grep "ALLOW" | awk '{print $1}' | cut -d'/' -f1 | tr '\n' ' ')
|
||||
if [[ -n "$current_rules" ]]; then
|
||||
echo -e "${COLOR_YELLOW}Ports actuellement ouverts : ${COLOR_WHITE}${current_rules}${NONE}"
|
||||
msg_warning "Toutes les autres règles existantes seront supprimées"
|
||||
msg_warning "Veuillez saisir tous les ports à ouvrir"
|
||||
msg_warning "Même si il étaient déjà ouvert avant.\n"
|
||||
fi
|
||||
|
||||
# 2. Boucle de saisie des ports
|
||||
# 2. Boucle de saisie (on remplit uniquement le tableau en mémoire)
|
||||
while true; do
|
||||
read -p "Entrez un port à ouvrir (ou 'f' pour terminer) : " input_port
|
||||
|
||||
[[ "$input_port" == "f" ]] && break
|
||||
|
||||
# Validation : est-ce un nombre ?
|
||||
if [[ ! "$input_port" =~ ^[0-9]+$ ]]; then
|
||||
msg_error "Veuillez entrer un numéro de port valide (chiffres uniquement)."
|
||||
msg_error "Port invalide."
|
||||
continue
|
||||
fi
|
||||
|
||||
# Gestion des DOUBLONS
|
||||
if [[ " ${ports_to_allow[@]} " =~ " ${input_port} " ]]; then
|
||||
msg_warning "Le port $input_port est déjà dans votre liste de saisie."
|
||||
msg_warning "Déjà dans la liste."
|
||||
else
|
||||
ports_to_allow+=("$input_port")
|
||||
msg_success "Port $input_port ajouté à la file d'attente."
|
||||
fi
|
||||
done
|
||||
|
||||
# 3. Sécurité SSH (vérification si le port 22 ou le port courant est là)
|
||||
# On récupère le port SSH actuel pour éviter de se lock
|
||||
# 3. Vérification de sécurité SSH (Toujours en mémoire)
|
||||
current_ssh_port=$(ss -tlnp | grep sshd | awk '{print $4}' | awk -F':' '{print $NF}' | head -n1)
|
||||
current_ssh_port=${current_ssh_port:-22}
|
||||
|
||||
if [[ ! " ${ports_to_allow[@]} " =~ " ${current_ssh_port} " ]]; then
|
||||
msg_warning "ATTENTION : Votre port SSH ($current_ssh_port) n'est pas dans la liste !"
|
||||
read -p "Voulez-vous l'ajouter par sécurité ? (O/n) : " add_ssh
|
||||
msg_warning "ATTENTION : Votre port SSH ($current_ssh_port) n'est pas inclus !"
|
||||
read -p "L'ajouter ? (O/n) : " add_ssh
|
||||
[[ "$add_ssh" != "n" ]] && ports_to_allow+=("$current_ssh_port")
|
||||
fi
|
||||
|
||||
# 4. Application des règles sans doublons dans UFW
|
||||
msg_info "Application des règles..."
|
||||
# 4. LE MOMENT CRITIQUE : Confirmation avant application
|
||||
echo -e "\n${COLOR_YELLOW}RÉCAPITULATIF :${NONE}"
|
||||
echo -e "Les ports suivants vont être ouverts : ${COLOR_LIGHT_BLUE}${ports_to_allow[*]}${NONE}"
|
||||
msg_error "Toutes les autres règles existantes seront supprimées."
|
||||
|
||||
read -p "Appliquer ces changements maintenant ? (o/N) : " confirm
|
||||
if [[ "$confirm" != "o" && "$confirm" != "O" ]]; then
|
||||
msg_info "Action annulée. Le firewall n'a pas été modifié."
|
||||
return
|
||||
fi
|
||||
|
||||
# 5. APPLICATION RÉELLE (Seulement si confirmé)
|
||||
msg_info "Application des modifications..."
|
||||
|
||||
# On reset seulement maintenant
|
||||
$SUDO ufw --force reset >/dev/null
|
||||
$SUDO ufw default deny incoming
|
||||
$SUDO ufw default allow outgoing
|
||||
|
||||
for port in "${ports_to_allow[@]}"; do
|
||||
# On utilise /tcp par défaut pour être strict comme on l'a dit
|
||||
$SUDO ufw allow "$port"/tcp >/dev/null
|
||||
done
|
||||
|
||||
# 5. Désactiver l'IPv6 dans UFW
|
||||
msg_info "Desactivation de l IP v6..."
|
||||
$SUDO sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw
|
||||
|
||||
# 6. Activation finale
|
||||
if $SUDO ufw --force enable; then
|
||||
msg_success "Firewall activé avec les ports : ${ports_to_allow[*]}"
|
||||
msg_success "Firewall mis à jour et activé."
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -198,8 +351,20 @@ do_deb_sys_zabbix(){
|
|||
}
|
||||
|
||||
do_deb_sys_ipv6(){
|
||||
echo "net.ipv6.conf.all.disable_ipv6 = 1" | $SUDO tee -a /etc/sysctl.conf > /dev/null && $SUDO sysctl -p
|
||||
msg_success "IP V6 désactivée"
|
||||
# Application des paramètres sysctl
|
||||
# On cible 'all', 'default' et 'lo' (loopback)
|
||||
$SUDO sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null
|
||||
$SUDO sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null
|
||||
$SUDO sysctl -w net.ipv6.conf.lo.disable_ipv6=1 >/dev/null
|
||||
|
||||
# Rendre les changements persistants après redémarrage
|
||||
$SUDO cat <<EOF > /etc/sysctl.d/99-disable-ipv6.conf
|
||||
net.ipv6.conf.all.disable_ipv6 = 1
|
||||
net.ipv6.conf.default.disable_ipv6 = 1
|
||||
net.ipv6.conf.lo.disable_ipv6 = 1
|
||||
EOF
|
||||
|
||||
msg_success "IPv6 désactivé avec succès"
|
||||
}
|
||||
|
||||
do_deb_sys_mail(){
|
||||
|
|
|
|||
13
func/git.sh
13
func/git.sh
|
|
@ -11,4 +11,17 @@ function git-reset(){
|
|||
git clean -fd
|
||||
|
||||
echo -e "${COLOR_GREEN}✅ Dépôt synchronisé et nettoyé.${NONE}"
|
||||
}
|
||||
|
||||
function git-clone(){
|
||||
|
||||
[[ -z "$1" ]] && echo "Veuillez préciser l'adresse d'un dépôt Git" && return 1
|
||||
|
||||
git init
|
||||
git remote add origin "$1"
|
||||
git fetch
|
||||
git reset --hard origin/main
|
||||
git clean -fd
|
||||
|
||||
echo -e "${COLOR_GREEN}✅ Dépôt cloné.${NONE}"
|
||||
}
|
||||
|
|
@ -57,5 +57,6 @@ fi
|
|||
. "${WELCOME_SCRIPT_PATH}/func/git.sh"
|
||||
|
||||
alias gsync='git-reset'
|
||||
alias gclone='git-clone'
|
||||
#endregion
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ fi
|
|||
SUDO=""
|
||||
[[ "$EUID" -ne 0 ]] && command -v sudo >/dev/null 2>&1 && SUDO="sudo"
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
RSA_KEY_FILE="$HOME/.ssh/id_rsa"
|
||||
|
||||
# Vérification JQ (une seule fois)
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
echo -e "${COLOR_YELLOW}⚡ JQ manquant... installation...${NONE}"
|
||||
|
|
@ -99,7 +102,7 @@ if [[ $nb_actions -eq 0 ]]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
emsg_info "Lancement de $nb_actions tâche(s) sélectionnée(s)..."
|
||||
msg_info "Lancement de $nb_actions tâche(s) sélectionnée(s)..."
|
||||
for id in "${selected_ids[@]}"; do
|
||||
[[ -z "$id" ]] && continue
|
||||
# Trouver l'index original pour cet ID
|
||||
|
|
|
|||
27
tool/ipv6.sh
27
tool/ipv6.sh
|
|
@ -1,27 +0,0 @@
|
|||
disable_ipv6()
|
||||
{
|
||||
local status
|
||||
|
||||
# Vérification des droits root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
status=$(status_text error "Droits root requis pour modifier sysctl")
|
||||
format_line "IPv6" "$status"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Application des paramètres sysctl
|
||||
# On cible 'all', 'default' et 'lo' (loopback)
|
||||
sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null
|
||||
sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null
|
||||
sysctl -w net.ipv6.conf.lo.disable_ipv6=1 >/dev/null
|
||||
|
||||
# Rendre les changements persistants après redémarrage
|
||||
cat <<EOF > /etc/sysctl.d/99-disable-ipv6.conf
|
||||
net.ipv6.conf.all.disable_ipv6 = 1
|
||||
net.ipv6.conf.default.disable_ipv6 = 1
|
||||
net.ipv6.conf.lo.disable_ipv6 = 1
|
||||
EOF
|
||||
|
||||
status=$(status_text success "IPv6 désactivé avec succès")
|
||||
format_line "IPv6" "$status"
|
||||
}
|
||||
Loading…
Reference in New Issue