rss
twitter
  • Showcase
  • Carrières
  • Support
  • GitLab
  • Espace client
  • Contact

Ubuntu 14 chroot sftp et rsync

0

Article mis à jour le 26/03/2016

INDEX

Configuration du deamon OpenSSH pour chrooter certains users

sudo nano /etc/ssh/sshd_config

Sur une instance EC2, autoriser le login par password :

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication yes

Ne pas utiliser le serveur SFTP d’OpenSSH :

#Subsystem sftp /usr/lib/openssh/sftp-server

Utiliser le serveur sftp par défaut, et chrooter les utilisateurs du groupe chrootedusers dans le dossier /var/chroot/%u (où %u est le login) :

Subsystem sftp internal-sftp

Match Group chrootedusers
ChrootDirectory /var/chroot/%u
#ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

Au passage on peut désactiver la vérification du DNS au login, si votre ISP n’a pas associé bien le reverse DNS à votre IP (coucou Completel tu te reconnais ?) :

UseDNS no

Redémarrer le service SSH :

sudo service ssh restart
    ssh stop/waiting
    ssh start/running, process 11670

 

Créer le groupe chrootedusers et configurer le dossier de jail

sudo groupadd chrootedusers

Configurer le dossier de chroot

/$ cd /var/
/var$ sudo mkdir chroot
/var$ cd chroot/

Créer les répertoires des exécutables, puis copier bash et rsync :

/var/chroot$ sudo mkdir {bin,lib,lib64}

/var/chroot$ sudo cp /bin/bash bin/
/var/chroot$ sudo cp /usr/bin/rsync bin/

/var/chroot$ sudo ldd /bin/bash
    linux-vdso.so.1 => (0x00007fff9f7fe000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f36bf793000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f36bf58f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f36bf1c8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f36bf9c6000)

/var/chroot$ sudo mkdir lib/x86_64-linux-gnu
/var/chroot$ sudo cp -p /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/libtinfo.so.5

etc…

La même chose pour rsync

/var/chroot$ sudo ldd /usr/bin/rsync
    linux-vdso.so.1 => (0x00007fffc6b9d000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f7586286000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f758606d000)
    libpopt.so.0 => /lib/x86_64-linux-gnu/libpopt.so.0 (0x00007f7585e60000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7585a9a000)
    libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f7585895000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7586498000)

/var/chroot$ sudo cp -p /lib/x86_64-linux-gnu/libacl.so.1 lib/x86_64-linux-gnu/libacl.so.1

etc…

Pensez à rire un bon coup en copiant la librairie « saucisse » 😀

Un script qui copie les libs des binaries automatiquement !

U NEED DIS: https://www.metashock.de/2012/11/export-binary-with-lib-dependencies/

Modifier un utilisateur existant

/var/chroot$ sudo nano /etc/passwd

L’utilisateur importé ou précédemment créé devrait ressembler à :

italic_174:x:1031:1031::/home/italic_174:/bin/bash

Mettre / en homedir correspond en fait à /var/chroot/%u définit dans la config d’OpenSSH :

italic_174:x:1032:1032::/:/bin/bash

Penser à lui créer son répertoire perso dans le dossier de jail :

/var/chroot$ sudo mkdir italic_174

Et à l’ajouter dans le groupe des utilisateurs chrootés :

/var/chroot$ sudo usermod -a -G chrootedusers italic_174

Surtout, penser à lui copier les exécutables, étant donné que, chrooté dans /var/chroot/%u l’utilisateur n’aura pas accès à /bin/bash ni même /var/chroot/bin/bash etc.

/var/chroot$ sudo cp -Rr bin/ lib* italic_174/

 

Configuration des fichiers par défaut dans le homedir et création d’un nouvel utilisateur

Pour éviter de se cogner tous les fichiers à copier à chaque fois, on utilise le skeleton lors de la création d’un utilisateur.

/var/chroot$ sudo mkdir skel
/var/chroot$ sudo mv bin/ lib* skel/

L’utilisation dans la commande de création d’un utilisateur :

sudo useradd -U -G chrootedusers -d /var/chroot/<username> -m -k /var/chroot/skel -s /bin/bash <username>

