J’ai testé (pas longtemps) Nextcloud

NextCloud, c’est le fork d’ownCloud, qui se veut être une plateforme collaborative de stockage et partage de fichiers dans le nuage.

Utilisant au quotidien OneDrive et iCloud, il m’était impossible de ne pas finir par essayer Nextcloud pour avoir un espace de sauvegarde de mes deux autres services mais hébergé par mes soins. Les arguments avancés par Nextcloud sont plutôt flatteurs : c’est un logiciel libre, les données sont auto-hébergées et peuvent être encryptées, les clients sont disponibles pour quasiment tous les OS usuels, que ce soit desktop ou mobile.

Je me documente sur les configurations nécessaires, et monte sur un petit VPS (1 core Xeon et 2 Go de RAM, suffisant pour réaliser des tests) une distribution Ubuntu 18.04 LTS et me lance pour l’installation de Nextcloud. Plutôt bien documentée me dis-je, avant de tomber sur mon premier couac – et il va y en avoir un paquet, sans mauvais jeu de mots – : l’installation par snap ne fonctionne pas et n’opère aucune modification sur mon système, je dois donc installer tous les paquets à la main. Admettons.

J’installe donc Apache, mariaDB et php conformément à ce qui est indiqué. En suivant scrupuleusement la documentation, j’arrive donc avec une base de données qui n’est pas configurée et un Apache incapable d’exécuter le moindre bout de code php (en cause : libapache-mod-php qui visiblement ne fonctionne pas, j’ai dû utiliser php-fcm). Passionnant ; je dois donc me rendre sur divers sites ou faire appel à mes connaissances perdues d’Apache pour réussir à faire fonctionner php. La configuration de mariaDB/MySQL ne pose pas de problèmes, il faut simplement se souvenir de finir le déploiement pour configurer un mot de passe root, puis créer un user lambda sur le SGBD pour lui donner les privilèges sur la future base nextcloud. Après quelques heures de perdues, j’arrive enfin sur la page d’accueil, qui m’indique qu’il me manque encore des modules php. L’installation et la configuration d’Apache prend quelques secondes et je peux ENFIN finir l’installation de Nextcloud, mo gwai !

Je me rends donc dans les menus et tombe sur des avertissements de sécurité et de conformité par rapport à des best practices. Je dois sécuriser un peu mieux mon infrastructure, changer quelques paramètres dans Apache et php pour rendre l’utilisation de l’outil plus fluide. Si les réglages propres à php se font facilement, les changements dans les configurations de Nextcloud sont bien plus anarchiques. Selon la documentation, je devais modifier le fichier de configuration de Nextcloud pour y définir proprement ma racine web, et relancer le script de vérification d’intégrité. Je suis donc toujours la documentation, modifie proprement ma racine web, définit les IP seules autorisées à se connecter, et relance le script de vérification d’intégrité.

Grave erreur. Très grave erreur. Maintenant, je n’ai plus accès du tout à mon Nextcloud. Non pas car mon IP n’est pas reconnue (en fait, le filtrage par IP dans la configuration ne marche pas du tout, peu importe mon IP j’avais accès à la plateforme, excellent) mais j’arrive directement sur l’arborescence des répertoires d’Apache comme si il n’y avait plus d’index.php ; je ne peux même pas fermer ma session. Changement de navigateur, impossible de me connecter : c’est déjà ça, personne à part moi grâce à ma session active ne peut parcourir le contenu des répertoires. Je cherche donc à faire machine arrière et à remettre la valeur par défaut dans le fichier de configuration concernant mon adresse web : impossible d’exécuter le script de vérification d’intégrité car il ne reconnaît pas l’URL d’origine! Du coup, je me retrouve avec un Nextcloud complètement cassé et inutilisable. J’interroge les forums, j’ai l’impression d’être le seul à utiliser Apache et pas nginx. Finalement, il a fallu que j’aille sur la documentation d’une précédente version de Nextcloud pour y trouver la bonne configuration à donner au site virtuel pour que cela fonctionne. Intéressant.

