Table des matières

Office 365

Office 365 est la marque désignant les formules permettant d'obtenir la dernière version de Microsoft Office et un ensemble de services Cloud de Microsoft.

Les inscription étaient basées sur un script en ruby inspiré de celui qui permet d'obtenir des licences dreamspark. Le service est maintenant basé sur l'API (Azure) qu'offre Microsoft pour inscrire des étudiants

Offre : Office 365 proplus for students

Installation des outils suivants sur 5 PC (ou macs), 5 tablettes et 5 téléphones :

Bonus :

Solution actuelle

Windows Server 2016

La solution tourne dorénavant sur Windows Server 2016, sur Atlantis. On peut passer par noVNC pour se connecter sur la VM. Cependant, si vous avez des problèmes avec l'interface, vous pouvez encore vous connecter dessus via RDP en utilisant remmina ou un autre logiciel.

Le serveur Windows ne dispose pas d'interface graphique ! Il ne donne accès qu'à une invite de commande. N'hésitez pas à utiliser la documentation de Powershell avant de faire quoi que ce soit.

Pour pouvoir lancer le site Web, exécutez le binaire httpd.exe :

C:\Apache24\bin\httpd.exe

Mais on préfère faire en sorte que ce soit automatique :

On installe le service Apache dans windows :

> C:\Apache24\bin\httpd.exe -k install -n "Apache2.4"

Puis on met le service en autostart :

> sc config Apache2.4 start=auto

On vérifie :

> sc qc Apache2.4

Le serveur doit maintenant se lancer tout seul au démarrage de la machine

Si le serveur se plein dans les logs du fait qu'il n'arrive pas à charger les libs (notamment ldap), c'est probablement que le PATH du user AUTORITE NT\Système ne possède pas le chemin vers php et ses extensions (.dll), cela peut arriver si jamais php n'est pas correctement installé. En ce cas :

> regedit.exe

Dans le registre, se rendre dans : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, puis ajouter à la fin de la variable Path le chemin vers php et ses extensions, soit pour une installation à la racine de C: : ;C:\php;C:\php\ext

Vous pouvez alors relancer le service Apache et vérifier que tout fonctionne.

Fonctionnement: On a un formulaire php qui fait la requête LDAP et vérifie que l'utilisateur existe et qu'il est bien qui il prétend être (user,mdp). Puis, le script PHP appel un script powershell qui fait les requêtes “in a microsoft way”. Puis un message final apparaît sur la page utilisateur lui indiquant soit qu'il a déjà un compte soit qu'il peut se connecter sur portal.office.com.

Installation d'OpenSSH

Le lien suivi est celui-ci : OpenSSH.

Note :

powershell.exe -ExecutionPolicy Bypass -File 'C:\Program Files\OpenSSH\install-sshd.ps1'
powershell.exe -ExecutionPolicy Bypass -File 'C:\Program Files\OpenSSH\install-sshd.ps1'
powershell.exe -ExecutionPolicy Bypass -File 'C:\Program Files\OpenSSH\FixHostFilePermissions.ps1'
powershell.exe -ExecutionPolicy Bypass -File 'C:\Program Files\OpenSSH\FixUserFilePermissions.ps1'
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

Il est nécessaire de mettre une règle dans le parefeu. Toujours via PowerShell, on utilise :

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Après installation, les permissions doivent être les suivantes :

icacls 'C:\Program Files\OpenSSH\'
      . NT SERVICE\TrustedInstaller:(I)(F)
        NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F)
        NT AUTHORITY\SYSTEM:(I)(F)
        NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
        BUILTIN\Administrators:(I)(F)
        BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
        BUILTIN\Users:(I)(RX)
        BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
        CREATOR OWNER:(I)(OI)(CI)(IO)(F)
        APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
        APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE)
        APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)
        APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE)

Quelques informations utiles

Pour télécharger via le proxy, il faut spécifier ceci car PowerShell utilise une version antérieure de SSL/TLS:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Puis, il vient :

wget -uri URL -Proxy http://192.168.103.61:82/ -OutFile NOM_du_FICHIER

Parfois le copier-collé passe mal via l'interface de Proxmox. La solution pas optimisée du tout est la suivante :

Pour partager un dossier sans être très fin sur les permissions, on utilise :

net share DataShare=c:\Data /GRANT:Administrateur,FULL

Remarque : DataShare est un alias, on aurait très bien pu mettre toto. Pour monter le dossier depuis Linux, (en supposant cifs-utils installé) :

sudo mount -t cifs //192.168.103.166/DataShare /point/de/montage -o username=Administrateur,password=LE_MOT_DE_PASSE,uid=olivier,gid=olivier,rw,iocharset=utf8,file_mode=0777,dir_mode=0777

Pour supprimer le partage actif :

net share NOM_DU_POINT_DE_MONTAGE /delete

Pour voir la liste des partages actifs :

net share

Ancienne Solution

Une nouvelle solution a été implémenté car l'interface graphique de microsoft évolué trop souvent pour que le script sélénium offre une solution stable.

La solution tourne sur une machine virtuelle Windows 10 activée avec une licence de 4 ans MSDNA. Le code utilisé est disponible sur le gitlab dans le groupe microsoft.

Un fichier README est disponible sur le bureau de la machine pour guider l'administrateur vers les bons dossiers

Un serveur apache a été installé dans C:\\Apache24. Pour le lancer, executer:

 C:\Apache24\bin\httpd.exe -k start 

Le répertoire contenant le projet git est dans C:\\Apache24\htdocs\office-minet.

PHP a été installé dans C:\\php.

Il a fallu installer les composants powershell nécessaire pour communiquer avec Ofice 365. https://docs.microsoft.com/fr-fr/office365/enterprise/powershell/connect-to-office-365-powershell

Il faut d'ailleurs activer l'éxecution du powershell:

 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 

Très Ancienne solution

Le script Dreamspark utilise selenium, et a donc besoin d'un navigateur pour fonctionner. Il tourne sur la même CT que Dreamspark, qui a besoin d'une IP publique car le https ne passe pas par nos proxys. EDIT: Depuis un certain temps le service tourne dans une KVM séparée à cause de quelques problèmes rencontrés avec xvfb.

apt-get install ruby iceweasel ruby1.9.1-dev xvfb build-essential
gem install net-ldap selenium-webdriver logger

Le même service xvfb est utilisé pour Dreamspark et Office365 :

#!/bin/bash
 
XVFB=/usr/bin/Xvfb
# XVFBARGS=":99 -fbdir /var/run -ac"
XVFBARGS=":99 -nolisten tcp -fbdir /var/run"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac
 
exit 0

Lancement du script en cron :

38 * * * * root cd /opt/office-script && export DISPLAY=:99 && ruby office.rb

Le script est dans /opt/office-script. Les logs sont écrits dans /var/log/office-script.log.

Fonctionnement du script

Pour obtenir une licence

Envoyer un mail (peu importe le contenu du mail) à office@minet.net avec son adresse telecom.