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)

De AJLSM
Aller à la navigation Aller à la recherche

Migration serveur FTP (eole2) vers SFTP (eole3) avec ZFS

[modifier | modifier le wikicode]

Voir aussi :

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

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

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

./import_sftp_users.sh

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

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

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]

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

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)

ZFS → OK SSH → OK SFTP → OK UID/GID → OK Import → OK RSYNC → À lancer