Et, ça fonctionne ! Je n’ai plus d’avertissements de mauvais réglages – enfin presque, car visiblement mon infrastructure n’est toujours pas bien sécurisée malgré le suivi de la documentation et la vérification d’intégrité, les hash ne sont pas identiques entre ce qu’il veut et ce que j’ai. Visiblement je ne suis pas le seul et j’adopte la bonne vieille méthode qui consiste à tout claquer sous le tapis car j’ai autre chose à faire que de tenter de débugger moi-même, j’aimerais pouvoir vraiment me servir de l’outil, et je me suis dit que je regarderais plus tard : je décide donc de shunter le check d’intégrité comme conseillé sur les forums (sic).

Plutôt satisfait d’avoir un peu lutté pour arriver à quelque chose qui fonctionne, je configure donc l’application, y ajoute 2 ou 3 add-ons, configure l’encryption des données et installe le client sur macOS. Je commence donc par uploader environ 5 Go de données… plutôt devrais-je dire 50 Mo de données car je me heurte bien rapidement à un souci de synchronisation : certains fichiers coincent et bloquent complètement le transfert (pas possible de les zapper pour au moins transférer le reste). Certains fichiers font planter la connexion. Rien de particulier dans les logs, seulement que la connexion se ferme et que les fichiers peuvent pas être écrits. Admettons. Je relance Apache, aucun succès, je relance le serveur complet, aucun succès. Je tente de renommer en local (sur mon Mac, s’entend) les fichiers et le répertoire, aucun succès. Je décide donc de tenter de supprimer les fichiers du serveur : impossible. Que ça soit tout le répertoire ou même chaque fichier à la main : impossible, « erreur inconnue ». Je tente donc de passer outre l’interface web et tente de passer par WebDAV. Je prends donc le lien WebDAV disponible sur la page d’accueil : celui-ci ne fonctionne pas. Encore une fois, je dois aller fouiner dans la documentation d’une ancienne version de Nextcloud pour modifier le lien WebDAV afin qu’il fonctionne. J’accède donc à mes répertoires et tente de supprimer ceux qui posent problème. Impossible : verrouillé par HTTP. Intéressant, ça.

Agacé, je décide donc d’envoyer ce serveur à la poubelle, non sans constater par ailleurs que les fichiers que j’avais uploadé et qui devaient être encryptés lors de l’envoi étaient bel et bien lisibles en clair sur le système de fichiers de l’OS. Super.

Me disant que je suis peut-être une quiche et que j’ai été trop vite sur cet outil, que j’ai loupé quelque chose lors de l’installation, je décide de donner une nouvelle chance à ce produit qui semble pourtant être pétri de qualités lorsqu’il fonctionne. Je jette donc mon dévolu chez un prestataire qui propose de l’hébergement Nextcloud, avec une instance déjà installée clef en mains, où il ne reste juste qu’à configurer ses utilisateurs, ses répertoires et add-ons. Je signe donc pour une offre d’un mois, et accède au même portail que celui que je viens de détruire. Je me connecte sans erreur, pas de message par rapport à l’intégrité (j’avoue que l’idée que les tests aient été désactivés m’a bien effleuré l’esprit), je commence à configurer mes clients et repars pour le même upload d’environ 5 Go de documents. Si le transfert s’effectue apparemment proprement, j’ai quand même de belles erreurs dans le client de synchro qui vire au rouge sur des erreurs d’écriture de clés primaires pour un bon paquet de fichiers. Au final, j’ai un message comme quoi la synchronisation est OK. C’est sans doute psychologique, mais quand on me dit que tout s’est bien passé en rouge et pas en vert ou dans une couleur neutre, j’y crois pas trop. Je regarde rapidement, tout à l’air d’y être… le lendemain, une nouvelle synchro se fait suite à modification et il upload (remplace ?) des fichiers auxquels je n’avais pas du tout touché : est-ce des fichiers qu’il avait oublié la veille ou bien a-t-il remplacé ces fichiers ?.. synchronisation qui ne se fait pas sans son lot d’erreurs SQL. Le test de la petite synchronisation ayant à peu près fonctionné (à vrai dire, je n’avais aucune confiance), je cherche à copier un gros répertoire d’environ 300 Go d’images ISO, de sauvegardes en tout genre. Bien évidemment, ça n’a pas loupé, l’application a commencé à envoyer les fichiers avant de lamentablement se noyer dans diverses erreurs de fichiers non accessibles, de serveur ayant rejeté la requête et d’autres joyeusetés SQL.

