Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Transfert des comptes FTP vers SFTP (d'un serveur à un autre)
Migration serveur FTP (eole2) vers SFTP (eole3) avec ZFS
[modifier | modifier le wikicode]Voir aussi :
- Installation_de_eole3_avec_stockage_ZFS_et_migration_FTP_vers_SFTP
- Mise_en_place_de_Cocckpit_et_du_module_cockpit-zfs
Objectif
[modifier | modifier le wikicode]Remplacer le serveur FTP (eole2) par un nouveau serveur (eole3) en :
- conservant les UID/GID existants
- migrant les données (~50 To)
- passant de FTP → SFTP sécurisé
- utilisant ZFS pour le stockage
1. Préparation du serveur eole3
[modifier | modifier le wikicode]Installation de base
[modifier | modifier le wikicode]apt update
apt install -y openssh-server rsync acl vim tmux tree nfs-common
Configuration hostname
[modifier | modifier le wikicode]hostnamectl set-hostname eole3
Configuration /etc/hosts
[modifier | modifier le wikicode]51.178.110.230 ns3254339.ip-51-178-110.eu ns3254339 eole3 eole3.ajlsm.com
51.210.192.214 beotos3
193.70.47.97 eole2
146.59.253.173 saturne
2. Configuration ZFS
[modifier | modifier le wikicode]Création du pool
[modifier | modifier le wikicode]wipefs -a /dev/sd[a-f]
zpool create -o ashift=12 \
-O compression=lz4 \ -O atime=off \ -O xattr=sa \ -O acltype=posixacl \ data raidz2 \ /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
Montage sur /var/data
[modifier | modifier le wikicode]zfs set mountpoint=/var/data data
zfs mount data
Vérification
[modifier | modifier le wikicode]zfs list
mount | grep /var/data
df -h /var/data
Résultat attendu :
- ZFS monté sur /var/data
- espace ~88T
3. Configuration SSH / SFTP
[modifier | modifier le wikicode]Configuration sshd
[modifier | modifier le wikicode]Modifier /etc/ssh/sshd_config :
PasswordAuthentication yes
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding no
# Supprimé et remplacé dans sshd_config.d/.. par conf spécifique pour group eole3-sftp
# Subsystem sftp internal-sftp
# Match Group pleade
# AllowTcpForwarding no
# PermitTunnel no
# X11Forwarding no
Correction Ubuntu cloud
[modifier | modifier le wikicode]Modifier :
/etc/ssh/sshd_config.d/60-cloudimg-settings.conf
Remplacer :
PasswordAuthentication no
par :
PasswordAuthentication yes
Redémarrage
[modifier | modifier le wikicode]sshd -t
systemctl restart ssh
systemctl restart ssh.socket
4. Export des utilisateurs depuis eole2
[modifier | modifier le wikicode]Sur eole2 :
/opt/sftp_migration/export_ftp_users.sh
#!/usr/bin/env bash
set -euo pipefail
OUTPUT_FILE="${1:-/root/ftp_users_export.tsv}"
echo "username uid gid groupname home shell shadow_hash" > "$OUTPUT_FILE"
while IFS=: read -r username x uid gid comment home shell; do
[[ "$home" == /var/data/* ]] || continue
[[ "$uid" -ge 1000 ]] || continue
[[ -d "$home" ]] || continue
groupname=$(getent group "$gid" | cut -d: -f1)
shadow_hash=$(getent shadow "$username" | cut -d: -f2)
echo -e "${username}\t${uid}\t${gid}\t${groupname}\t${home}\t${shell}\t${shadow_hash}"
done < /etc/passwd >> "$OUTPUT_FILE"
echo "Export terminé : $OUTPUT_FILE"
Vérification extrait :
username uid gid groupname home shell shadow_hash
ad53 1000 1000 pleade /var/data/ad53-data /usr/sbin/nologin $6$11927350$
canigo 1001 1000 pleade /var/data/canigo-data /usr/sbin/nologin !$6$11926761
ens-lyon 1002 1000 pleade /var/data/ens-lyon-data /usr/sbin/nologin $6$11926870$
cdf 1003 1000 pleade /var/data/cdf-data /usr/sbin/nologin $6$11927043$
ad64 1004 1000 pleade /var/data/ad64-data /usr/sbin/nologin $6$11927147$
formation1 1005 1000 pleade /var/data/formation1-data /usr/sbin/nologin $6$11927228$
Transfert :
scp /opt/sftp_migration/ftp_users_export.tsv ubuntu@eole3:/root/
5. Préparation des UID/GID sur eole3
[modifier | modifier le wikicode]IMPORTANT : alignement avec eole2
- pleade = GID 1000
- utilisateurs = UID identiques
Correction groupe pleade
[modifier | modifier le wikicode]groupmod -g 1000 pleade
Correction utilisateur ubuntu
[modifier | modifier le wikicode]usermod -u 3000 ubuntu
groupmod -g 3000 ubuntu
chown -R ubuntu:ubuntu /home/ubuntu
Correction utilisateur admin
[modifier | modifier le wikicode]usermod -u 3001 adminajl
groupmod -g 3001 adminajl
chown -R adminajl:adminajl /home/adminajl
6. Import des utilisateurs SFTP
[modifier | modifier le wikicode]Script : /opt/sftp_migration/import_sftp_users.sh
#!/usr/bin/env bash
set -euo pipefail
IMPORT_FILE="${1:-/root/ftp_users_export.tsv}"
if [[ ! -f "$IMPORT_FILE" ]]; then
echo "Fichier introuvable : $IMPORT_FILE"
exit 1
fi
echo "=== Import des utilisateurs SFTP ==="
while IFS=$'\t' read -r username uid gid groupname home shell shadow_hash; do
# skip header
[[ "$username" == "username" ]] && continue
echo "→ Traitement $username ($home)"
# créer groupe si nécessaire
if ! getent group "$groupname" >/dev/null; then
echo " - création groupe $groupname"
groupadd "$groupname"
fi
# vérifier si user existe déjà
if id "$username" &>/dev/null; then
echo " - utilisateur déjà existant, skip"
continue
fi
# créer utilisateur SANS créer le home automatiquement
useradd \
-u "$uid" \
-g "$groupname" \
-d "$home" \
-s /usr/sbin/nologin \
-M \
"$username"
# appliquer mot de passe
usermod -p "$shadow_hash" "$username"
# créer structure
mkdir -p "$home"
mkdir -p "$home/data"
# droits chroot
chown root:root "$home"
chmod 755 "$home"
# droits data (zone écriture)
chown "$username:$groupname" "$home/data"
chmod 755 "$home/data"
done < "$IMPORT_FILE"
echo "=== Import terminé ==="
Fonction :
- recrée users avec UID/GID
- crée arborescence
- prépare chroot
Lancement
[modifier | modifier le wikicode]./import_sftp_users.sh
Vérification
[modifier | modifier le wikicode]id ad53
getent group pleade
ls -ld /var/data/ad53-data
ls -ld /var/data/ad53-data/data
Résultat attendu :
- home = root:root
- data = user:pleade
7. Configuration SSH sans mot de passe
[modifier | modifier le wikicode]Sur eole3 :
ssh-keygen -t ed25519
ssh-copy-id root@193.70.47.97
Test
[modifier | modifier le wikicode]ssh root@193.70.47.97
Connexion sans mot de passe attendue
8. Script de migration des données
[modifier | modifier le wikicode]Script : /opt/sftp_migration/rsync_sftp_data.sh
Fonction :
- copie données
- conserve droits
- logs
- parallélisation
9. Test de migration
[modifier | modifier le wikicode]grep '^siges' /root/ftp_users_export.tsv > /root/test.tsv
/root/rsync_sftp_data.sh /root/test.tsv root@193.70.47.97 1
Vérification
[modifier | modifier le wikicode]ls /var/data/siges-data/data
10. Migration complète
[modifier | modifier le wikicode]/root/rsync_sftp_data.sh /root/ftp_users_export.tsv root@193.70.47.97 3
11. Points d’attention
[modifier | modifier le wikicode]UID/GID
[modifier | modifier le wikicode]DOIVENT rester identiques à eole2
Structure SFTP
[modifier | modifier le wikicode]/var/data/<client>-data/ → root:root
/var/data/<client>-data/data/ → client:pleade
Cas particulier
[modifier | modifier le wikicode]ad44-data → NFS (beotos3)
→ traiter séparément
ZFS
[modifier | modifier le wikicode]déjà actif sur /var/data
12. Étape suivante
[modifier | modifier le wikicode]- activation chroot strict
- arrêt FTP eole2
- bascule DNS
- rsync final (delta)
Statut actuel
[modifier | modifier le wikicode]ZFS → OK SSH → OK SFTP → OK UID/GID → OK Import → OK RSYNC → À lancer