J'ai créé un service de fenêtre qui surveille les fichiers sur un répertoire spécifique de notre système d'exploitation Windows. Lorsqu'un fichier est détecté, le service effectue des E / S sur les fichiers, lit les fichiers, crée des sous-répertoires, etc. Ce service utilise également la connectivité de la base de données pour se connecter à un autre serveur. Mon plan consiste à exécuter le service en tant que compte «Service local» par défaut. Étant donné que je dois autoriser les privilèges d'écriture / lecture, ce que, apparemment, le compte "Service local" ne fait pas par défaut, je vais définir explicitement les privilèges "Contrôle total" pour le compte "Service local" sur le dossier que je suis lecture / écriture vers et depuis.
Je crois que ce qui précède est un bon. Ma question est la suivante: pour le dossier dans lequel je lis et j'écris, dois-je configurer un rôle "Service réseau" avec un accès de contrôle total? Je me demande, puisque mon service utilise la connectivité de la base de données à un autre serveur, si j'ai besoin de la configuration du compte "Service réseau".
Je peux mal comprendre ce que fait le compte "Service réseau".
la source
LocalService
est compromis, il aurait accès à tout ce que vous avez ouvertLocalService
, alors qu'il n'aurait normalement accès à rien. Il s'agit d'une procédure d'exploitation standard de sécurité informatique depuis les années 70 .LocalSystem
a plus de droits et de privilèges que les comptes d'administrateur standard.La réponse précédente ne semblait pas répondre directement aux questions, j'ai donc pensé y ajouter quelque chose.
Personnellement, je ne vois pas de gros problème avec ce plan. Avec BUILTINs, le choix est entre:
On peut dire que l'ajout de quelques ACL supplémentaires pour pouvoir utiliser la deuxième option est préférable. Oui, l'option la plus sûre pour un service à faible privilège mais hautement sensible à la sécurité serait de s'exécuter sous un compte de service personnalisé à faible privilège. Mais à moins que vous ne vouliez créer un nouveau compte / gérer les mots de passe pour chaque service que vous déployez, l'utilisation de LocalService pour des tâches non sensibles mineures n'est pas si terrible. Vous avez juste besoin de prendre une décision responsable sur la base de ces considérations, comme ce qui se trouve dans ce répertoire ou cette base de données, l'impact en cas de violation, etc.
Bien que, encore une fois, par principe de privilège minimum, vous ne devez définir que
Full Control
si ceModify
n'est vraiment pas suffisant.Si votre base de données nécessite une connexion Windows Integrated / SSPI, alors oui, vous devrez utiliser NetworkService (ou un compte de service de domaine) partout, c'est-à-dire RunAs et les autorisations de répertoire. En supposant que vous ayez également accordé à votre ordinateur $ ou votre compte de domaine l'accès à cette base de données. Je doute que vous le fassiez, donc s'il utilise l'authentification normale par nom d'utilisateur / pwd, vous devriez pouvoir tout faire avec LocalService. Vous devez accorder un seul droit de compte sur ce répertoire, quel que soit celui que vous utilisez dans vos RunAs, pas les deux.
LocalService / NetworkService sont des comptes presque identiques sur l'ordinateur local. La différence réside principalement dans ce qu'ils peuvent faire sur le réseau. NS peut accéder à certaines ressources réseau car il apparaît sur le réseau en tant que compte réel (ordinateur). Mais LS apparaîtra comme ANONYME, donc tout ce qui se trouve sur le réseau sera refusé.
Soit dit en passant, vous devez utiliser une tâche planifiée pour cela, pas un service.
* À partir de Vista, en raison de l' isolement des services , un processus LocalService compromis ne peut pas facilement en attaquer un autre. Chaque processus / instance de service LocalService / NetworkService obtient son propre SID de session de connexion unique (propriétaire unique), contrairement à Windows 2003. Mais je ne suis pas sûr que ce soit parfait et atténue complètement la vulnérabilité DACL sur les fichiers et les ressources. Les SID et les jetons restreints en écriture sont mentionnés dans ce contexte.
la source
Les autres réponses confirment ce que vous dites à propos de l'utilisation du service local. Pour résumer, le service local est le compte recommandé à utiliser avec votre service, sauf si vous avez besoin des fonctionnalités SSPI Active Directory supplémentaires du service réseau.
Pour restreindre l'accès en lecture / écriture à un dossier spécifique, vous pouvez faire mieux que simplement donner l'accès au compte de service local générique. Le problème, comme d'autres l'ont souligné, est que cela donnerait également un accès en lecture / écriture à tous les autres services fonctionnant en tant que service local et si tous les services le faisaient, le service local aurait progressivement accès à des ressources de plus en plus importantes.
La solution consiste plutôt à ACL votre dossier en utilisant votre SID de service spécifique. Seul votre propre processus de service est associé à votre SID de service, ce qui verrouille encore plus votre ressource. Vous pouvez afficher le SID du service à l'aide de
sc showsid <service name>
. Le SID du service est généré à partir du nom du service, il sera donc le même sur toutes les machines.Pour activer l'utilisation du SID de service par votre service, utilisez
ChangeServiceConfig2
avec laSERVICE_SID_INFO
structure à définirSERVICE_SID_TYPE_UNRESTRICTED
. Vous pouvez également définirSERVICE_SID_TYPE_RESTRICTED
pour obtenir un SID encore plus restreint qui autorise uniquement l'accès en écriture aux ressources explicitement autorisées avec votre SID de service.Ce lien contient les descriptions de haut niveau des SID de service et des SID de service restreint: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)
la source