Explications :

  • -U : créer un groupe du même nom que l’utilisateur, et lui affecte
  • -G : ajoute l’utilisateur dans le groupe spécifié
  • -d : configure la création du homedir dans le dossier spécifié
  • -m : demande de créer le homedir
  • -k : indique quel « squelette » utiliser pour créer le homedir
  • -s : le shell voulu pour l’utilisateur, /bin/bash si on veut du rsync over SSH, sinon  /sbin/nologin

Le problème est que le homedir spécifié sera /var/chroot/<username>, alors qu’on a besoin de /. Du coup…

sudo usermod -d / test1

Résultat :

/var/chroot$ id test1
uid=1106(test1) gid=1106(test1) groups=1106(test1),1105(chrootedusers)

Et :

sudo nano /var/etc/passwd
test1:x:1106:1106::/var/chroot/test1:/bin/bash

Petit problème en testant la connexion :

➜  ~  slogin test1@debugg.in
test1@debugg.in's password: 
Write failed: Broken pipe

Pourquoi ?

tail -f /var/log/auth.log 

May 21 00:15:58 ip-172-31-29-241 systemd-logind[1047]: New session 69 of user test1.
May 21 00:15:59 ip-172-31-29-241 sshd[18637]: fatal: bad ownership or modes for chroot directory "/var/chroot/test1"
May 21 00:15:59 ip-172-31-29-241 sshd[18584]: pam_unix(sshd:session): session closed for user test1

Ah ben oui…

/var/chroot$ sudo chown root:root test1

On réessaie :

➜  ~  ssh test1@debugg.in
test1@debugg.in's password: 
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64)

Ça va mieux 🙂

 

 

Test de la connexion en SSH

➜ ~ slogin italic_174@debugg.in
italic_174@debugg.in's password:
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64)

Last login: Tue May 20 21:18:34 2014 from 46.218.202.194

Vérifions tout d’abord que l’on est bien chrooté :

-bash-4.3$ pwd
/

Ensuite, que l’on a accès à rsync mais pas aux autres commandes :

-bash-4.3$ cp
-bash: cp: command not found
-bash-4.3$ rsync
rsync version 3.1.0 protocol version 31

 

 

Restriction de la connexion par mot de passe par IP

sudo nano /etc/ssh/sshd_config

ChallengeResponseAuthentication no
PasswordAuthentication no

Et ajouter en fin de fichier

Match Address XXX.XXX.XXX.XXX
PasswordAuthentication yes

Récupération d’anciens utilisateurs

S’assurer que l’utilisateur est bien dans le groupe chrootedusers :

getent group chrootedusers

Si tel n’était pas le cas :

sudo usermod -G chrootedusers leclaireur_227

Ne pas oublier pour prendre en compte ce changement :

sudo update-passwd

Test de transfert en SFTP

ScreenShot 2014-05-20 à 20.28.17

Pour contrôler ce qui se passe durant l’identification :

tail -f /var/log/auth.log

May 20 20:27:39 ip-172-31-29-241 sshd[12077]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
May 20 20:27:39 ip-172-31-29-241 sshd[12077]: Accepted password for italic_174 from 46.218.202.201 port 59818 ssh2
May 20 20:27:39 ip-172-31-29-241 sshd[12077]: pam_unix(sshd:session): session opened for user italic_174 by (uid=0)
May 20 20:27:39 ip-172-31-29-241 systemd-logind[1047]: New session 14 of user italic_174.

WTF : Could not load host key: /etc/ssh/ssh_host_ed25519_key

D’après mes recherches, c’est un bug dans OpenSSH. Pas bien méchant mais quand même un bug. Bravo les gars. Ça se corrige comme ça :

/var/chroot$ sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ed25519_key -N ''
Generating public/private ecdsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.
Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub.
The key fingerprint is:
9c:9f:88:53:ca:2d:26:6f:7f:45:95:0f:fd:8a:ec:59 root@ip-172-31-29-241
The key's randomart image is:
+--[ECDSA 256]---+
| o |
| + .|
| . o.|
| . . . o|
| S o . . |
| . = o .+ E |
| . B o oo o |
| +.o . o |
| ..... |
+-----------------+

