
Service de géotraitement ArcGIS Enterprise qui publie une boîte à outils Python pour l'exécution de commandes.
Ce dépôt contient une définition de service de géotraitement ArcGIS qui publie une boîte à outils Python en tant que tâche d'exécution de commandes. Il est destiné à des tests de sécurité autorisés.
Ne publiez pas et n'utilisez pas ce service sur des systèmes pour lesquels vous ne disposez pas d'une autorisation explicite. Un service de géotraitement exécute du code côté serveur sous le compte de service ArcGIS Server ; ce projet peut donc créer une interface de type web-shell vers l'hôte.
L'artefact principal est ArcGIS_Shell, une tâche de boîte à outils Python avec un seul paramètre d'entrée :
command
Lorsque la tâche s'exécute, le serveur exécute cette commande via le shell du système d'exploitation et renvoie la sortie console normale via le résultat de la tâche ArcGIS.
Le dépôt inclut deux fichiers de définition de service ArcGIS prédéfinis :
ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd
Il inclut également des dossiers de définition de service extraits :
ArcGIS_Shell_10.9.1_and_earlier/
ArcGIS_Shell_11_or_later/
Ces dossiers contiennent les fichiers qu'ArcGIS empaquette dans les archives .sd, y compris les fichiers ArcGIS_Shell.pyt intégrés. Modifiez les dossiers extraits lorsque vous changez la définition de service, puis reconstruisez les fichiers .sd avec package_sd.py.
Une définition de service ArcGIS (.sd) est un artefact de déploiement empaqueté. Elle contient les métadonnées du service, la configuration, les ressources de boîte à outils ou de carte, ainsi que les fichiers de support nécessaires à ArcGIS Server pour publier un service.
Dans ce dépôt, chaque .sd est une archive 7-Zip utilisant des paramètres de compression compatibles avec ArcGIS :
-ms=off
-m0=LZMA:d=14
Les deux dossiers de définition de service diffèrent principalement par la version de packaging ArcGIS :
10.9.1 and earlier: p20 paths, offlineSDVersion10x, ArcGIS 2.9 schema
11 or later: p30 paths, offlineSDVersion11, ArcGIS 3.1 schema
La logique de la boîte à outils Python intégrée est la même dans les deux cas.
Les services de géotraitement ArcGIS sont normalement utilisés pour exposer des workflows d'analyse SIG via HTTP. Un workflow courant est le suivant :
Les exemples légitimes incluent le découpage d'entités, l'exécution d'analyses de réseau, le traitement de rasters, la génération de rapports et l'exécution de transformations SIG par lots.
La propriété de sécurité importante est que les tâches de géotraitement exécutent du Python côté serveur. Si une tâche publiée accepte une entrée contrôlée par l'utilisateur et la transmet à des primitives dangereuses telles que subprocess.run(..., shell=True), la tâche de géotraitement devient une interface d'exécution de commandes. C'est ce que ce projet démontre.
La tâche Shell accepte un paramètre de type chaîne nommé command. La boîte à outils Python exécute cette commande sur l'hôte ArcGIS Server et renvoie stdout/stderr dans le résultat de la tâche.
Cela signifie qu'un opérateur disposant de l'autorisation de publier ou d'administrer des services de géotraitement ArcGIS peut créer un service de type web-shell via les fonctionnalités ArcGIS normales. La commande s'exécute dans le contexte de sécurité du compte de processus ArcGIS Server.
Le service active également la capacité Uploads d'ArcGIS. Cela expose les points de terminaison de téléversement du service :
/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads
/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/upload
Les téléversements sont stockés par ArcGIS Server dans le répertoire système du site, généralement sous un chemin comme :
<arcgisserver>/directories/arcgissystem/arcgisuploads/<itemID>
Le chemin exact dépend de la configuration du répertoire ArcGIS Server. Les administrateurs peuvent consulter les éléments téléversés via :
https://<server>/arcgis/admin/uploads?f=pjson
Ne modifiez ni ne supprimez manuellement les fichiers dans arcgissystem. Supprimez les éléments téléversés via REST ou le Administrator Directory.
Utilisez le fichier .sd correspondant à la version cible d'ArcGIS :
ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd
Flux typique dans ArcGIS Server Manager :
Ouvrez ArcGIS Server Manager :
https://<server>/arcgis/manager
Connectez-vous avec un compte autorisé à publier des services. Cela inclut généralement portaladmin.
Accédez à Services.
Cliquez sur Publish Service.
Téléversez le fichier .sd approprié pour la version d'ArcGIS. Cliquez sur Next.
Sur la page « Specify properties for your new service », modifiez le nom du service si vous le souhaitez. Cliquez sur Next.
Sur la page « Share your services with », vous n'avez besoin de cocher aucune case. Cliquez sur Publish.
Le service démarre automatiquement. Cliquez sur le nom du service, puis sur Capabilities, puis sur l'URL REST.
Pour supprimer le service, cliquez sur le « X » à côté du nom du service.
Les fichiers .sd préconstruits incluent déjà :
"capabilities": "Uploads"
Ils incluent également de larges paramètres de téléversement pour les tests :
"maxUploadFileSize": "2048",
"allowedUploadFileTypes": "<broad explicit extension list>"
maxUploadFileSize est en Mo. La liste d'extensions est volontairement large pour les travaux d'évaluation, mais elle reste une liste d'autorisation explicite, et non un véritable joker « tout autoriser ».
Après la publication, ouvrez le service dans le répertoire des services REST ArcGIS :
https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer
Si le service est publié dans un dossier, incluez le nom du dossier :
https://<server>/arcgis/rest/services/<folder>/ArcGIS_Shell/GPServer
Ouvrir la tâche :
https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/Shell
Cliquez sur Execute Task.
Définissez votre commande et soumettez le formulaire. Le résultat de la tâche doit contenir la sortie de la commande.
La sortie est au format JSON, les retours à la ligne sont donc échappés (\r\n). Vous devrez post-traiter les sorties multi-lignes.
Comme la tâche utilise le shell du système d'exploitation, les commandes intégrées au shell fonctionnent :
dir
echo test
whoami /groups
Sur les cibles Linux, utilisez les commandes Linux :
id
uname -a
pwd
Ouvrez la ressource uploads :
https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads
Cliquez sur Upload Item, ou accédez directement à :
https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/upload
L'interface web REST devrait afficher un sélecteur de fichiers si les téléversements sont activés.
Utilisez le formulaire pour choisir un fichier et soumettre le téléversement. La réponse inclut un itemID.
Inspectez l'élément téléversé avec :
https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/<itemID>
Supprimez l'élément téléversé avec :
https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/<itemID>/delete
Utilisez le formulaire web REST sur cette page pour soumettre l'opération de suppression.