Je décide alors de jeter complètement l’éponge sur ce produit qui pourtant, a de beaux arguments, semble avoir de belles fonctionnalités et sur le papier, facile à installer et à déployer, mais desservi par une documentation incomplète, des forums où les participants et contributeurs semblent être complètement perdus dès qu’on sort des erreurs de configuration basique d’Apache ou de php ou de firewall, et surtout, un besoin de tout régler au millimètre près pour avoir un fonctionnement « propre ». Dommage, j’ai même pas pu vraiment profiter de Nextcloud.

Powershell : duplication de groupe ActiveDirectory

Aussi surprenant que cela puisse paraître, il n’est pas possible de dupliquer nativement dans ActiveDirectory un groupe via l’interface graphique. Bien qu’il existe des outils comme Quest permettant de faire ce genre de tâches, il est possible de réaliser une duplication de groupe avec Powershell sans trop se prendre la tête.

Ce script va donc demander à l’utilisateur le nom du groupe d’origine puis le nom du nouveau groupe. Il va copier les informations de base (type de groupe, sécurité, nom, description et membres) pour les réinjecter à l’identique dans le nouveau groupe qui sera créé au même endroit.

Write-Host "ActiveDirectory Group Duplication Script"
Write-Host "========================================"
Write-Host "This script will make a copy of an AD group."
$origgrpname = Read-Host "Input the original group you want to duplicate"
$newgrpname = Read-Host "Input the new group's name"
Write-Host "Working... Depending on the size of your domain or the group, it might take some time..."
$origgrpdtl = Get-ADGroup $origgrpname -Properties Description, DisplayName
$origgrpmbr = Get-ADGroupMember $origgrpname
$path = $origgrpdtl.DistinguishedName.SubString(4+$origgrpname.length,$origgrpdtl.DistinguishedName.Length-4-$origgrpname.Length)
New-ADGroup -Name $newgrpname -GroupScope $origgrpdtl.GroupScope -Description $origgrpdtl.Description -DisplayName $origgrpdtl.DisplayName -GroupCategory $origgrpdtl.GroupCategory -Path $path
foreach($member in $origgrpmbr) {
Add-ADGroupMember $newgrpname $member.samAccountName
}
Write-Host "Duplication process over."
echo "Group $origgrpname has been duplicated to $newgrpname. The new group is located in $path along the original one."
Write-Host "Bye"

J’ai réalisé ce script dans le cadre de création de nouveaux groupes de partages pour un nouveau serveur, il me fallait donc un moyen rapide de recréer plusieurs groupes sans avoir à ajouter à la main les dizaines d’utilisateurs présents. Naturellement, on prendra soin d’exécuter ce script avec un compte ayant suffisamment de privilèges et en faisant attention au nom des groupes puisque je n’ai inclus aucun contrôle de robustesse.

Introduction au Windows Admin Center

Après avoir déployé mon premier Windows Server 2019 sur une plateforme de tests, j’ai été invité à essayer le Windows Admin Center au premier démarrage. Cet outil se veut être le futur de l’administration des plateformes Windows, serveurs et clientes et souhaiterait bien rendre le besoin d’interfaces graphiques sur les serveurs obsolète.

Basé sur une interface web, le Windows Admin Center – que j’appellerai WAC par la suite – est une grosse évolution du Server Manager qui n’avait pas bougé d’un iota ou presque depuis la sortie de Windows Server 2012. Tout comme lui, il fonctionne principalement grâce à WMI et offre un panel d’options pour gérer des serveurs distants (nativement à partir de 2016, avec une installation supplémentaire sur 2012 R2), mais aussi des postes de travail sous Windows 10, des clusters ou des infrastructures plus complètes, en local ou également dans Azure.