Anyway, nous sommes loggés.

Problème :

ScreenShot 2014-05-20 à 20.31.41

Ce qui est somme toute logique, étant donné que /var/chroot/italic_174 appartient à root.
Il faut donc créer un (ou plusieurs) sous-dossiers appartenant à l’utilisateur :

/var/chroot$ cd italic_174/
/var/chroot/italic_174$ sudo mkdir www
/var/chroot/italic_174$ sudo chown -R italic_174:italic_174 www/

Et voilà, envoyé c’est pesé :

ScreenShot 2014-05-20 à 20.34.13

Je sais, dans la ligne de commande le dossier s’appelle www et sur le screenshot il s’appelle master. La flemme.

 

Test de transfert via  rsync

En ligne de commande, avec un tunnel SSH :

➜ ~ rsync -azvcu -e "ssh" /Users/germain/Sites/_repositories/7lieues/mailing.e/www/maquette/jpg italic_174@debugg.in:/www/
italic_174@debugg.in's password:
building file list ... done

sent 457 bytes received 20 bytes 136.29 bytes/sec
total size is 9418305 speedup is 19744.87

 

Avec l’excellent DropSync :

NB : les copies d’écrans suivantes sont réalisées dans une version beta privée de DropSync 3 mais le principe reste le même pour DropSync 2.

ScreenShot 2014-05-20 à 20.37.27

Choisir « Remote login »

 

 

ScreenShot 2014-05-20 à 20.40.15

Entrez les paramètres normalement, sans spécifier de path.

Un test de transfert left to right devrait logiquement annoncer le transfert de tout www :

ScreenShot 2014-05-20 à 21.47.29

 

Sauf bien sûr si vous aviez déjà effectué le transfert en ligne de commande avant :

ScreenShot 2014-05-20 à 21.47.03

 

Conclusion

Et bah c’était pas simple, cette histoire.

DATE 20 Mai 2014
by : Germain
Author / Auteur

Social Share / Partager

    Leave a Reply / Répondre Annuler la réponse

    *
    *

    Search the blog

    Blog categories

    • Workflow (1)
    • Front-end : HTML, CSS (13)
    • Front-end : javascript, jQuery (33)
    • Back-end : PHP, CMS (42)
    • Back-end : SQL, MySQL (20)
    • Sysadmin : Linux, Apache, GIT (75)
    • Designers : tools, advice (2)
    • Desktop : OS X (37)
    • Desktop : Microsoft (12)
    • Uncategorized (8)

    ITALIC™ Resources

    • Paramètres de connexion au serveur mail
    • Graphistes : séduire un développeur web
    • Dév front : nos bonnes pratiques
    • Mailing : nos (bonnes ?) pratiques
    • Environnement de travail Mac

    Recent comments

    • Germain dans Inserer un motif dans une forme InDesign
    • Fannie J dans Inserer un motif dans une forme InDesign
    • Rapide benchmarks de clients Git pour Linux (et un peu Windows et Mac aussi) – Haha. dans Git avec SourceTree : ouvrir dans TextMate / ouvrir dans Sublime Text 2
    • Germain dans Ajouter des contacts non-Facebook à Spotify
    • cc dans Ajouter des contacts non-Facebook à Spotify

    Meanwhile, in the office…

    UNEP @ Paysalia

    01 Déc 2015

    Liebig

    22 Sep 2015

    Mercedes-Benz

    17 Sep 2015

    Office National du Tourisme Tunisien

    21 Août 2015

    Serious Game

    17 Juil 2015

    Engie

    22 Juin 2015

    UN Guiding Principles Reporting Framework

    21 Mar 2015

    Dites-le avec Nutella®

    21 Fév 2015

    HEC

    21 Déc 2014

    AREVA

    21 Déc 2014
    © 2008-2017 ITALIC™ • 8 bis rue Abel • 75012 PARIS • Tel +33 (0)1 48 44 46 35 • RCS PARIS 508 228 772 • Powered by WordPress & GoodLayers
    Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site web.
    Cookie settingsACCEPTER
    Manage consent

    Privacy Overview

    This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
    Necessary
    Toujours activé
    Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
    Non-necessary
    Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
    Enregistrer & appliquer