Dans cet article, je vais vous expliquer comment configurer un serveur SFTP à l'aide de MySecureShell sur Ubuntu 18.04. SFTP est un moyen sécurisé de transférer des fichiers à l'aide d'une connexion SSH cryptée. Bien qu'il soit largement pris en charge par les clients FTP modernes, il s'agit d'un protocole complètement différent de FTP (File Transfer Protocol).
Vous pourriez me demander pourquoi MySecureShell au lieu du serveur FTP traditionnel. Voici les quelques fonctionnalités,
- Transfert de données sécurisé via SSH
- Pas besoin de gérer les certificats SSL
- Facile à installer et à configurer
- Limiter l'utilisation de la bande passante
- Restrictions relatives aux fichiers et dossiers
- Liste de contrôle d'accès à l'aide de l'IP/du nom d'utilisateur/des groupes/de l'hôte virtuel
- Restreindre les utilisateurs à n'avoir que sftp (l'accès au shell est désactivé par défaut)
- Système de journalisation amélioré
Commençons donc d'abord par l'installation, des connaissances de base en FTP sont suffisantes pour comprendre ce tutoriel.
Installation
À partir d'ubuntu 15.04 et supérieur, MySecureShell est disponible dans les référentiels par défaut. Nous utilisons Ubuntu 18.04 pour cette installation. Exécutez simplement les commandes ci-dessous pour installer MySecureShell.
apt-get install mysecureshell
S'ils ne sont pas disponibles, suivez les étapes, assurez-vous que toutes les étapes suivantes sont exécutées en tant qu'utilisateur root.
vim /etc/apt/sources.list
Ajouter les 2 lignes suivantes,
deb http://mysecureshell.free.fr/repository/index.php/ubuntu testing main
deb-src http://mysecureshell.free.fr/repository/index.php/ubuntu testing main
Ajoutez maintenant la clé gpg en tant que,
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys E328F22B; gpg --export E328F22B | apt-key add
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 7601D76CE328F22B: public key "MySecureShell repository " imported
gpg: Total number processed: 1
gpg: imported: 1
OK
Une fois le référentiel ajouté, vous pouvez commencer l'installation
apt-get update
apt-get install mysecureshell
Vous êtes maintenant prêt à démarrer le service et à vérifier son statut
systemctl start mysecureshell.service
systemctl status mysecureshell.service
Exemple de sortie
# systemctl start mysecureshell.service
root@li1004-153:~# systemctl status mysecureshell.service
* mysecureshell.service - LSB: MySecureShell SFTP Server
Loaded: loaded (/etc/init.d/mysecureshell; generated)
Active: active (exited) since Fri 2018-05-18 01:02:17 UTC; 4min 44s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 2322)
CGroup: /system.slice/mysecureshell.service
May 18 01:02:17 004-153 systemd[1]: Starting LSB: MySecureShell SFTP Server...
May 18 01:02:17 004-153 mysecureshell[1314]: Starting MySecureShell SFTP Server: mysecureshell is now online with restricted features
May 18 01:02:17 004-153 mysecureshell[1314]: Note: To enable all features you have to change mysecureshell binary rights to 4755
May 18 01:02:17 004-153 systemd[1]: Started LSB: MySecureShell SFTP Server.
# systemctl status mysecureshell.service
* mysecureshell.service - LSB: MySecureShell SFTP Server
Loaded: loaded (/etc/init.d/mysecureshell; generated)
Active: active (exited) since Fri 2018-05-18 01:02:17 UTC; 50min ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 2322)
CGroup: /system.slice/mysecureshell.service
May 18 01:02:17 004-153 systemd[1]: Starting LSB: MySecureShell SFTP Server...
May 18 01:02:17 004-153 mysecureshell[1314]: Starting MySecureShell SFTP Server: mysecureshell is now online with restricted features
May 18 01:02:17 004-153 mysecureshell[1314]: Note: To enable all features you have to change mysecureshell binary rights to 4755
May 18 01:02:17 004-153 systemd[1]: Started LSB: MySecureShell SFTP Server.
#
Utilisez les commandes ci-dessous pour arrêter et redémarrer le service mysecureshell
systemctl stop mysecureshell.service
systemctl restart mysecureshell.service
Création d'utilisateur SFTP MySecureShell
Tout d'abord, nous devons trouver l'emplacement d'installation de MySecureShell,
whereis mysecureshell
Comme vous le voyez dans la sortie ci-dessous, le chemin d'installation de mysecureshell est /usr/bin/mysecureshell.
mysecureshell: /usr/bin/mysecureshell /usr/share/man/man8/mysecureshell.8.gz
Maintenant, après avoir vérifié le chemin, créons un utilisateur
useradd -m -s /usr/bin/mysecureshell testsftpuser
passwd testsftpuser
Comme vous le voyez dans la commande ci-dessus, nous créons un utilisateur et attribuons le chemin de l'emplacement mysecureshell. De plus, vous pouvez attribuer aux utilisateurs existants l'accès et l'utilisation de MySecureShell à l'aide de la commande :
sudo usermod -s /usr/bin/mysecureshell testsftpuser
Connexion utilisateur
Désormais, l'utilisateur "testsftpuser" peut se connecter à votre serveur SFTP à partir de vos clients comme indiqué ci-dessous avec l'adresse IP de votre machine,
sftp testsftpuser@45.33.54.153
IP de votre machine
Connected to 45.33.54.153
sftp>
En outre, vous pouvez vous connecter à votre serveur SFTP avec n'importe quel client graphique tel que FileZilla à partir de votre système client.
Commandes MySecureShell
MySecureShell dispose de l'ensemble de commandes suivant pour administrer votre serveur SFTP.
- sftp-admin
- sftp-kill
- sftp-état
- utilisateur sftp
- sftp-verif
- sftp-qui
sftp-admin
Cette commande permet de gérer un MySecureShell à distance.
sftp-admin [ssh options] user@hostname
sftp-kill
Cela déconnectera l'utilisateur du serveur FTP.
sftp-kill testsftpuser
Kill testsftpuser on PID 1961
(Press "Y" when requested)
sftp-état
Afficher l'état du serveur ftp
# sftp-state
Exemple de sortie
# sftp-state
Server is up
#
utilisateur sftp
Cette commande vous permet de créer un utilisateur SFTP, sans spécifier le chemin que nous avons fait auparavant.
sftp-user create test
Lister les utilisateurs SFTP
sftp-user list
test
testsftpuser
La commande supprimera le test utilisateur
sftp-user delete test
sftp-verif
Cette commande vérifiera et corrigera les problèmes sur un serveur MySecureShell.
sftp-verif
################################################################################
MySecureShell Verification Tool
################################################################################
### Verifing file existance ###
/bin/MySecureShell [ OK ]
/bin/sftp-who [ OK ]
/bin/sftp-kill [ OK ]
/bin/sftp-state [ OK ]
/bin/sftp-admin [ OK ]
/bin/sftp-verif [ OK ]
/bin/sftp-user [ OK ]
### Verifing rights ###
Verifing file rights of /etc/ssh/sftp_config [ OK ]
Verifing file rights of /bin/sftp-who [ OK ]
Verifing file rights of /bin/sftp-verif [ OK ]
Verifing file rights of /bin/sftp-user [ OK ]
Verifing file rights of /bin/sftp-kill [ OK ]
Verifing file rights of /bin/sftp-state [ OK ]
Verifing file rights of /bin/sftp-admin [ OK ]
Verifing file rights of /bin/MySecureShell [ OK ]
### Verifing rotation logs ###
Rotation logs have been found [ OK ]
### Verifing server status ###
Verifing server status (ONLINE) [ OK ]
[...]
sftp-qui
Cette commande vous indiquera qui est actuellement connecté au serveur FTP.
sftp-who
# sftp-who
--- 1 / 10 clients ---
Global used bandwidth : 0 bytes/s / 0 bytes/s
PID: 2207 Name: testsftpuser IP: pa39-178-9-194.pa.nsw.optusnet.com.au
Home: /home/testsftpuser
Status: idle Path: /
File:
Connected: 2018/05/18 01:30:50 [since 03mins 59s]
Speed: Download: 0 bytes/s [5.00 kbytes/s] Upload: 0 bytes/s [unlimited]
Total: Download: 924 bytes Upload: 100 bytes
#
Configuration
Le fichier de configuration principal de MySecureShell est /etc/ssh/sftp_config. Vous pouvez configurer la bande passante de téléchargement et de téléchargement, les utilisateurs de chroot, le nombre maximum de connexions, etc. dans le fichier de configuration. Vous pouvez définir ces options pour tout le monde ou uniquement pour un groupe particulier.
cat /etc/ssh/sftp_config
Balise par défaut
La balise par défaut est utilisée si vous souhaitez appliquer une configuration pour tous vos utilisateurs
#Default rules for everybody
Default
GlobalDownload 50k #total speed download for all clients
# o -> bytes k -> kilo bytes m -> mega bytes
GlobalUpload 0 #total speed download for all clients (0 for unlimited)
Download 5k #limit speed download for each connection
Upload 0 #unlimit speed upload for each connection
StayAtHome true #limit client to his home
VirtualChroot true #fake a chroot to the home account
LimitConnection 10 #max connection for the server sftp
LimitConnectionByUser 1 #max connection for the account
LimitConnectionByIP 2 #max connection by ip for the account
Home /home/$USER #overrite home of the user but if you want you can use
# environment variable (ie: Home /home/$USER)
IdleTimeOut 5m #(in second) deconnect client is idle too long time
ResolveIP true #resolve ip to dns
LogFile /var/log/sftp-server_ftp.log
# IgnoreHidden true #treat all hidden files as if they don't exist
# DirFakeUser true #Hide real file/directory owner (just change displayed permissions)
# DirFakeGroup true #Hide real file/directory group (just change displayed permissions)
# DirFakeMode 0400 #Hide real file/directory rights (just change displayed permissions)
#Add execution right for directory if read right is set
HideNoAccess true #Hide file/directory which user has no access
# MaxOpenFilesForUser 20 #limit user to open x files on same time
# MaxWriteFilesForUser 10 #limit user to x upload on same time
# MaxReadFilesForUser 10 #limit user to x download on same time
DefaultRights 0640 0750 #Set default rights for new file and new directory
# MinimumRights 0400 0700 #Set minimum rights for files and dirs
ShowLinksAsLinks false #show links as their destinations
# ConnectionMaxLife 1d #limits connection lifetime to 1 day
# Charset "ISO-8859-15" #set charset of computer
Default
Remarque : Les journaux ne sont pas activés par défaut, vous pouvez définir l'emplacement du fichier journal dans le fichier de configuration.
Balise FileSpec
La balise FileSpec est conçue pour créer des filtres sur les fichiers et les répertoires.
# Only check against filenames/folder names only
FileSpec
UseFullPath false
# we can use multiple deny/allow directives for clarity
Order DenyAllow
Deny ".*.exe$"
Deny ".*.sh$"
Allow all
FileSpec
Tag utilisateur
La balise utilisateur définit pour un dossier d'accueil utilisateur spécifique
User tom
Home /home/tom
User
Balise VirtualHost
La balise VirtualHost peut définir des limitations basées sur le nom de l'hôte virtuel
# Set home directory for this virtualhost
VirtualHost
Home /var/www/html/www.mysftpsite.com
# Set dedicated log file
LogFile /var/log/sftp/www.mysftpsite.com
# Override the maximum number of connection per user
LimitConnectionByUser 5
VirtualHost
Installation de gFTP
Maintenant, essayons l'installation de gFTP sur Ubuntu 18.04, suivez les étapes ci-dessous,
sudo apt-get install gftp
- Ouvrir gFTP à partir des applications
- Entrez l'adresse IP du serveur SFTP, le numéro de port (par défaut/spécifié lors de la configuration du serveur), le nom d'utilisateur et le mot de passe et utilisez SSH2. Appuyez sur Entrée pour vous connecter
- Si la tentative de connexion a réussi. Nous sommes connectés à SFTP via gFTP
C'est tout pour le moment. À ce stade, vous aurez un serveur SFTP fonctionnel. J'espère que vous aimez ce tutoriel et que je vous ai laissé une partie de configuration pour l'auto-apprentissage, veuillez commenter la configuration que vous avez faite pour vous-même, ce qui aide notre communauté Linoxide à apprendre et à grandir. Merci.