Idéalement, on installe le petit MSI d’une soixantaine de méga-octets du WAC sur une machine d’administration et ensuite on attaque cette interface web depuis n’importe quel navigateur, en local ou à distance.

Connexion à l’interface avec prompt de login.

Bien que l’outil soit utilisable en production selon Microsoft, il y a quand même quelques choix de design qui me perturbent : la connexion se fait via un vulgaire prompt et l’outil n’est pas compatible avec Internet Explorer, mais Edge, qui n’est pas disponible sur Windows Server. Cette restriction – techniquement compréhensible – pourrait se révéler handicapante dans certains environnements où l’administration ne se fait qu’à partir d’un serveur et sur lequel aucun autre navigateur est installé.

Au moins Microsoft ne manque pas d’humour quant à l’abandon d’Internet Explorer !

Pour la suite des événements, j’ai donc dû déployer un Firefox sur mon serveur pour naviguer. L’interface est plutôt agréable, typique des produits Microsoft actuels.

La page d’accueil d’un système présente les informations de base, à peu près comme on pouvait les trouver sur le Server Manager avant.

Très peu de dépaysement mais également très peu de nouvelles fonctionnalités. Ce qui est appréciable, c’est que l’on regroupe sous un même outil le Server Manager mais aussi les différentes consoles (regedit, mmc), sans oublier la possibilité d’exécuter du Powershell à distance !

Bon, ça n’a pas fonctionné du premier coup, mais après avoir martelé la touche entrée et saisi mes identifiants, c’est bien passé :

On peut même en théorie se passer des partages administratifs. Cependant, il faudra utiliser un autre navigateur que Firefox car il m’était impossible de parcourir l’arborescence jusqu’au bout. Microsoft ne supporte officiellement que Edge et Chrome – ce qui encore une fois, me paraît être un choix douteux étant donné la réputation de Chrome par rapport au soin apporté concernant la confidentialité des données de navigation.

Le panneau des rôles et fonctionnalités est évidemment inclus dans le WAC

Les fonctionnalités sont plus ou moins les mêmes lorsqu’on administre une station de travail avec Windows 10 ; étant donné qu’il existe déjà des outils de gestion de parc bien installés sur le marché, le WAC devrait rester cantonné à la gestion des serveurs et des infrastructures, d’autant plus qu’il y a de nombreuses intégrations possibles avec Azure (notamment une fonctionnalité de sauvegarde de serveur, que j’aimerais tester dès que possible).

Au final, après quelques heures passées sur l’outil, j’ai plus le sentiment d’avoir à faire à une évolution plus qu’une révolution, même si c’est une petite révolution qui pourra être menée par rapport aux habitudes sur les plateformes Windows. Une évolution, car le WAC ne reste qu’un Server Manager en plus moderne, un peu moins complexe, moins rigide et intégrant différentes consoles MMC ; une révolution car cet outil permet de pousser un peu plus les versions headless (sans interfaces graphiques) de Windows, plus légères et plus facilement administrables à distance. Si les interfaces graphiques avaient un sens pour une facilité d’administration avant et de gestion des fichiers (lorsqu’elles n’étaient pas requises pour un applicatif particulier, évidemment), c’est désormais le cas inverse : elles n’ont plus grand intérêt lorsqu’on peut tout réaliser à distance. Si cela est depuis longtemps possible avec Powershell, les outils de management déployés ici et là sur les stations, les consoles MMC ou encore le Server Manager, le WAC a l’intérêt d’offrir une centralisation sur un seul outil accessible depuis n’importe quelle station du réseau. J’ai hâte de pouvoir utiliser un peu plus cet outil dans un cadre plus consistant que sur une maquette de test. 😀

Vous pouvez télécharger le setup du Windows Admin Center directement sur le site de Microsoft.

Mes premiers pas sur Azure, première partie

Comme vous le savez peut-être déjà, je suis assez captivé par le Cloud en général ; si j’ai touché à quelques produits de petits acteurs, j’ai également utilisé Azure il y a de cela quelques années – 2012 pour être plus précis. Six ans plus tard, je remets le couvert, avec l’intention de creuser plus profondément et de pouvoir comprendre la philosophie, le fonctionnement et les possibilités ouvertes par ce produit qui s’annonce impressionnant. Je vais donc publier mes notes et mon ressenti à ce sujet, en plusieurs fois, qui détailleront ma découverte du produit de Microsoft ; j’espère retransmettre ma curiosité et l’excitation ressentie à l’usage de cette solution et que cela vous donnera envie d’essayer.

Et essayer, rien de plus facile, possédant un crédit de 170 euros valable 30 jours sur simple inscription. Une inscription qui demande quelques informations personnelles, dont un numéro de téléphone valide ainsi qu’un numéro de carte bleue. Mais Microsoft assure qu’elle ne sera pas débitée sans abonnement Azure ou mon consentement après que le crédit d’essai soit épuisé ou expiré.

Premiers pas sur l’interface, c’est quelque peu déroutant.

Les objets sur la gauche, et le tableau de bord au milieu, faisant la part belle aux raccourcis et aux ressources. En fait, les ressources sont les différents objets qui constituent une infrastructure dans Azure. Par exemple, lorsque je vais créer une machine, elle sera découpée en plusieurs ressources : une machine virtuelle, un ou plusieurs disques, une (ou plusieurs) adresses IP, réseaux virtuels, etc.

Droit au but, je vais créer une ressource, une machine virtuelle toute simple, un Windows 10, pour me déployer un bureau. Je clique donc sur le lien de création, et je dois choisir ce que je souhaite installer.

En fait, Azure permet de monter presque tout. Si l’on cherche à développer une application web, il procèdera à la création d’une machine frontend web, une machine backend, un serveur SQL, etc.

C’est parti, je me lance, création d’une VM Windows 10.

La VM fait donc partie d’un pool de ressources (qui, comme je l’ai expliqué plus haut, n’a rien à voir avec un pool de ressources de calcul), et est déployable dans de nombreux datacenters. De nombreuses images sont déployables, dans le cadre de Windows 10 il est même possible de choisir son niveau de mise à jour. Le principal hic concernant la configuration de base est la taille de la VM. En effet, les dénominations sont quelque peu complexes, bien que la tarification estimée au mois soit affichée :
Il existe donc des offres « Standard » et « de base » (ça a quand même l’air relativement similaire), des familles de calcul optimal et d’autres d’usage général… des machines avec un stockage temporaire (je reviendrai dessus plus tard), etc. Il y a le choix pour vraiment obtenir une configuration comme on le désire, mais c’est quand même déroutant au départ. Au moins la tarification mensuelle est claire, même si au final elle est calculée à la minute de fonctionnement. Je pars pour une machine B1ms : 1 coeur virtuel et 2 Go de mémoire vive, le minimum.

La suite : les disques.

Par défaut, les machines Windows ont un disque système calibré à 128 Go, et en fonction de la taille de la machine commandée, un disque supplémentaire « temporaire ». Le disque temporaire est un disque qui est monté vierge à chaque extinction complète de la VM (lorsque les ressources sont libérées côté Azure, j’y reviendrai également). Il ne peut donc pas servir pour du stockage usuel, mais pourquoi pas pour des fichiers temporaires ou pour le fichier d’échange. Pas bête. Naturellement, il est possible d’ajouter des disques supplémentaires. La technologie des disques est laissée au choix de l’utilisateur, avec bien évidemment des performances supérieures pour les SSD, avec un prix en rapport.

La configuration de mise en réseau permet de définir comment la machine va être raccordée aux autres machines que l’on possède et éventuellement à internet.

L’adresse IP publique est par défaut dynamique, en sachant qu’un nom DNS fixe peut être défini (quelque peu long puisque pour une VM située en France, le sous-domaine est francecentral.cloudapp.azure.com). Il est cependant possible d’attribuer une adresse IP publique fixe.

Je dois avouer que j’ai pas encore trop saisi l’intérêt de la partie Administration, peut-être que ça viendra plus tard ; cela est sans doute utile dans le cadre de déploiement d’applications ou de maquettes de tests. Ayant monté cette VM Windows 10 pour me faire un bureau à distance avec des applications standards, je pense pas vraiment avoir besoin de cette feature.

La configuration de l’invité ne fonctionne pas pour les OS Windows car il s’agit d’un traitement CloudInit, cela concerne donc plus les machines fonctionnant sous GNU/Linux. Les étiquettes permettent de mettre des libellés sur les machines comme le nom l’indique bien. Pratique pour retrouver ses ressources dans de grands environnements.

Et enfin, au moment de la vérification de la configuration, juste avant de créer la ressource, on obtient la tarification définitive, dépendant de la taille de la machine, des disques, des options réseau ainsi que de l’emplacement où se situera la VM. En fonction des datacenters le prix peut varier du simple au double presque, ce qui n’est pas négligeable. A noter qu’en Europe de l’Ouest, l’Allemagne est le pays où la tarification horaire est la plus faible, bien que nous ne soyons pas si mal lotis en France.

Je valide la création. C’est en cours :

Puis quelques minutes plus tard, la création est terminée. Dans l’écran des ressources, je vois donc tout ce qui a été créé avec ma VM :

J’obtiens donc une vue toute éclatée de tous les éléments comportant la VM, que je peux ensuite parcourir pour obtenir plus de détails. La vue de la VM reste la plus complète avec une vision d’ensemble de celle-ci. Il est possible de s’y connecter en RDP avec des liens tout prêts, fonctionnant avec Windows mais aussi le client RDP disponible sous macOS.
Sur cette page, je peux démarrer ou arrêter la VM ; sachant qu’un arrêt sur cette page arrêtera la tarification de la VM. En effet, les ressources sont complètement désallouées, ce qui signifie qu’il faut un peu plus de temps qu’un simple boot pour démarrer la VM. Si cela peut être problématique pour des VM supposées démarrer quotidiennement et que l’on éteint pour des économies, dans un cadre personnel ou pour se monter un environnement de développement ou une maquette, cela n’a rien d’aberrant.
La ressource de l’IP publique permet de gérer la sécurité et le pare-feu.
A noter que lors de la création de VM, il est demandé si l’on souhaite par exemple autoriser le RDP entrant ou le SSH. Il est toujours possible d’accéder bien évidemment aux fonctionnalités de pare-feu depuis l’OS invité.
Parlons maintenant ce qui peut fâcher : la facturation. Pour le coup, tout est plutôt clair et limpide. En se rendant dans la partie facturation du portail Azure, les chiffres sont exposés et tous les coûts par ressources sont éclatés. Par exemple, ce « camembert » permet de comprendre le coût de chacun des éléments de la VM et d’identifier les coûts de multiples adresses IP pour une machine, ou encore de multiples disques.
Je vois donc qu’au bout de quelques jours, le stockage m’a coûté 1€, la ressource pour la VM (finalement 2 coeurs et 4 Go de RAM) 72 centimes et l’allocation d’IP sur le réseau 32 centimes. La partie droite sur le schéma permet de budgéter sur le mois les coûts. Plus de précision est évidemment possible, que ce soit par pool ou par type de ressource.
Cela me semble déjà pas mal pour un premier aperçu. Il existe pas mal d’autres pages par rapport à la VM, notamment tout l’aspect sauvegarde, supervision et automatisation. J’essayerai d’aborder cela prochainement dans un deuxième billet avec un peu plus de recul, en mettant en situation le fonctionnement d’une infrastructure de petite PME (2 contrôleurs de domaine – si possible en Windows Server 2019 si il est disponible d’ici là… – et quelques stations Windows 10) pour gérer la partie réseau ainsi que la séparation dans un autre pool.